乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 87|回复: 6

在点处打断多段线

[复制链接]

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2007-11-9 08:09:42 | 显示全部楼层 |阅读模式
我承认,我没有考虑太多——但是在我这么做之前,我想我会由你们专家来运行它,也许可以节省一些时间......
给定一个LWPOLYLINE和一个落在这个多段线上的点列表,我需要能够将原始多段线分解成由多段线中的点定义的更小的片段。这些点可以在原始多段线上的任何位置,而不仅仅是顶点。中断的目的是能够为每个部分分配不同的线型。
如果您手动执行此操作,您可以在每个点上逐个中断多段线。但是我需要在VBA中这样做,并且沿着这条折线可能有数百个点。
另请参阅附加图像。
TIA

e0pwrtrklyk.png

e0pwrtrklyk.png

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-9 08:49:48 | 显示全部楼层
必须是VBA吗?它可以在LISP中轻松完成。
但我不认为VBA有Break方法,但(希望)我会被证明是错误的。
如果LISP是一个选项,您可以尝试这样的东西(但需要错误检查、测试等)
  1. (defun c:breakatPt()
  2.     (setq pline1 (car (entsel "\nPick Polyline:"))
  3.           ssPoints (ssget '((0 . "POINT")))
  4.           count 0  
  5.           PtList (list)
  6.      );setq
  7.      ;get list of points
  8.      (repeat (sslength ssPoints)
  9.          (setq PtList (append PtList (list (cdr (assoc 10 (entget (ssname sspoints count))))))
  10.                count (+ count 1)
  11.          )
  12.      );repeat
  13.      (setq count 0
  14.            DistList (list)
  15.      );setq
  16.     ;; sort the points so we won't try to break the NEW pline that is created after a successful break
  17.      (repeat (length PtList)
  18.         (setq DistList (append DistList (list (vlax-curve-GetDistAtPoint Pline1 (vlax-curve-getClosestPointTo Pline1 (nth count PtList))))))
  19.          (setq count (+ 1 count))  
  20.      );repeat
  21.     (setq DistListSortI (vl-sort-i DistList '>)
  22.            count 0
  23.     );setq     
  24.      (repeat (sslength sspoints)
  25.           (setq breakPt (nth (nth count DistListSortI ) PtList))
  26.           (command "break" pline1  breakpt "@")
  27.           (setq count (+ 1 count))
  28.      
  29.      );repeat
  30.      (prin1)
  31. )

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-11-9 09:57:33 | 显示全部楼层

您还必须重新配置每个凸起,因为凸起是夹角的度量。
然而,这是相当可行的。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-9 13:28:03 | 显示全部楼层
不知道它是否可用该方法:getSplitCurves();- 来自 VBA 中的 ObjectARX。
这样,您可以将点或参数传递给 getSplitCurves() 函数,该函数为新段提供了一个指针数组,以简单添加到数据库中。
回复

使用道具 举报

4

主题

50

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2007-11-9 14:01:15 | 显示全部楼层
我用LISP写了一个类似的程序,它会给出一个开始和结束参数,以及一个给定的折线,这个函数会从这些参数中重新创建一个新的折线。
但必须是1000行左右(含配套功能)。就像Bryco说的,钙化亚弧和凸起可能会很痛苦。在LISP中更容易,因为我可以使用VLAX-curve函数。
回复

使用道具 举报

3

主题

88

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2007-11-9 18:54:49 | 显示全部楼层

为什么您需要比Dave发布的代码更多的代码?重新配置每个凸起是什么意思?Break命令不是已经解决了吗?
Dave的代码对我来说似乎不错,假设用户想要使用Autocad点对象来指示断点。除了它需要撤销分组,这样整个BreakAtPt操作可以一次撤销,而不是一次一个break...当然,如果您选择了许多断点,您会得到大量回显到命令行的文本。但在我看来很有效。
回复

使用道具 举报

4

主题

50

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
66
发表于 2007-11-9 19:36:07 | 显示全部楼层
我想他的意思是,如果要在VBA进行编码,并试图重建普林尼片段,将需要更多的代码。
如果任何断点都在弧段上,则凸起会随着夹角的变化而变化。新弧线段的凸起也必须计算。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 17:41 , Processed in 1.231100 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表