Skip to content

Commit

Permalink
spec: rename LAYER.on to LAYER.off
Browse files Browse the repository at this point in the history
See GH #1080
  • Loading branch information
rurban committed Feb 21, 2025
1 parent cea1e50 commit 9b74ea0
Show file tree
Hide file tree
Showing 9 changed files with 29 additions and 34 deletions.
2 changes: 1 addition & 1 deletion doc/dynapi.texi
Original file line number Diff line number Diff line change
Expand Up @@ -10130,7 +10130,7 @@ H
BS
@item frozen
B
@item on
@item off
B
@item frozen_in_new
B
Expand Down
4 changes: 2 additions & 2 deletions include/dwg.h
Original file line number Diff line number Diff line change
Expand Up @@ -2480,7 +2480,7 @@ typedef struct _dwg_object_LAYER
{
/*<! flag0 DWG r2000+
1: frozen
2: on
2: off
4: frozen_in_new
8: locked
16: plotflag
Expand All @@ -2489,7 +2489,7 @@ typedef struct _dwg_object_LAYER
COMMON_TABLE_FIELDS;
BITCODE_BS flag0; /* The DWG variant of 70, flag is for DXF */
BITCODE_B frozen;
BITCODE_B on;
BITCODE_B off;
BITCODE_B frozen_in_new;
BITCODE_B locked;
BITCODE_B plotflag; /* DXF 290 (optional) */
Expand Down
2 changes: 1 addition & 1 deletion programs/dwg2SVG.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ entity_invisible (Dwg_Object *obj)
return false;
_obj = layer->tio.object->tio.LAYER;
// pre-r13 it is set if the layer color is negative
return _obj->on == 0 ? true : false;
return _obj->off == 1 ? true : false;
}

static double
Expand Down
4 changes: 2 additions & 2 deletions programs/dwglayers.c
Original file line number Diff line number Diff line change
Expand Up @@ -168,10 +168,10 @@ main (int argc, char *argv[])
continue;
assert (_ctrl->entries[i]->obj->tio.object);
layer = _ctrl->entries[i]->obj->tio.object->tio.LAYER;
if (on && (!layer->on || layer->frozen))
if (on && (layer->off || layer->frozen))
continue;
if (flags)
printf ("%s%s%s\t", layer->frozen ? "f" : " ", layer->on ? "+" : "-",
printf ("%s%s%s\t", layer->frozen ? "f" : " ", layer->off ? "-" : "+",
layer->locked ? "l" : " ");
if (extnames && dwg.header.from_version >= R_13b1
&& dwg.header.from_version < R_2000)
Expand Down
19 changes: 10 additions & 9 deletions src/dwg.spec
Original file line number Diff line number Diff line change
Expand Up @@ -3755,15 +3755,15 @@ DWG_TABLE (LAYER)
FIELD_CAST (flag0, RC, BS, 0);

DECODER {
FIELD_VALUE (on) = FIELD_VALUE (color.index) >= 0;
FIELD_VALUE (off) = FIELD_VALUE (color.index) < 0;
FIELD_VALUE (frozen) = FIELD_VALUE (flag) & 1;
FIELD_VALUE (frozen_in_new) = FIELD_VALUE (flag) & 2;
FIELD_VALUE (locked) = FIELD_VALUE (flag) & 4;
}
}
VERSIONS (R_13b1, R_14) {
FIELD_B (frozen, 0); // bit 1
FIELD_B (on, 0); // really: negate the color
FIELD_B (off, 0); // also: negate the color. see below
FIELD_B (frozen_in_new, 0);
FIELD_B (locked, 0);
}
Expand All @@ -3772,12 +3772,12 @@ DWG_TABLE (LAYER)
int flag0 = FIELD_VALUE (flag0);
FIELD_BSx (flag0, 0); // -> 70,290,370
flag0 = FIELD_VALUE (flag0);
// DWG: frozen (1), on (2), frozen by default (4),
// DWG: frozen (1), off (2), frozen by default (4),
// locked (8), plotting flag (16), and linewt (mask with 0x03E0)
FIELD_VALUE (frozen) = flag0 & 1;
LOG_LAYER_FLAG(frozen);
FIELD_VALUE (on) = !(flag0 & 2);
LOG_LAYER_FLAG_REV(on);
FIELD_VALUE (off) = flag0 & 2;
LOG_LAYER_FLAG(off);
FIELD_VALUE (frozen_in_new) = (flag0 & 4) ? 1 : 0;
LOG_LAYER_FLAG(frozen_in_new);
FIELD_VALUE (locked) = (flag0 & 8) ? 1 : 0;
Expand All @@ -3800,26 +3800,27 @@ DWG_TABLE (LAYER)
}
SINCE (R_13b1) {
DXF {
if (! FIELD_VALUE(on)) {
if (FIELD_VALUE(off)) {
FIELD_VALUE (color.index) = - FIELD_VALUE(color.index); // Negative value in case of disabled layer
}
}
FIELD_CMC (color, 62);
}
VERSIONS (R_13b1, R_14) {
DECODER {
FIELD_VALUE (on) = FIELD_VALUE (color.index) >= 0;
FIELD_VALUE (off) = FIELD_VALUE (color.index) < 0;
LOG_LAYER_FLAG(off);
}
// for DWG
FIELD_VALUE (flag0) |= FIELD_VALUE (frozen) |
(FIELD_VALUE (frozen_in_new) << 1) |
(FIELD_VALUE (locked) << 2) |
(FIELD_VALUE (on) ? 0 : 32);
(FIELD_VALUE (off) ? 32 : 0);
// for DXF
FIELD_VALUE (flag) |= FIELD_VALUE (frozen) |
(FIELD_VALUE (frozen_in_new) << 1) |
(FIELD_VALUE (locked) << 2) |
(FIELD_VALUE (on) ? 0 : 32);
(FIELD_VALUE (off) ? 32: 0);
}

SINCE (R_13b1) {
Expand Down
2 changes: 1 addition & 1 deletion src/dynapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -8427,7 +8427,7 @@ static const Dwg_DYNAPI_field _dwg_LAYER_fields[] = {
0,0,0, 0 },
{ "frozen", "B", sizeof (BITCODE_B), OFF (struct _dwg_object_LAYER, frozen),
0,0,0, 0 },
{ "on", "B", sizeof (BITCODE_B), OFF (struct _dwg_object_LAYER, on),
{ "off", "B", sizeof (BITCODE_B), OFF (struct _dwg_object_LAYER, off),
0,0,0, 0 },
{ "frozen_in_new", "B", sizeof (BITCODE_B), OFF (struct _dwg_object_LAYER, frozen_in_new),
0,0,0, 0 },
Expand Down
8 changes: 1 addition & 7 deletions src/in_dxf.c
Original file line number Diff line number Diff line change
Expand Up @@ -9849,13 +9849,7 @@ static __nonnull ((1, 2, 3, 4)) Dxf_Pair *new_object (
SINCE (R_2000b)
{
SET_CTRL_BIT (1, frozen);
bit = flag & 2 ? 0 : 1; // reverse
if (bit)
{
dwg_dynapi_entity_set_value (_obj, obj->name, "on",
&bit, 1);
LOG_TRACE ("%s.%s = %d [B]\n", name, "on", bit);
}
SET_CTRL_BIT (2, off);
SET_CTRL_BIT (4, frozen_in_new);
SET_CTRL_BIT (8, locked);
SET_CTRL_BIT (32768, plotflag);
Expand Down
18 changes: 9 additions & 9 deletions test/unit-testing/dynapi_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -50487,19 +50487,19 @@ static int test_LAYER (const Dwg_Object *obj)
fail ("LAYER.name [T] '%s' <> '%s'", name, layer->name);
}
{
BITCODE_B on;
if (dwg_dynapi_entity_value (layer, "LAYER", "on", &on, NULL)
&& on == layer->on)
BITCODE_B off;
if (dwg_dynapi_entity_value (layer, "LAYER", "off", &off, NULL)
&& off == layer->off)
pass ();
else
fail ("LAYER.on [B] " FORMAT_B " != " FORMAT_B "", layer->on, on);
on++;
if (dwg_dynapi_entity_set_value (layer, "LAYER", "on", &on, 0)
&& on == layer->on)
fail ("LAYER.off [B] " FORMAT_B " != " FORMAT_B "", layer->off, off);
off++;
if (dwg_dynapi_entity_set_value (layer, "LAYER", "off", &off, 0)
&& off == layer->off)
pass ();
else
fail ("LAYER.on [B] set+1 " FORMAT_B " != " FORMAT_B "", layer->on, on);
layer->on--;
fail ("LAYER.off [B] set+1 " FORMAT_B " != " FORMAT_B "", layer->off, off);
layer->off--;
}
{
struct _dwg_object_object* parent;
Expand Down
4 changes: 2 additions & 2 deletions test/unit-testing/layer.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ api_process (dwg_object *obj)
BITCODE_H xref;

BITCODE_B frozen;
BITCODE_B on;
BITCODE_B off;
BITCODE_B frozen_in_new;
BITCODE_B locked;
BITCODE_B plotflag;
Expand All @@ -40,7 +40,7 @@ api_process (dwg_object *obj)
CHK_ENTITY_H (layer, LAYER, xref);

CHK_ENTITY_TYPE (layer, LAYER, frozen, B);
CHK_ENTITY_TYPE (layer, LAYER, on, B);
CHK_ENTITY_TYPE (layer, LAYER, off, B);
CHK_ENTITY_TYPE (layer, LAYER, frozen_in_new, B);
CHK_ENTITY_TYPE (layer, LAYER, locked, B);
CHK_ENTITY_TYPE (layer, LAYER, plotflag, B);
Expand Down

0 comments on commit 9b74ea0

Please sign in to comment.