diff options
| author | Mikko Syrjä <mikko@3d-system.fi> | 2019-02-26 23:28:08 +0200 |
|---|---|---|
| committer | Mikko Syrjä <mikko@3d-system.fi> | 2019-02-26 23:28:08 +0200 |
| commit | cbbdab342fc0c117443d6f4455b0852ccf561be1 (patch) | |
| tree | 77de90a110b66c8964898b21369fbb0fad32f0b9 /symbol.cpp | |
| parent | e1b36719796209bfe47320c493b708d27dab3f25 (diff) | |
| download | symedit-cbbdab342fc0c117443d6f4455b0852ccf561be1.tar.gz symedit-cbbdab342fc0c117443d6f4455b0852ccf561be1.zip | |
Implemented area filling.
Diffstat (limited to 'symbol.cpp')
| -rw-r--r-- | symbol.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
@@ -48,6 +48,7 @@ SymEditSymbol::SymEditSymbol() : ActiveIndex(-1) void SymEditSymbol::Load(const QString& buffer) { Items.clear(); + int fill = 0; QPoint position(0, 0); for ( const auto& string : buffer.split(';', QString::SkipEmptyParts) ) { @@ -58,13 +59,15 @@ void SymEditSymbol::Load(const QString& buffer) int x = string.mid(1, comma - 1).toInt(); int y = string.mid(comma + 1).toInt(); if ( operation != 'U' ) - Items.push_back(Item(operation, position, QPoint(x, y), false)); + Items.push_back(Item(operation, position, QPoint(x, y), fill)); position = QPoint(x, y); } + else if ( operation == 'F' ) + fill = string.mid(1).toInt(); else // single parameter { int value = string.mid(1).toInt(); - Items.push_back(Item(operation, position, value, false)); + Items.push_back(Item(operation, position, value, fill)); } } ActiveIndex = static_cast<int>(Items.size()) - 1; @@ -85,7 +88,14 @@ QString& SymEditSymbol::Save(QString& buffer) const buffer.append(',').append(value.setNum(point.y())); buffer.append(';'); }; + auto appendfill = [](QString& buffer, int fill) + { + QString value; + buffer.append('F').append(value.setNum(fill)).append(';'); + return fill; + }; + int fill = 0; buffer.clear(); QPoint position(0, 0); for ( const auto& item : Items ) switch ( item.Operation ) @@ -93,6 +103,8 @@ QString& SymEditSymbol::Save(QString& buffer) const case 'D': // line case 'B': // rectangle { + if ( item.Fill != fill ) + fill = appendfill(buffer, item.Fill); if ( item.Point != position ) appendvalue(buffer.append('U'), item.Point, 2); appendvalue(buffer.append(item.Operation), item.Value, 2); @@ -101,6 +113,8 @@ QString& SymEditSymbol::Save(QString& buffer) const } case 'R': // circle { + if ( item.Fill != fill ) + fill = appendfill(buffer, item.Fill); if ( item.Point != position ) appendvalue(buffer.append('U'), item.Point, 2); appendvalue(buffer.append(item.Operation), item.Value, 1); |
