Skip to content

Commit 5f51462

Browse files
committed
OcdFileExport/Import: Handle V12 area clipping
Resolves GH-1424.
1 parent cf2a1a2 commit 5f51462

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/fileformats/ocd_file_export.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,6 +1256,8 @@ quint8 OcdFileExport::exportAreaSymbolCommon(const AreaSymbol* area_symbol, OcdA
12561256
ocd_area_common.fill_color = convertColor(area_symbol->getColor());
12571257
}
12581258

1259+
ocd_area_common.structure_draw_V12 = 0;
1260+
12591261
quint8 flags = 0;
12601262
// Hatch
12611263
// ocd_area_common.hatch_mode = Ocd::HatchNone; // 0
@@ -1333,7 +1335,28 @@ quint8 OcdFileExport::exportAreaSymbolCommon(const AreaSymbol* area_symbol, OcdA
13331335
addWarning(tr("In area symbol \"%1\", skipping a fill pattern.").arg(area_symbol->getPlainTextName()));
13341336
}
13351337
}
1338+
1339+
if (ocd_version >= 12
1340+
&& ocd_area_common.structure_mode != Ocd::StructureNone)
1341+
{
1342+
switch (pattern.clipping())
1343+
{
1344+
case AreaSymbol::FillPattern::NoClippingIfCompletelyInside:
1345+
ocd_area_common.structure_draw_V12 = 1;
1346+
break;
1347+
case AreaSymbol::FillPattern::NoClippingIfCenterInside:
1348+
ocd_area_common.structure_draw_V12 = 2;
1349+
break;
1350+
case AreaSymbol::FillPattern::NoClippingIfPartiallyInside:
1351+
ocd_area_common.structure_draw_V12 = 3;
1352+
break;
1353+
default:
1354+
// no change
1355+
break;
1356+
}
1357+
}
13361358
}
1359+
13371360
return flags;
13381361
}
13391362

src/fileformats/ocd_file_import.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,25 @@ void OcdFileImport::setupAreaSymbolCommon(OcdImportedAreaSymbol* symbol, bool fi
16591659
pattern.offset_along_line = pattern.point_distance / 2;
16601660
pattern.point = duplicate(*pattern.point).release();
16611661
}
1662+
1663+
if (ocd_version >= 12)
1664+
{
1665+
switch (ocd_symbol.structure_draw_V12)
1666+
{
1667+
case 0:
1668+
pattern.setClipping(AreaSymbol::FillPattern::Default);
1669+
break;
1670+
case 1:
1671+
pattern.setClipping(AreaSymbol::FillPattern::NoClippingIfCompletelyInside);
1672+
break;
1673+
case 2:
1674+
pattern.setClipping(AreaSymbol::FillPattern::NoClippingIfCenterInside);
1675+
break;
1676+
case 3:
1677+
pattern.setClipping(AreaSymbol::FillPattern::NoClippingIfPartiallyInside);
1678+
break;
1679+
}
1680+
}
16621681
symbol->patterns.push_back(pattern);
16631682
}
16641683
}

0 commit comments

Comments
 (0)