明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6350|回复: 10

[原创]反转多段线

  [复制链接]
发表于 2003-9-15 20:54 | 显示全部楼层 |阅读模式
多段线有起始端和终止端,以下程序是将起始端和终止端对调过来,而在多段线的外观上没有变化。
  1. Sub RevPline()
  2.     Dim ent As AcadEntity
  3.     Dim pnt As Variant
  4.     Dim NewCoord() As Double
  5.     Dim i As Integer
  6.     On Error Resume Next
  7.     Do
  8.         ThisDrawing.Utility.GetEntity ent, pnt, "选择多段线:"
  9.         If Err Then Exit Sub
  10.         If TypeName(ent) Like "IAcad*Polyline" Then Exit Do
  11.     Loop
  12.     Dim Coord As Variant
  13.     If TypeName(ent) = "IAcadLWPolyline" Then
  14.         Coord = ent.Coordinates
  15.         ReDim NewCoord(UBound(Coord)) As Double
  16.         For i = 0 To UBound(Coord) - 1 Step 2
  17.             NewCoord(UBound(Coord) - i - 1) = Coord(i)
  18.             NewCoord(UBound(Coord) - i) = Coord(i + 1)
  19.         Next
  20.         ent.Coordinates = NewCoord
  21.         ThisDrawing.Regen acActiveViewport
  22.     ElseIf TypeName(ent) = "IAcadPolyline" Then
  23.         Coord = ent.Coordinates
  24.         ReDim NewCoord(UBound(Coord)) As Double
  25.         For i = 0 To UBound(Coord) - 1 Step 3
  26.             NewCoord(UBound(Coord) - i - 2) = Coord(i)
  27.             NewCoord(UBound(Coord) - i - 1) = Coord(i + 1)
  28.             NewCoord(UBound(Coord) - i) = Coord(i + 2)
  29.         Next
  30.         ent.Coordinates = NewCoord
  31.         ThisDrawing.Regen acActiveViewport
  32.     End If
  33.    
  34. End Sub
发表于 2003-9-16 18:07 | 显示全部楼层
这个程序非常好用,如果再可以处理多段线中的圆弧就更好了!
 楼主| 发表于 2003-9-16 19:29 | 显示全部楼层
好,那就增加凸度的处理:
  1. Sub RevPline()
  2.     Dim ent As AcadEntity
  3.     Dim pnt As Variant
  4.     Dim NewCoord() As Double
  5.     Dim i As Integer
  6.     On Error Resume Next
  7.     Do
  8.         ThisDrawing.Utility.GetEntity ent, pnt, "选择多段线:"
  9.         If Err Then Exit Sub
  10.         If TypeName(ent) Like "IAcad*Polyline" Then Exit Do
  11.     Loop
  12.     Dim Coord As Variant
  13.     Dim CoordCount As Integer
  14.     Dim Bulge() As Double
  15.     If TypeName(ent) = "IAcadLWPolyline" Then
  16.         Coord = ent.Coordinates
  17.         CoordCount = (UBound(Coord) + 1) / 2
  18.         ReDim NewCoord(UBound(Coord)) As Double
  19.         For i = 0 To UBound(Coord) - 1 Step 2
  20.             NewCoord(UBound(Coord) - i - 1) = Coord(i)
  21.             NewCoord(UBound(Coord) - i) = Coord(i + 1)
  22.         Next
  23.         ReDim Bulge(CoordCount - 1) As Double
  24.         For i = 0 To CoordCount - 1
  25.             Bulge(i) = ent.GetBulge(i)
  26.         Next
  27.         ent.Coordinates = NewCoord
  28.         For i = 0 To CoordCount - 2
  29.             ent.SetBulge i, -Bulge(CoordCount - 2 - i)
  30.         Next
  31.         ThisDrawing.Regen acActiveViewport
  32.     ElseIf TypeName(ent) = "IAcadPolyline" Then
  33.         Coord = ent.Coordinates
  34.         CoordCount = (UBound(Coord) + 1) / 3
  35.         ReDim NewCoord(UBound(Coord)) As Double
  36.         For i = 0 To UBound(Coord) - 1 Step 3
  37.             NewCoord(UBound(Coord) - i - 2) = Coord(i)
  38.             NewCoord(UBound(Coord) - i - 1) = Coord(i + 1)
  39.             NewCoord(UBound(Coord) - i) = Coord(i + 2)
  40.         Next
  41.         If ent.Type = acSimplePoly Then
  42.             ReDim Bulge(CoordCount - 1) As Double
  43.             For i = 0 To CoordCount - 1
  44.                 Bulge(i) = ent.GetBulge(i)
  45.             Next
  46.         End If
  47.         ent.Coordinates = NewCoord
  48.         If ent.Type = acSimplePoly Then
  49.             For i = 0 To CoordCount - 2
  50.                 ent.SetBulge i, -Bulge(CoordCount - 2 - i)
  51.             Next
  52.         End If
  53.        ThisDrawing.Regen acActiveViewport
  54.     End If
  55.    
  56. End Sub
发表于 2003-9-18 01:37 | 显示全部楼层
太好用了!!MCCAD辛苦了!!
发表于 2004-9-23 11:57 | 显示全部楼层
那么我们怎么判断其方向是顺时针还是逆时针呢?
发表于 2004-9-23 14:21 | 显示全部楼层
在VLISP版块里有用VLISP写了一个"曲线反向"的程序.
发表于 2009-11-28 16:34 | 显示全部楼层

不能查看呢???

发表于 2009-11-28 20:57 | 显示全部楼层
在这里留言,怎么经常出错,太郁闷了,刚打好的字儿,没了
发表于 2014-5-3 23:11 | 显示全部楼层
好贴bc标记
发表于 2014-5-6 15:32 | 显示全部楼层
NICE!谢楼主

楼主大神,能提供一个多段线端点三维坐标的程序吗?给点提示也成!我比较小白。要是带Z坐标的哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-24 19:34 , Processed in 1.603871 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表