diff options
Diffstat (limited to 'source/blender/blenloader/intern')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 249 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 215 |
2 files changed, 463 insertions, 1 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index c76261418f8..1b0658be08a 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -70,6 +70,7 @@ #include "DNA_key_types.h" #include "DNA_lattice_types.h" #include "DNA_lamp_types.h" +#include "DNA_linestyle_types.h" #include "DNA_meta_types.h" #include "DNA_material_types.h" #include "DNA_mesh_types.h" @@ -4841,6 +4842,7 @@ static void lib_link_scene(FileData *fd, Main *main) Base *base, *next; Sequence *seq; SceneRenderLayer *srl; + FreestyleLineSet *fls; TimeMarker *marker; sce= main->scene.first; @@ -4932,6 +4934,10 @@ static void lib_link_scene(FileData *fd, Main *main) for (srl= sce->r.layers.first; srl; srl= srl->next) { srl->mat_override= newlibadr_us(fd, sce->id.lib, srl->mat_override); srl->light_override= newlibadr_us(fd, sce->id.lib, srl->light_override); + for(fls=srl->freestyleConfig.linesets.first; fls; fls= fls->next) { + fls->linestyle= newlibadr_us(fd, sce->id.lib, fls->linestyle); + fls->group= newlibadr_us(fd, sce->id.lib, fls->group); + } } /*Game Settings: Dome Warp Text*/ sce->gm.dome.warptext= newlibadr(fd, sce->id.lib, sce->gm.dome.warptext); @@ -4968,6 +4974,7 @@ static void direct_link_scene(FileData *fd, Scene *sce) Editing *ed; Sequence *seq; MetaStack *ms; + SceneRenderLayer *srl; sce->theDag = NULL; sce->dagisvalid = 0; @@ -5146,6 +5153,13 @@ static void direct_link_scene(FileData *fd, Scene *sce) link_list(fd, &(sce->transform_spaces)); link_list(fd, &(sce->r.layers)); + for(srl= sce->r.layers.first; srl; srl= srl->next) { + link_list(fd, &(srl->freestyleConfig.modules)); + } + for(srl= sce->r.layers.first; srl; srl= srl->next) { + link_list(fd, &(srl->freestyleConfig.linesets)); + } + sce->nodetree= newdataadr(fd, sce->nodetree); if (sce->nodetree) direct_link_nodetree(fd, sce->nodetree); @@ -6267,6 +6281,177 @@ static void lib_link_movieclip(FileData *fd, Main *main) } } +/* ************ READ LINE STYLE ***************** */ + +static void lib_link_linestyle(FileData *fd, Main *main) +{ + FreestyleLineStyle *linestyle; + LineStyleModifier *m; + + linestyle = main->linestyle.first; + while (linestyle) { + if (linestyle->id.flag & LIB_NEEDLINK) { + linestyle->id.flag -= LIB_NEEDLINK; + + if (linestyle->id.properties) IDP_LibLinkProperty(linestyle->id.properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); + if (linestyle->adt) lib_link_animdata(fd, &linestyle->id, linestyle->adt); + for (m = linestyle->color_modifiers.first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + { + LineStyleColorModifier_DistanceFromObject *cm = (LineStyleColorModifier_DistanceFromObject *)m; + cm->target = newlibadr(fd, linestyle->id.lib, cm->target); + } + break; + } + } + for (m = linestyle->alpha_modifiers.first; m; m = m->next){ + switch (m->type) { + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + { + LineStyleAlphaModifier_DistanceFromObject *am = (LineStyleAlphaModifier_DistanceFromObject *)m; + am->target = newlibadr(fd, linestyle->id.lib, am->target); + } + break; + } + } + for (m = linestyle->thickness_modifiers.first; m; m = m->next){ + switch (m->type) { + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + { + LineStyleThicknessModifier_DistanceFromObject *tm = (LineStyleThicknessModifier_DistanceFromObject *)m; + tm->target = newlibadr(fd, linestyle->id.lib, tm->target); + } + break; + } + } + } + linestyle = linestyle->id.next; + } +} + +static void direct_link_linestyle_color_modifier(FileData *fd, LineStyleModifier *modifier) +{ + switch (modifier->type) { + case LS_MODIFIER_ALONG_STROKE: + { + LineStyleColorModifier_AlongStroke *m = (LineStyleColorModifier_AlongStroke *)modifier; + m->color_ramp = newdataadr(fd, m->color_ramp); + } + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + { + LineStyleColorModifier_DistanceFromCamera *m = (LineStyleColorModifier_DistanceFromCamera *)modifier; + m->color_ramp = newdataadr(fd, m->color_ramp); + } + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + { + LineStyleColorModifier_DistanceFromObject *m = (LineStyleColorModifier_DistanceFromObject *)modifier; + m->color_ramp = newdataadr(fd, m->color_ramp); + } + break; + case LS_MODIFIER_MATERIAL: + { + LineStyleColorModifier_Material *m = (LineStyleColorModifier_Material *)modifier; + m->color_ramp = newdataadr(fd, m->color_ramp); + } + break; + } +} + +static void direct_link_linestyle_alpha_modifier(FileData *fd, LineStyleModifier *modifier) +{ + switch (modifier->type) { + case LS_MODIFIER_ALONG_STROKE: + { + LineStyleAlphaModifier_AlongStroke *m = (LineStyleAlphaModifier_AlongStroke *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + { + LineStyleAlphaModifier_DistanceFromCamera *m = (LineStyleAlphaModifier_DistanceFromCamera *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + { + LineStyleAlphaModifier_DistanceFromObject *m = (LineStyleAlphaModifier_DistanceFromObject *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + case LS_MODIFIER_MATERIAL: + { + LineStyleAlphaModifier_Material *m = (LineStyleAlphaModifier_Material *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + } +} + +static void direct_link_linestyle_thickness_modifier(FileData *fd, LineStyleModifier *modifier) +{ + switch (modifier->type) { + case LS_MODIFIER_ALONG_STROKE: + { + LineStyleThicknessModifier_AlongStroke *m = (LineStyleThicknessModifier_AlongStroke *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + { + LineStyleThicknessModifier_DistanceFromCamera *m = (LineStyleThicknessModifier_DistanceFromCamera *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + { + LineStyleThicknessModifier_DistanceFromObject *m = (LineStyleThicknessModifier_DistanceFromObject *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + case LS_MODIFIER_MATERIAL: + { + LineStyleThicknessModifier_Material *m = (LineStyleThicknessModifier_Material *)modifier; + m->curve = newdataadr(fd, m->curve); + direct_link_curvemapping(fd, m->curve); + } + break; + } +} + +static void direct_link_linestyle_geometry_modifier(FileData *fd, LineStyleModifier *modifier) +{ +} + +static void direct_link_linestyle(FileData *fd, FreestyleLineStyle *linestyle) +{ + LineStyleModifier *modifier; + + linestyle->adt= newdataadr(fd, linestyle->adt); + direct_link_animdata(fd, linestyle->adt); + link_list(fd, &linestyle->color_modifiers); + for(modifier=linestyle->color_modifiers.first; modifier; modifier= modifier->next) + direct_link_linestyle_color_modifier(fd, modifier); + link_list(fd, &linestyle->alpha_modifiers); + for(modifier=linestyle->alpha_modifiers.first; modifier; modifier= modifier->next) + direct_link_linestyle_alpha_modifier(fd, modifier); + link_list(fd, &linestyle->thickness_modifiers); + for(modifier=linestyle->thickness_modifiers.first; modifier; modifier= modifier->next) + direct_link_linestyle_thickness_modifier(fd, modifier); + link_list(fd, &linestyle->geometry_modifiers); + for(modifier=linestyle->geometry_modifiers.first; modifier; modifier= modifier->next) + direct_link_linestyle_geometry_modifier(fd, modifier); +} + /* ************** GENERAL & MAIN ******************** */ @@ -6301,6 +6486,7 @@ static const char *dataname(short id_code) case ID_PA: return "Data from PA"; case ID_GD: return "Data from GD"; case ID_MC: return "Data from MC"; + case ID_LS: return "Data from LS"; } return "Data from Lib Block"; @@ -6473,6 +6659,9 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID case ID_MC: direct_link_movieclip(fd, (MovieClip *)id); break; + case ID_LS: + direct_link_linestyle(fd, (FreestyleLineStyle *)id); + break; } /*link direct data of ID properties*/ @@ -7522,6 +7711,36 @@ static void do_versions(FileData *fd, Library *lib, Main *main) } } + /* default values in Freestyle settings */ + { + Scene *sce; + SceneRenderLayer *srl; + FreestyleLineStyle *linestyle; + + for(sce = main->scene.first; sce; sce = sce->id.next) { + if (sce->r.line_thickness_mode == 0) { + sce->r.line_thickness_mode= R_LINE_THICKNESS_ABSOLUTE; + sce->r.unit_line_thickness= 1.f; + } + for(srl= sce->r.layers.first; srl; srl= srl->next) { + if (srl->freestyleConfig.mode == 0) + srl->freestyleConfig.mode= FREESTYLE_CONTROL_EDITOR_MODE; + if (srl->freestyleConfig.raycasting_algorithm == 0) + srl->freestyleConfig.raycasting_algorithm= FREESTYLE_ALGO_CULLED_ADAPTIVE_CUMULATIVE; + } + } + for(linestyle = main->linestyle.first; linestyle; linestyle = linestyle->id.next) { + if (linestyle->thickness_position == 0) { + linestyle->thickness_position= LS_THICKNESS_CENTER; + linestyle->thickness_ratio= 0.5f; + } + if (linestyle->chaining == 0) + linestyle->chaining= LS_CHAINING_PLAIN; + if (linestyle->rounds == 0) + linestyle->rounds= 3; + } + } + /* WATCH IT!!!: pointers from libdata have not been converted yet here! */ /* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */ @@ -7567,6 +7786,7 @@ static void lib_link_all(FileData *fd, Main *main) lib_link_brush(fd, main); lib_link_particlesettings(fd, main); lib_link_movieclip(fd, main); + lib_link_linestyle(fd, main); lib_link_mesh(fd, main); /* as last: tpage images with users at zero */ @@ -8450,6 +8670,7 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) { Base *base; SceneRenderLayer *srl; + FreestyleLineSet *lineset; for (base= sce->base.first; base; base= base->next) { expand_doit(fd, mainvar, base->object); @@ -8470,6 +8691,12 @@ static void expand_scene(FileData *fd, Main *mainvar, Scene *sce) for (srl= sce->r.layers.first; srl; srl= srl->next) { expand_doit(fd, mainvar, srl->mat_override); expand_doit(fd, mainvar, srl->light_override); + + for (lineset= srl->freestyleConfig.linesets.first; lineset; lineset= lineset->next) { + if (lineset->group) + expand_doit(fd, mainvar, lineset->group); + expand_doit(fd, mainvar, lineset->linestyle); + } } if (sce->r.dometext) @@ -8531,6 +8758,25 @@ static void expand_movieclip(FileData *fd, Main *mainvar, MovieClip *clip) if (clip->adt) expand_animdata(fd, mainvar, clip->adt); } +static void expand_linestyle(FileData *fd, Main *mainvar, FreestyleLineStyle *linestyle) +{ + LineStyleModifier *m; + + if (linestyle->adt) + expand_animdata(fd, mainvar, linestyle->adt); + for (m = linestyle->color_modifiers.first; m; m = m->next) { + if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) + expand_doit(fd, mainvar, ((LineStyleColorModifier_DistanceFromObject *)m)->target); + } + for (m = linestyle->alpha_modifiers.first; m; m = m->next){ + if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) + expand_doit(fd, mainvar, ((LineStyleAlphaModifier_DistanceFromObject *)m)->target); + } + for (m = linestyle->thickness_modifiers.first; m; m = m->next){ + if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) + expand_doit(fd, mainvar, ((LineStyleThicknessModifier_DistanceFromObject *)m)->target); + } +} static void expand_main(FileData *fd, Main *mainvar) { @@ -8618,6 +8864,9 @@ static void expand_main(FileData *fd, Main *mainvar) case ID_MC: expand_movieclip(fd, mainvar, (MovieClip *)id); break; + case ID_LS: + expand_linestyle(fd, mainvar, (FreestyleLineStyle *)id); + break; } doit= 1; diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index f065ae238a6..35347ae40a3 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -108,6 +108,7 @@ Any case: direct data is ALWAYS after the lib block #include "DNA_key_types.h" #include "DNA_lattice_types.h" #include "DNA_lamp_types.h" +#include "DNA_linestyle_types.h" #include "DNA_meta_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" @@ -2098,6 +2099,8 @@ static void write_scenes(WriteData *wd, ListBase *scebase) TimeMarker *marker; TransformOrientation *ts; SceneRenderLayer *srl; + FreestyleModuleConfig *fmc; + FreestyleLineSet *fls; ToolSettings *tos; sce= scebase->first; @@ -2224,8 +2227,18 @@ static void write_scenes(WriteData *wd, ListBase *scebase) for (ts = sce->transform_spaces.first; ts; ts = ts->next) writestruct(wd, DATA, "TransformOrientation", 1, ts); - for (srl= sce->r.layers.first; srl; srl= srl->next) + for (srl= sce->r.layers.first; srl; srl= srl->next) { writestruct(wd, DATA, "SceneRenderLayer", 1, srl); + + for(fmc= srl->freestyleConfig.modules.first; fmc; fmc = fmc->next) { + writestruct(wd, DATA, "FreestyleModuleConfig", 1, fmc); + } + + for(fls= srl->freestyleConfig.linesets.first; fls; fls = fls->next) { + writestruct(wd, DATA, "FreestyleLineSet", 1, fls); + } + + } if (sce->nodetree) { writestruct(wd, DATA, "bNodeTree", 1, sce->nodetree); @@ -2754,6 +2767,205 @@ static void write_movieclips(WriteData *wd, ListBase *idbase) mywrite(wd, MYWRITE_FLUSH, 0); } +static void write_linestyle_color_modifiers(WriteData *wd, ListBase *modifiers) +{ + LineStyleModifier *m; + char *struct_name; + + for (m = modifiers->first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_ALONG_STROKE: + struct_name = "LineStyleColorModifier_AlongStroke"; + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + struct_name = "LineStyleColorModifier_DistanceFromCamera"; + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + struct_name = "LineStyleColorModifier_DistanceFromObject"; + break; + case LS_MODIFIER_MATERIAL: + struct_name = "LineStyleColorModifier_Material"; + break; + default: + struct_name = "LineStyleColorModifier"; // this should not happen + } + writestruct(wd, DATA, struct_name, 1, m); + } + for (m = modifiers->first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_ALONG_STROKE: + writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_AlongStroke *)m)->color_ramp); + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_DistanceFromCamera *)m)->color_ramp); + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_DistanceFromObject *)m)->color_ramp); + break; + case LS_MODIFIER_MATERIAL: + writestruct(wd, DATA, "ColorBand", 1, ((LineStyleColorModifier_Material *)m)->color_ramp); + break; + } + } +} + +static void write_linestyle_alpha_modifiers(WriteData *wd, ListBase *modifiers) +{ + LineStyleModifier *m; + char *struct_name; + + for (m = modifiers->first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_ALONG_STROKE: + struct_name = "LineStyleAlphaModifier_AlongStroke"; + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + struct_name = "LineStyleAlphaModifier_DistanceFromCamera"; + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + struct_name = "LineStyleAlphaModifier_DistanceFromObject"; + break; + case LS_MODIFIER_MATERIAL: + struct_name = "LineStyleAlphaModifier_Material"; + break; + default: + struct_name = "LineStyleAlphaModifier"; // this should not happen + } + writestruct(wd, DATA, struct_name, 1, m); + } + for (m = modifiers->first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_ALONG_STROKE: + write_curvemapping(wd, ((LineStyleAlphaModifier_AlongStroke *)m)->curve); + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + write_curvemapping(wd, ((LineStyleAlphaModifier_DistanceFromCamera *)m)->curve); + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + write_curvemapping(wd, ((LineStyleAlphaModifier_DistanceFromObject *)m)->curve); + break; + case LS_MODIFIER_MATERIAL: + write_curvemapping(wd, ((LineStyleAlphaModifier_Material *)m)->curve); + break; + } + } +} + +static void write_linestyle_thickness_modifiers(WriteData *wd, ListBase *modifiers) +{ + LineStyleModifier *m; + char *struct_name; + + for (m = modifiers->first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_ALONG_STROKE: + struct_name = "LineStyleThicknessModifier_AlongStroke"; + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + struct_name = "LineStyleThicknessModifier_DistanceFromCamera"; + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + struct_name = "LineStyleThicknessModifier_DistanceFromObject"; + break; + case LS_MODIFIER_MATERIAL: + struct_name = "LineStyleThicknessModifier_Material"; + break; + case LS_MODIFIER_CALLIGRAPHY: + struct_name = "LineStyleThicknessModifier_Calligraphy"; + break; + default: + struct_name = "LineStyleThicknessModifier"; // this should not happen + } + writestruct(wd, DATA, struct_name, 1, m); + } + for (m = modifiers->first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_ALONG_STROKE: + write_curvemapping(wd, ((LineStyleThicknessModifier_AlongStroke *)m)->curve); + break; + case LS_MODIFIER_DISTANCE_FROM_CAMERA: + write_curvemapping(wd, ((LineStyleThicknessModifier_DistanceFromCamera *)m)->curve); + break; + case LS_MODIFIER_DISTANCE_FROM_OBJECT: + write_curvemapping(wd, ((LineStyleThicknessModifier_DistanceFromObject *)m)->curve); + break; + case LS_MODIFIER_MATERIAL: + write_curvemapping(wd, ((LineStyleThicknessModifier_Material *)m)->curve); + break; + } + } +} + +static void write_linestyle_geometry_modifiers(WriteData *wd, ListBase *modifiers) +{ + LineStyleModifier *m; + char *struct_name; + + for (m = modifiers->first; m; m = m->next) { + switch (m->type) { + case LS_MODIFIER_SAMPLING: + struct_name = "LineStyleGeometryModifier_Sampling"; + break; + case LS_MODIFIER_BEZIER_CURVE: + struct_name = "LineStyleGeometryModifier_BezierCurve"; + break; + case LS_MODIFIER_SINUS_DISPLACEMENT: + struct_name = "LineStyleGeometryModifier_SinusDisplacement"; + break; + case LS_MODIFIER_SPATIAL_NOISE: + struct_name = "LineStyleGeometryModifier_SpatialNoise"; + break; + case LS_MODIFIER_PERLIN_NOISE_1D: + struct_name = "LineStyleGeometryModifier_PerlinNoise1D"; + break; + case LS_MODIFIER_PERLIN_NOISE_2D: + struct_name = "LineStyleGeometryModifier_PerlinNoise2D"; + break; + case LS_MODIFIER_BACKBONE_STRETCHER: + struct_name = "LineStyleGeometryModifier_BackboneStretcher"; + break; + case LS_MODIFIER_TIP_REMOVER: + struct_name = "LineStyleGeometryModifier_TipRemover"; + break; + case LS_MODIFIER_POLYGONIZATION: + struct_name = "LineStyleGeometryModifier_Polygonalization"; + break; + case LS_MODIFIER_GUIDING_LINES: + struct_name = "LineStyleGeometryModifier_GuidingLines"; + break; + case LS_MODIFIER_BLUEPRINT: + struct_name = "LineStyleGeometryModifier_Blueprint"; + break; + case LS_MODIFIER_2D_OFFSET: + struct_name = "LineStyleGeometryModifier_2DOffset"; + break; + case LS_MODIFIER_2D_TRANSFORM: + struct_name = "LineStyleGeometryModifier_2DTransform"; + break; + default: + struct_name = "LineStyleGeometryModifier"; // this should not happen + } + writestruct(wd, DATA, struct_name, 1, m); + } +} + +static void write_linestyles(WriteData *wd, ListBase *idbase) +{ + FreestyleLineStyle *linestyle; + + for(linestyle=idbase->first; linestyle; linestyle= linestyle->id.next) { + if(linestyle->id.us>0 || wd->current) { + writestruct(wd, ID_LS, "FreestyleLineStyle", 1, linestyle); + if (linestyle->id.properties) IDP_WriteProperty(linestyle->id.properties, wd); + if (linestyle->adt) write_animdata(wd, linestyle->adt); + write_linestyle_color_modifiers(wd, &linestyle->color_modifiers); + write_linestyle_alpha_modifiers(wd, &linestyle->alpha_modifiers); + write_linestyle_thickness_modifiers(wd, &linestyle->thickness_modifiers); + write_linestyle_geometry_modifiers(wd, &linestyle->geometry_modifiers); + } + } +} + /* context is usually defined by WM, two cases where no WM is available: * - for forward compatibility, curscreen has to be saved * - for undofile, curscene needs to be saved */ @@ -2863,6 +3075,7 @@ static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFil write_brushes (wd, &mainvar->brush); write_scripts (wd, &mainvar->script); write_gpencils (wd, &mainvar->gpencil); + write_linestyles(wd, &mainvar->linestyle); write_libraries(wd, mainvar->next); if (write_user_block) { |