diff options
author | Ton Roosendaal <ton@blender.org> | 2005-04-25 01:38:19 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-04-25 01:38:19 +0400 |
commit | 7f75cfdd29d2045896c738d1e60bc235586c26f5 (patch) | |
tree | bde2f950f19bc284221490642bf7c0072af9772f /source/blender | |
parent | 9083ab1a14225a69310a7707798b2c123c8d9442 (diff) |
Bug fix #2469
Apparently DXF allows layers to be read too... this went wrong in 2 ways;
- object->lay was not equal to base->lay
- if DXF has layer info, but not readable, it set object->lay to 1 instead
of using 'current layer'.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/intern/exotic.c | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c index 082a02277d6..4405dc8bb98 100644 --- a/source/blender/blenkernel/intern/exotic.c +++ b/source/blender/blenkernel/intern/exotic.c @@ -3507,10 +3507,10 @@ static int dxf_get_layer_col(char *layer) static int dxf_get_layer_num(char *layer) { - int ret = 1; - + int ret = 0; + if (all_digits(layer) && atoi(layer)<(1<<20)) ret= atoi(layer); - if (ret == 0) ret = 1; + if (ret == 0) ret = G.scene->lay; return ret; } @@ -3687,22 +3687,24 @@ static void dxf_get_mesh(Mesh** m, Object** o, int noob) Mesh *me = NULL; Object *ob; - if (!noob) { - *o = add_object(OB_MESH); - ob = *o; + if (!noob) { + *o = add_object(OB_MESH); + ob = *o; - if (strlen(entname)) new_id(&G.main->object, (ID *)ob, entname); - else if (strlen(layname)) new_id(&G.main->object, (ID *)ob, - layname); + if (strlen(entname)) new_id(&G.main->object, (ID *)ob, entname); + else if (strlen(layname)) new_id(&G.main->object, (ID *)ob, layname); - if (strlen(layname)) ob->lay= dxf_get_layer_num(layname); - else ob->lay= G.scene->lay; + if (strlen(layname)) ob->lay= dxf_get_layer_num(layname); + else ob->lay= G.scene->lay; + // not nice i know... but add_object() sets active base, which needs layer setting too (ton) + G.scene->basact->lay= ob->lay; - *m = ob->data; - me= *m; + *m = ob->data; + me= *m; - vcenter= ob->loc; - } else { + vcenter= ob->loc; + } + else { *o = NULL; *m = add_mesh(); G.totmesh++; @@ -4302,7 +4304,9 @@ static void dxf_read_polyline(int noob) { if (strlen(layname)) ob->lay= dxf_get_layer_num(layname); else ob->lay= G.scene->lay; - + // not nice i know... but add_object() sets active base, which needs layer setting too (ton) + G.scene->basact->lay= ob->lay; + me= ob->data; vcenter= ob->loc; @@ -4407,6 +4411,8 @@ static void dxf_read_polyline(int noob) { if (strlen(layname)) ob->lay= dxf_get_layer_num(layname); else ob->lay= G.scene->lay; + // not nice i know... but add_object() sets active base, which needs layer setting too (ton) + G.scene->basact->lay= ob->lay; me= ob->data; @@ -4768,6 +4774,8 @@ static void dxf_read_3dface(int noob) if (strlen(layname)) ob->lay= dxf_get_layer_num(layname); else ob->lay= G.scene->lay; + // not nice i know... but add_object() sets active base, which needs layer setting too (ton) + G.scene->basact->lay= ob->lay; me= ob->data; @@ -5026,7 +5034,7 @@ static void dxf_read(char *filename) if (strlen(layname)) ob->lay= dxf_get_layer_num(layname); else ob->lay= G.scene->lay; - /* aan de scene hangen */ + /* link to scene */ base= MEM_callocN( sizeof(Base), "add_base"); BLI_addhead(&G.scene->base, base); |