LineStyleModifier *BKE_copy_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) { LineStyleModifier *new_m; new_m = alloc_thickness_modifier(m->type); if (!new_m) return NULL; new_m->influence = m->influence; new_m->flags = m->flags; new_m->blend = m->blend; switch (m->type) { case LS_MODIFIER_ALONG_STROKE: { LineStyleThicknessModifier_AlongStroke *p = (LineStyleThicknessModifier_AlongStroke *)m; LineStyleThicknessModifier_AlongStroke *q = (LineStyleThicknessModifier_AlongStroke *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_DISTANCE_FROM_CAMERA: { LineStyleThicknessModifier_DistanceFromCamera *p = (LineStyleThicknessModifier_DistanceFromCamera *)m; LineStyleThicknessModifier_DistanceFromCamera *q = (LineStyleThicknessModifier_DistanceFromCamera *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->range_min = p->range_min; q->range_max = p->range_max; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_DISTANCE_FROM_OBJECT: { LineStyleThicknessModifier_DistanceFromObject *p = (LineStyleThicknessModifier_DistanceFromObject *)m; LineStyleThicknessModifier_DistanceFromObject *q = (LineStyleThicknessModifier_DistanceFromObject *)new_m; if (p->target) p->target->id.us++; q->target = p->target; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->range_min = p->range_min; q->range_max = p->range_max; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_MATERIAL: { LineStyleThicknessModifier_Material *p = (LineStyleThicknessModifier_Material *)m; LineStyleThicknessModifier_Material *q = (LineStyleThicknessModifier_Material *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->mat_attr = p->mat_attr; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_CALLIGRAPHY: { LineStyleThicknessModifier_Calligraphy *p = (LineStyleThicknessModifier_Calligraphy *)m; LineStyleThicknessModifier_Calligraphy *q = (LineStyleThicknessModifier_Calligraphy *)new_m; q->min_thickness = p->min_thickness; q->max_thickness = p->max_thickness; q->orientation = p->orientation; break; } default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->thickness_modifiers, new_m); return new_m; }
LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *linestyle, LineStyleModifier *m) { LineStyleModifier *new_m; new_m = alloc_thickness_modifier(m->name, m->type); if (!new_m) return NULL; new_m->influence = m->influence; new_m->flags = m->flags; new_m->blend = m->blend; switch (m->type) { case LS_MODIFIER_ALONG_STROKE: { LineStyleThicknessModifier_AlongStroke *p = (LineStyleThicknessModifier_AlongStroke *)m; LineStyleThicknessModifier_AlongStroke *q = (LineStyleThicknessModifier_AlongStroke *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_DISTANCE_FROM_CAMERA: { LineStyleThicknessModifier_DistanceFromCamera *p = (LineStyleThicknessModifier_DistanceFromCamera *)m; LineStyleThicknessModifier_DistanceFromCamera *q = (LineStyleThicknessModifier_DistanceFromCamera *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->range_min = p->range_min; q->range_max = p->range_max; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_DISTANCE_FROM_OBJECT: { LineStyleThicknessModifier_DistanceFromObject *p = (LineStyleThicknessModifier_DistanceFromObject *)m; LineStyleThicknessModifier_DistanceFromObject *q = (LineStyleThicknessModifier_DistanceFromObject *)new_m; if (p->target) id_us_plus(&p->target->id); q->target = p->target; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->range_min = p->range_min; q->range_max = p->range_max; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_MATERIAL: { LineStyleThicknessModifier_Material *p = (LineStyleThicknessModifier_Material *)m; LineStyleThicknessModifier_Material *q = (LineStyleThicknessModifier_Material *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->mat_attr = p->mat_attr; q->value_min = p->value_min; q->value_max = p->value_max; break; } case LS_MODIFIER_CALLIGRAPHY: { LineStyleThicknessModifier_Calligraphy *p = (LineStyleThicknessModifier_Calligraphy *)m; LineStyleThicknessModifier_Calligraphy *q = (LineStyleThicknessModifier_Calligraphy *)new_m; q->min_thickness = p->min_thickness; q->max_thickness = p->max_thickness; q->orientation = p->orientation; break; } case LS_MODIFIER_TANGENT: { LineStyleThicknessModifier_Tangent *p = (LineStyleThicknessModifier_Tangent *)m; LineStyleThicknessModifier_Tangent *q = (LineStyleThicknessModifier_Tangent *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->min_thickness = p->min_thickness; q->max_thickness = p->max_thickness; break; } case LS_MODIFIER_NOISE: { LineStyleThicknessModifier_Noise *p = (LineStyleThicknessModifier_Noise *)m; LineStyleThicknessModifier_Noise *q = (LineStyleThicknessModifier_Noise *)new_m; q->amplitude = p->amplitude; q->period = p->period; q->seed = p->seed; q->flags = p->flags; break; } case LS_MODIFIER_CURVATURE_3D: { LineStyleThicknessModifier_Curvature_3D *p = (LineStyleThicknessModifier_Curvature_3D *)m; LineStyleThicknessModifier_Curvature_3D *q = (LineStyleThicknessModifier_Curvature_3D *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->min_curvature = p->min_curvature; q->max_curvature = p->max_curvature; q->min_thickness = p->min_thickness; q->max_thickness = p->max_thickness; break; } case LS_MODIFIER_CREASE_ANGLE: { LineStyleThicknessModifier_CreaseAngle *p = (LineStyleThicknessModifier_CreaseAngle *)m; LineStyleThicknessModifier_CreaseAngle *q = (LineStyleThicknessModifier_CreaseAngle *)new_m; q->curve = curvemapping_copy(p->curve); q->flags = p->flags; q->min_angle = p->min_angle; q->max_angle = p->max_angle; q->min_thickness = p->min_thickness; q->max_thickness = p->max_thickness; break; } default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->thickness_modifiers, new_m); return new_m; }
LineStyleModifier *BKE_add_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, int type) { LineStyleModifier *m; m = alloc_thickness_modifier(type); m->blend = LS_VALUE_BLEND; switch (type) { case LS_MODIFIER_ALONG_STROKE: { LineStyleThicknessModifier_AlongStroke *p = (LineStyleThicknessModifier_AlongStroke *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_DISTANCE_FROM_CAMERA: { LineStyleThicknessModifier_DistanceFromCamera *p = (LineStyleThicknessModifier_DistanceFromCamera *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->range_min = 0.0f; p->range_max = 1000.0f; p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_DISTANCE_FROM_OBJECT: { LineStyleThicknessModifier_DistanceFromObject *p = (LineStyleThicknessModifier_DistanceFromObject *)m; p->target = NULL; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->range_min = 0.0f; p->range_max = 1000.0f; p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_MATERIAL: { LineStyleThicknessModifier_Material *p = (LineStyleThicknessModifier_Material *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->mat_attr = LS_MODIFIER_MATERIAL_DIFF; p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_CALLIGRAPHY: { LineStyleThicknessModifier_Calligraphy *p = (LineStyleThicknessModifier_Calligraphy *)m; p->min_thickness = 1.0f; p->max_thickness = 10.0f; p->orientation = DEG2RADF(60.0f); break; } default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->thickness_modifiers, m); return m; }
LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *linestyle, const char *name, int type) { LineStyleModifier *m; m = alloc_thickness_modifier(name, type); m->blend = LS_VALUE_BLEND; switch (type) { case LS_MODIFIER_ALONG_STROKE: { LineStyleThicknessModifier_AlongStroke *p = (LineStyleThicknessModifier_AlongStroke *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_DISTANCE_FROM_CAMERA: { LineStyleThicknessModifier_DistanceFromCamera *p = (LineStyleThicknessModifier_DistanceFromCamera *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->range_min = 0.0f; p->range_max = 1000.0f; p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_DISTANCE_FROM_OBJECT: { LineStyleThicknessModifier_DistanceFromObject *p = (LineStyleThicknessModifier_DistanceFromObject *)m; p->target = NULL; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->range_min = 0.0f; p->range_max = 1000.0f; p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_MATERIAL: { LineStyleThicknessModifier_Material *p = (LineStyleThicknessModifier_Material *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->mat_attr = LS_MODIFIER_MATERIAL_LINE; p->value_min = 0.0f; p->value_max = 1.0f; break; } case LS_MODIFIER_CALLIGRAPHY: { LineStyleThicknessModifier_Calligraphy *p = (LineStyleThicknessModifier_Calligraphy *)m; p->min_thickness = 1.0f; p->max_thickness = 10.0f; p->orientation = DEG2RADF(60.0f); break; } case LS_MODIFIER_TANGENT: { LineStyleThicknessModifier_Tangent *p = (LineStyleThicknessModifier_Tangent *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->min_thickness = 1.0f; p->max_thickness = 10.0f; break; } case LS_MODIFIER_NOISE: { LineStyleThicknessModifier_Noise *p = (LineStyleThicknessModifier_Noise *)m; p->period = 10.0f; p->amplitude = 10.0f; p->seed = 512; p->flags = LS_THICKNESS_ASYMMETRIC; break; } case LS_MODIFIER_CREASE_ANGLE: { LineStyleThicknessModifier_CreaseAngle *p = (LineStyleThicknessModifier_CreaseAngle *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->min_angle = 0.0f; p->max_angle = DEG2RADF(180.0f); p->min_thickness = 1.0f; p->max_thickness = 10.0f; break; } case LS_MODIFIER_CURVATURE_3D: { LineStyleThicknessModifier_Curvature_3D *p = (LineStyleThicknessModifier_Curvature_3D *)m; p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f); p->min_curvature = 0.0f; p->max_curvature = 0.5f; p->min_thickness = 1.0f; p->max_thickness = 10.0f; break; } default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->thickness_modifiers, m); return m; }