明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1895|回复: 6

两个关于多义线的问题

[复制链接]
发表于 2003-12-18 22:07:00 | 显示全部楼层 |阅读模式
先谢谢斑竹,其实我前面问的问题不太明确,下面我具体说明如下:
1、对一条复杂的多义线,比如它含有多条直线段、还有圆弧等,如何把这条复杂的多义线分解成多个直线段和圆弧。我曾使用explode命令,虽然能够分解成多个直线段和圆弧,但是它们的线宽却变为了0。
2、我想开发这样一段断开线段的程序:
多个多义线相交时,在交点附近断开其中一根多义线,使它们不再相交。我尝试着做了一下,觉得实现起来不太容易。因为一根多义线若同时和多个多义线相交时只能断开其中的一个。这样开发的程序很不完善。斑竹能否给个思路。
发表于 2003-12-18 22:18:00 | 显示全部楼层
1.线宽变为0是因为它从多段线变成了直线和圆弧了,如果你需要得到的是多段线段,则需要自己根据多段线的每一段的顶点及凸度来生成每一个新的多段线段。
2.多段线断开后会变成两根多段线,其中一要会保存原来的图元号(或句柄),而另外一根是新生成的。所以你断开时需要按顺序断开。也就是从终点向起点顺序断开,这样才能保证断开所有的交点,这里面就存在着断开点排序的问题。
 楼主| 发表于 2003-12-18 23:02:00 | 显示全部楼层
谢谢明总,
请不要烦我继续问你啊,
1、能否有简单的办法使一个复杂的多意义线变成多个线段和圆弧,而其线宽保持不变
2、表示多段线的图元号(或句柄)是什么?
发表于 2003-12-19 09:26:00 | 显示全部楼层
1.简单的方法是先取得多段线的宽度保存在一个变量,然后Explode分解该多段线,再用SendCommand方法来调用PEDIT命令中的M选项,将所有分解后的对象传给它,再来个Y选项自动将这些对象变成多段线,再每个设置宽度。复杂一点就是用程序来生成。
2.图元号为ObjectID属性,句柄为Handle属性。
 楼主| 发表于 2003-12-24 22:41:00 | 显示全部楼层
谢谢明总,你说的方法我感觉有点复杂,我再仔细考虑以下是否有其他的实现方法。
发表于 2003-12-25 12:08:00 | 显示全部楼层
不知你还要怎么简单,这里给你提供个程序吧,这还不简单,还有什么更简单的?
注意新生成的对象在NewEnt数组中。
  1. Sub ExplorePline()
  2.     Dim Ent As AcadLWPolyline
  3.     Dim Pnt As Variant
  4.     On Error Resume Next
  5.     Do
  6.         ThisDrawing.Utility.GetEntity Ent, Pnt, "选择要分解的多段线:"
  7.         If Err <> 0 Then
  8.             Err.Clear
  9.         Else
  10.             Exit Do
  11.         End If
  12.     Loop
  13.     Dim PointCount As Integer
  14.     PointCount = (UBound(Ent.Coordinates) + 1) / 2
  15.     Dim NewEnt() As AcadLWPolyline
  16.     ReDim NewEnt(PointCount - 1)
  17.     Dim i As Integer
  18.     Dim Pnts(3) As Double
  19.     Dim Bulge As Double
  20.     Dim SWidth As Double
  21.     Dim EWidth As Double
  22.     For i = 1 To PointCount - 1
  23.         Pnts(0) = Ent.Coordinate(i - 1)(0)
  24.         Pnts(1) = Ent.Coordinate(i - 1)(1)
  25.         Pnts(2) = Ent.Coordinate(i)(0)
  26.         Pnts(3) = Ent.Coordinate(i)(1)
  27.         Bulge = Ent.GetBulge(i - 1)
  28.         Ent.GetWidth i - 1, SWidth, EWidth
  29.         Set NewEnt(i - 1) = ThisDrawing.ModelSpace.AddLightWeightPolyline(Pnts)
  30.         NewEnt(i - 1).SetBulge 0, Bulge
  31.         NewEnt(i - 1).SetWidth 0, SWidth, EWidth
  32.         NewEnt(i - 1).Color = Ent.Color
  33.         NewEnt(i - 1).Layer = Ent.Layer
  34.         NewEnt(i - 1).Linetype = Ent.Linetype
  35.     Next
  36.     Update
  37. End Sub

还有一种方法可能是让你会觉得简单,就是用break命令在每个顶点处断开。自己写程序吧。
 楼主| 发表于 2003-12-26 21:25:00 | 显示全部楼层
谢谢明总,你的思维太广泛了,我一定向你学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 10:43 , Processed in 0.152101 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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