乐筑天下

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

在点处打断多段线

[复制链接]

24

主题

1265

帖子

1028

银币

后起之秀

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

铜币
362
发表于 2007-11-9 08:09:42 | 显示全部楼层 |阅读模式
本人'我承认,我没有;我想了很多,但在我这么做之前,我想我会由各位专家来运行它,也许可以节省一些时间。这些点可能位于原始多段线上的任何位置,而不仅仅是顶点。打断的目的是能够为每个截面指定不同的线型
如果您手动执行此操作,您可以在每个点上打断多段线。但我需要在VBA中这样做,沿着这条多段线可能有数百个点
另见附图
TIA

3w4tbssducy.png

3w4tbssducy.png

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-11-9 08:49:48 | 显示全部楼层
它必须是VBA吗 它可以在LISP中完成,不会有很多麻烦
但我不知道'我不认为VBA有一个中断方法,但(希望)我会被证明是错的
如果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 | 显示全部楼层
It#039;这肯定比Dave展示的代码还要多
您还必须重新配置每个凸出,因为凸出是夹角的度量
然而,这是可行的。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-11-9 14:01:15 | 显示全部楼层
我在LISP中编写了一个类似的函数,它将讨论开始和结束参数以及给定的多段线,该函数将根据这些参数重新创建一个新的pline
但它必须大约有1000行(包括支持功能) 正如Bryco所说;煅烧亚弧和凸起可能是一件痛苦的事&nbsp 由于我可以使用VLAX曲线functinos,所以在LISP中更容易实现。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

为什么你需要比Dave发布的更多的代码 你说的重新配置每个凸起是什么意思 不#039;Break命令已经处理好了吗
Dave'假设用户希望使用Autocad点对象来指示打断,则s代码对我来说似乎很好 但它需要撤消分组,以便可以一次性撤消整个BreakAtPt操作,而不是一次撤消一个break;当然,如果你选择了很多断点,你会得到大量的文本回显到命令行 但对我来说似乎很有效。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-11-9 19:36:07 | 显示全部楼层
我认为他的意思是,如果要在VBA中进行编码,则需要更多的代码;并尝试重新创建pline段
;如果任何断点位于弧段上,则由于夹角发生变化,凸起将发生变化 新弧段的凸出部分也必须计算。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 17:21 , Processed in 1.543953 second(s), 80 queries .

© 2020-2025 乐筑天下

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