Skip to content

Commit 5d49d7f

Browse files
committed
prevent inserting duplicate point nodes
1 parent 8e4a670 commit 5d49d7f

File tree

2 files changed

+42
-4
lines changed

2 files changed

+42
-4
lines changed

‎src/libs/vtools/tools/pattern_piece_tool.cpp‎

Lines changed: 40 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,14 @@ void PatternPieceTool::insertNodes(const QVector<VPieceNode> &nodes, quint32 pie
220220
return;
221221
}
222222

223-
VPiece newPiece = oldPiece;
223+
QVector<VPieceNode> newNodes = removeDuplicateNodePoints(oldPiece, nodes, data);
224224

225-
for (auto node : nodes)
225+
VPiece newPiece = oldPiece;
226+
for (auto node : newNodes)
226227
{
227228
const quint32 id = PrepareNode(node, scene, doc, data);
228-
if (id == NULL_ID)
229-
{
229+
if (id == NULL_ID)
230+
{
230231
return;
231232
}
232233

@@ -1961,6 +1962,41 @@ void PatternPieceTool::initializeNode(const VPieceNode &node, VMainGraphicsScene
19611962
}
19621963
}
19631964

1965+
/// @brief removeDuplicateNodePoints remove duplcate node points
1966+
///
1967+
/// This method creates a list of nodes that removes duplicate point nodes from a list of selected modes.
1968+
/// Curve nodes are not removed.
1969+
///
1970+
/// @param piece Pattern piece that selected nodes are to be inserted into.
1971+
/// @param nodes List of selected nodes.
1972+
/// @param data Pointer to data container.
1973+
/// @return uniqueNodes Vector of nodes with unique point nodes.
1974+
QVector<VPieceNode> PatternPieceTool::removeDuplicateNodePoints(const VPiece &piece, const QVector<VPieceNode> &nodes,
1975+
VContainer *data)
1976+
{
1977+
QVector<quint32> pieceNodeObjIds;
1978+
const QVector<VPieceNode> pieceNodes = piece.GetPath().GetNodes();
1979+
for (auto node : pieceNodes)
1980+
{
1981+
quint32 id = node.GetId();
1982+
QSharedPointer<VGObject> object = data->GetGObject(id);
1983+
const quint32 objectId = object->getIdObject();
1984+
pieceNodeObjIds.append(objectId);
1985+
}
1986+
1987+
QVector<VPieceNode> uniqueNodes;
1988+
for (auto node : nodes)
1989+
{
1990+
quint32 id = node.GetId();
1991+
if (node.GetTypeTool() != Tool::NodePoint ||
1992+
(!pieceNodeObjIds.contains(id) && node.GetTypeTool() == Tool::NodePoint))
1993+
{
1994+
uniqueNodes.append(node);
1995+
}
1996+
}
1997+
return uniqueNodes;
1998+
}
1999+
19642000
//---------------------------------------------------------------------------------------------------------------------
19652001
void PatternPieceTool::InitCSAPaths(const VPiece &piece)
19662002
{

‎src/libs/vtools/tools/pattern_piece_tool.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ private slots:
206206
static void initializeNode(const VPieceNode &node, VMainGraphicsScene *scene, VContainer *data,
207207
VAbstractPattern *doc, PatternPieceTool *parent);
208208

209+
static QVector<VPieceNode> removeDuplicateNodePoints(const VPiece &piece, const QVector<VPieceNode> &nodes, VContainer *data);
210+
209211
void InitCSAPaths(const VPiece &piece);
210212
void InitInternalPaths(const VPiece &piece);
211213
void initializeAnchorPoints(const VPiece &piece);

0 commit comments

Comments
 (0)