It has been noted/discussed in at least two other threads that shaping operations (Weld, Trim, Boundary, etc.) can sometime produce content that will initially have correct geometry, but that can unexpectedly become distorted when some types of node editing operations are performed.
Annoying bug when working with curvers!
Nodes convert on weld, objects distort when nodes moved
My observations are that this has to do with nodes that were Symmetrical nodes before the shaping operation, but should have been changed to Smooth nodes as a result of the shaping operation. These nodes cannot be Symmetrical and produce the correct geometry, but they are still identified as being Symmetrical. Note in this screenshot that the node is identified as being Symmetrical, but the control points are not equal distances away from the node (as they should be if a node is Symmetrical).
If certain node editing operations are performed, such nodes appear to "wake up" and assert their Symmetrical identity - which distorts the geometry.One way to work around this is to perform the shaping operation, then manually find every such node and change it from Symmetrical to Smooth. Depending on the complexity of the shape, that might be very tedious.As a less-tedious workaround, here is a VBA macro I wrote that checks each node in a Curve that is identified as Symmetrical. If the control points are not equal distances from the node, then that node is considered to be a "bogus" Symmetrical node, and is changed to Smooth.
Dim sr As ShapeRange
Dim s As Shape
Dim nodeThis As Node
Const dblLengthToleranceTenthMicrons As Double = 50
Dim lngNodesChangedCounter As Long
Const strMacroName As String = "Fix Bogus Symmetrical Nodes"
On Error GoTo ErrHandler
EventsEnabled = False
Optimization = True
ActiveDocument.BeginCommandGroup "Fix Bogus Symmetrical Nodes"
Set sr = ActiveSelectionRange
If sr.Count = 1 Then
If sr(1).Type = cdrCurveShape Then
Set s = sr(1)
For Each nodeThis In s.Curve.Nodes
If nodeThis.Type = cdrSymmetricalNode Then
If Abs(nodeThis.PrevSegment.EndingControlPointLength - nodeThis.NextSegment.StartingControlPointLength) > ActiveDocument.ToUnits(dblLengthToleranceTenthMicrons, cdrTenthMicron) Then
nodeThis.Type = cdrSmoothNode
lngNodesChangedCounter = lngNodesChangedCounter + 1
MsgBox "Number of nodes changed: " & lngNodesChangedCounter, vbInformation, strMacroName
MsgBox "Selection is not a Curve.", vbInformation, strMacroName
MsgBox "Exactly one Curve shape must be selected.", vbInformation, strMacroName
Optimization = False
EventsEnabled = True
MsgBox "Error occured: " & Err.Description
That same code is in the .GMS file in this.ZIP archive:
JQ_Fix_Bogus_Symmetrical_Nodes - GMS in ZIP
Here is a short video showing an example of a situation where this bug shows up, and how changing those "bogus" Symmetrical nodes to Smooth can be used to correct the problem:
VIDEO: Fix Bogus Symmetrical Nodes
Thank you for taking the time to investigate this issue John, and write a macro to correct these "bogus nodes".Even though I appreciate your efforts, having to use a macro to make sure all nodes are correct is not a solution.What we must do now is to make sure the Corel techs do all they can to correct this very serious bug for version 2019.I am afraid though, that the bad code is spread across a number of different operations and it won't be an easy fix.
Ronny Axelsson said:What we must do now is to make sure the Corel techs do all they can to correct this very serious bug for version 2019.
Well, I'm pretty sure the problem was there in version 9. It exists in my version 12, and has been discussed way back when, so don't hold your breath for a fix anytime soon. Converting offending nodes to cusps has been the general approach in the past. Not ideal though.