miaoph 发表于 2003-12-18 22:07:00

两个关于多义线的问题

先谢谢斑竹,其实我前面问的问题不太明确,下面我具体说明如下:
1、对一条复杂的多义线,比如它含有多条直线段、还有圆弧等,如何把这条复杂的多义线分解成多个直线段和圆弧。我曾使用explode命令,虽然能够分解成多个直线段和圆弧,但是它们的线宽却变为了0。
2、我想开发这样一段断开线段的程序:
多个多义线相交时,在交点附近断开其中一根多义线,使它们不再相交。我尝试着做了一下,觉得实现起来不太容易。因为一根多义线若同时和多个多义线相交时只能断开其中的一个。这样开发的程序很不完善。斑竹能否给个思路。

mccad 发表于 2003-12-18 22:18:00

1.线宽变为0是因为它从多段线变成了直线和圆弧了,如果你需要得到的是多段线段,则需要自己根据多段线的每一段的顶点及凸度来生成每一个新的多段线段。
2.多段线断开后会变成两根多段线,其中一要会保存原来的图元号(或句柄),而另外一根是新生成的。所以你断开时需要按顺序断开。也就是从终点向起点顺序断开,这样才能保证断开所有的交点,这里面就存在着断开点排序的问题。

miaoph 发表于 2003-12-18 23:02:00

谢谢明总,
请不要烦我继续问你啊,
1、能否有简单的办法使一个复杂的多意义线变成多个线段和圆弧,而其线宽保持不变
2、表示多段线的图元号(或句柄)是什么?

mccad 发表于 2003-12-19 09:26:00

1.简单的方法是先取得多段线的宽度保存在一个变量,然后Explode分解该多段线,再用SendCommand方法来调用PEDIT命令中的M选项,将所有分解后的对象传给它,再来个Y选项自动将这些对象变成多段线,再每个设置宽度。复杂一点就是用程序来生成。
2.图元号为ObjectID属性,句柄为Handle属性。

miaoph 发表于 2003-12-24 22:41:00

谢谢明总,你说的方法我感觉有点复杂,我再仔细考虑以下是否有其他的实现方法。

mccad 发表于 2003-12-25 12:08:00

不知你还要怎么简单,这里给你提供个程序吧,这还不简单,还有什么更简单的?
注意新生成的对象在NewEnt数组中。
Sub ExplorePline()
    Dim Ent As AcadLWPolyline
    Dim Pnt As Variant
    On Error Resume Next
    Do
      ThisDrawing.Utility.GetEntity Ent, Pnt, "选择要分解的多段线:"
      If Err <> 0 Then
            Err.Clear
      Else
            Exit Do
      End If
    Loop
    Dim PointCount As Integer
    PointCount = (UBound(Ent.Coordinates) + 1) / 2
    Dim NewEnt() As AcadLWPolyline
    ReDim NewEnt(PointCount - 1)
    Dim i As Integer
    Dim Pnts(3) As Double
    Dim Bulge As Double
    Dim SWidth As Double
    Dim EWidth As Double
    For i = 1 To PointCount - 1
      Pnts(0) = Ent.Coordinate(i - 1)(0)
      Pnts(1) = Ent.Coordinate(i - 1)(1)
      Pnts(2) = Ent.Coordinate(i)(0)
      Pnts(3) = Ent.Coordinate(i)(1)
      Bulge = Ent.GetBulge(i - 1)
      Ent.GetWidth i - 1, SWidth, EWidth
      Set NewEnt(i - 1) = ThisDrawing.ModelSpace.AddLightWeightPolyline(Pnts)
      NewEnt(i - 1).SetBulge 0, Bulge
      NewEnt(i - 1).SetWidth 0, SWidth, EWidth
      NewEnt(i - 1).Color = Ent.Color
      NewEnt(i - 1).Layer = Ent.Layer
      NewEnt(i - 1).Linetype = Ent.Linetype
    Next
    Update
End Sub

还有一种方法可能是让你会觉得简单,就是用break命令在每个顶点处断开。自己写程序吧。

miaoph 发表于 2003-12-26 21:25:00

谢谢明总,你的思维太广泛了,我一定向你学习
页: [1]
查看完整版本: 两个关于多义线的问题