123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- Attribute VB_Name = "lines"
- '// This is free and unencumbered software released into the public domain.
- '// For more information, please refer to https://github.com/hongwenjun
- Sub start()
- LinesForm.Show 0
- End Sub
- Public Function Nodes_DrawLines()
- Dim sr As ShapeRange, sr_tmp As New ShapeRange, sr_lines As New ShapeRange
- Dim s As Shape, sh As Shape
- Dim nr As NodeRange
- Set sr = ActiveSelectionRange
- If sr.Count = 0 Then Exit Function
-
- For Each sh In sr
- Set nr = sh.Curve.Selection
- If nr.Count > 0 Then
- For Each n In nr
- Set s = ActiveLayer.CreateEllipse2(n.PositionX, n.PositionY, 0.5, 0.5)
- sr_tmp.Add s
- Next n
- End If
- Next sh
-
- '// 没有选择节点的情况,使用物件中心划线
- If sr_tmp.Count < 2 And sr.Count > 1 Then
- Set Line = DrawLine(sr(1), sr(2))
- sr_lines.Add Line
- End If
- #If VBA7 Then
- sr_tmp.Sort "@shape1.left < @shape2.left"
- #Else
- Set sr_tmp = X4_Sort_ShapeRange(sr_tmp, stlx)
- #End If
- '// 使用 Count 遍历 shaperange 这种情况方便点
- For i = 1 To sr_tmp.Count - 1
- Set Line = DrawLine(sr_tmp(i), sr_tmp(i + 1))
- sr_lines.Add Line
- Next
-
- sr_tmp.Delete
- sr_lines.CreateSelection
- End Function
- Public Function Draw_Multiple_Lines(hv As cdrAlignType)
- Dim sr As ShapeRange, sr_lines As New ShapeRange
- Set sr = ActiveSelectionRange
-
- If sr.Count < 2 Then Exit Function
-
- #If VBA7 Then
- If hv = cdrAlignVCenter Then
- '// 从左到右排序
- sr.Sort "@shape1.left < @shape2.left"
- ElseIf hv = cdrAlignHCenter Then
- '// 从上到下排序
- sr.Sort "@shape1.top < @shape2.top"
- End If
- #Else
- '// X4_Sort_ShapeRange for CorelDRAW X4
- If hv = cdrAlignVCenter Then
- Set sr = X4_Sort_ShapeRange(sr, stlx)
- ElseIf hv = cdrAlignHCenter Then
- Set sr = X4_Sort_ShapeRange(sr, stty)
- End If
-
- #End If
- For i = 1 To sr.Count - 1 Step 2
- Set Line = DrawLine(sr(i), sr(i + 1))
- sr_lines.Add Line
- Next
-
- sr_lines.CreateSelection
- End Function
- Public Function FirtLineTool()
- Dim sr As ShapeRange
- Set sr = ActiveSelectionRange
- If sr.Count > 1 Then
- Set Line = DrawLine(sr(1), sr(2))
- End If
- End Function
- Private Function DrawLine(ByVal s1 As Shape, ByVal s2 As Shape) As Shape
- '// 创建线段方法在图层上的指定位置创建由单个线段组成的曲线。
- Set DrawLine = ActiveLayer.CreateLineSegment(s1.CenterX, s1.CenterY, s2.CenterX, s2.CenterY)
- End Function
- Private Sub Test()
- ActiveDocument.Unit = cdrMillimeter
- Set Rect = ActiveLayer.CreateRectangle(0, 0, 30, 30)
- Set ell = ActiveLayer.CreateEllipse2(50, 50, 10, 10)
- Set Line = DrawLine(Rect, ell)
- End Sub
|