LineStyleModifier *BKE_add_linestyle_color_modifier(FreestyleLineStyle *linestyle, int type) { LineStyleModifier *m; m = alloc_color_modifier(type); m->blend = MA_RAMP_BLEND; switch (type) { case LS_MODIFIER_ALONG_STROKE: ((LineStyleColorModifier_AlongStroke *)m)->color_ramp = add_colorband(1); break; case LS_MODIFIER_DISTANCE_FROM_CAMERA: ((LineStyleColorModifier_DistanceFromCamera *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_DistanceFromCamera *)m)->range_min = 0.0f; ((LineStyleColorModifier_DistanceFromCamera *)m)->range_max = 10000.0f; break; case LS_MODIFIER_DISTANCE_FROM_OBJECT: ((LineStyleColorModifier_DistanceFromObject *)m)->target = NULL; ((LineStyleColorModifier_DistanceFromObject *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_DistanceFromObject *)m)->range_min = 0.0f; ((LineStyleColorModifier_DistanceFromObject *)m)->range_max = 10000.0f; break; case LS_MODIFIER_MATERIAL: ((LineStyleColorModifier_Material *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_Material *)m)->mat_attr = LS_MODIFIER_MATERIAL_DIFF; break; default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->color_modifiers, m); return m; }
LineStyleModifier *BKE_linestyle_color_modifier_add(FreestyleLineStyle *linestyle, const char *name, int type) { LineStyleModifier *m; m = alloc_color_modifier(name, type); if (UNLIKELY(m == NULL)) { return NULL; } m->blend = MA_RAMP_BLEND; switch (type) { case LS_MODIFIER_ALONG_STROKE: ((LineStyleColorModifier_AlongStroke *)m)->color_ramp = add_colorband(1); break; case LS_MODIFIER_DISTANCE_FROM_CAMERA: ((LineStyleColorModifier_DistanceFromCamera *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_DistanceFromCamera *)m)->range_min = 0.0f; ((LineStyleColorModifier_DistanceFromCamera *)m)->range_max = 10000.0f; break; case LS_MODIFIER_DISTANCE_FROM_OBJECT: ((LineStyleColorModifier_DistanceFromObject *)m)->target = NULL; ((LineStyleColorModifier_DistanceFromObject *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_DistanceFromObject *)m)->range_min = 0.0f; ((LineStyleColorModifier_DistanceFromObject *)m)->range_max = 10000.0f; break; case LS_MODIFIER_MATERIAL: ((LineStyleColorModifier_Material *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_Material *)m)->mat_attr = LS_MODIFIER_MATERIAL_LINE; break; case LS_MODIFIER_TANGENT: ((LineStyleColorModifier_Tangent *)m)->color_ramp = add_colorband(1); break; case LS_MODIFIER_NOISE: ((LineStyleColorModifier_Noise *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_Noise *)m)->amplitude = 10.0f; ((LineStyleColorModifier_Noise *)m)->period = 10.0f; ((LineStyleColorModifier_Noise *)m)->seed = 512; break; case LS_MODIFIER_CREASE_ANGLE: ((LineStyleColorModifier_CreaseAngle *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_CreaseAngle *)m)->min_angle = 0.0f; ((LineStyleColorModifier_CreaseAngle *)m)->max_angle = DEG2RADF(180.0f); break; case LS_MODIFIER_CURVATURE_3D: ((LineStyleColorModifier_Curvature_3D *)m)->color_ramp = add_colorband(1); ((LineStyleColorModifier_Curvature_3D *)m)->min_curvature = 0.0f; ((LineStyleColorModifier_Curvature_3D *)m)->max_curvature = 0.5f; break; default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->color_modifiers, m); return m; }
LineStyleModifier *BKE_copy_linestyle_color_modifier(FreestyleLineStyle *linestyle, LineStyleModifier *m) { LineStyleModifier *new_m; new_m = alloc_color_modifier(m->type); new_m->influence = m->influence; new_m->flags = m->flags; new_m->blend = m->blend; switch (m->type) { case LS_MODIFIER_ALONG_STROKE: { LineStyleColorModifier_AlongStroke *p = (LineStyleColorModifier_AlongStroke *)m; LineStyleColorModifier_AlongStroke *q = (LineStyleColorModifier_AlongStroke *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); break; } case LS_MODIFIER_DISTANCE_FROM_CAMERA: { LineStyleColorModifier_DistanceFromCamera *p = (LineStyleColorModifier_DistanceFromCamera *)m; LineStyleColorModifier_DistanceFromCamera *q = (LineStyleColorModifier_DistanceFromCamera *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); q->range_min = p->range_min; q->range_max = p->range_max; break; } case LS_MODIFIER_DISTANCE_FROM_OBJECT: { LineStyleColorModifier_DistanceFromObject *p = (LineStyleColorModifier_DistanceFromObject *)m; LineStyleColorModifier_DistanceFromObject *q = (LineStyleColorModifier_DistanceFromObject *)new_m; if (p->target) p->target->id.us++; q->target = p->target; q->color_ramp = MEM_dupallocN(p->color_ramp); q->range_min = p->range_min; q->range_max = p->range_max; break; } case LS_MODIFIER_MATERIAL: { LineStyleColorModifier_Material *p = (LineStyleColorModifier_Material *)m; LineStyleColorModifier_Material *q = (LineStyleColorModifier_Material *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); q->flags = p->flags; q->mat_attr = p->mat_attr; break; } default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->color_modifiers, new_m); return new_m; }
LineStyleModifier *BKE_linestyle_color_modifier_copy(FreestyleLineStyle *linestyle, LineStyleModifier *m) { LineStyleModifier *new_m; new_m = alloc_color_modifier(m->name, m->type); if (UNLIKELY(new_m == NULL)) { 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: { LineStyleColorModifier_AlongStroke *p = (LineStyleColorModifier_AlongStroke *)m; LineStyleColorModifier_AlongStroke *q = (LineStyleColorModifier_AlongStroke *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); break; } case LS_MODIFIER_DISTANCE_FROM_CAMERA: { LineStyleColorModifier_DistanceFromCamera *p = (LineStyleColorModifier_DistanceFromCamera *)m; LineStyleColorModifier_DistanceFromCamera *q = (LineStyleColorModifier_DistanceFromCamera *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); q->range_min = p->range_min; q->range_max = p->range_max; break; } case LS_MODIFIER_DISTANCE_FROM_OBJECT: { LineStyleColorModifier_DistanceFromObject *p = (LineStyleColorModifier_DistanceFromObject *)m; LineStyleColorModifier_DistanceFromObject *q = (LineStyleColorModifier_DistanceFromObject *)new_m; if (p->target) id_us_plus(&p->target->id); q->target = p->target; q->color_ramp = MEM_dupallocN(p->color_ramp); q->range_min = p->range_min; q->range_max = p->range_max; break; } case LS_MODIFIER_MATERIAL: { LineStyleColorModifier_Material *p = (LineStyleColorModifier_Material *)m; LineStyleColorModifier_Material *q = (LineStyleColorModifier_Material *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); q->flags = p->flags; q->mat_attr = p->mat_attr; break; } case LS_MODIFIER_TANGENT: { LineStyleColorModifier_Tangent *p = (LineStyleColorModifier_Tangent *)m; LineStyleColorModifier_Tangent *q = (LineStyleColorModifier_Tangent *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); break; } case LS_MODIFIER_NOISE: { LineStyleColorModifier_Noise *p = (LineStyleColorModifier_Noise *)m; LineStyleColorModifier_Noise *q = (LineStyleColorModifier_Noise *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); q->amplitude = p->amplitude; q->period = p->period; q->seed = p->seed; break; } case LS_MODIFIER_CREASE_ANGLE: { LineStyleColorModifier_CreaseAngle *p = (LineStyleColorModifier_CreaseAngle *)m; LineStyleColorModifier_CreaseAngle *q = (LineStyleColorModifier_CreaseAngle *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); q->min_angle = p->min_angle; q->max_angle = p->max_angle; break; } case LS_MODIFIER_CURVATURE_3D: { LineStyleColorModifier_Curvature_3D *p = (LineStyleColorModifier_Curvature_3D *)m; LineStyleColorModifier_Curvature_3D *q = (LineStyleColorModifier_Curvature_3D *)new_m; q->color_ramp = MEM_dupallocN(p->color_ramp); q->min_curvature = p->min_curvature; q->max_curvature = p->max_curvature; break; } default: return NULL; /* unknown modifier type */ } add_to_modifier_list(&linestyle->color_modifiers, new_m); return new_m; }