在点处打断多段线
本人';我承认,我没有;我想了很多,但在我这么做之前,我想我会由各位专家来运行它,也许可以节省一些时间。这些点可能位于原始多段线上的任何位置,而不仅仅是顶点。打断的目的是能够为每个截面指定不同的线型如果您手动执行此操作,您可以在每个点上打断多段线。但我需要在VBA中这样做,沿着这条多段线可能有数百个点
另见附图
TIA
它必须是VBA吗 ;它可以在LISP中完成,不会有很多麻烦
但我不知道';我不认为VBA有一个中断方法,但(希望)我会被证明是错的
如果LISP是一个选项,您可以尝试这样的操作(但需要错误检查、测试等)
(defun c:breakatPt()
(setq pline1 (car (entsel "\nPick Polyline:"))
ssPoints (ssget '((0 . "POINT")))
count 0
PtList (list)
);setq
;get list of points
(repeat (sslength ssPoints)
(setq PtList (append PtList (list (cdr (assoc 10 (entget (ssname sspoints count))))))
count (+ count 1)
)
);repeat
(setq count 0
DistList (list)
);setq
;; sort the points so we won't try to break the NEW pline that is created after a successful break
(repeat (length PtList)
(setq DistList (append DistList (list (vlax-curve-GetDistAtPoint Pline1 (vlax-curve-getClosestPointTo Pline1 (nth count PtList))))))
(setq count (+ 1 count))
);repeat
(setq DistListSortI (vl-sort-i DistList '>)
count 0
);setq
(repeat (sslength sspoints)
(setq breakPt (nth (nth count DistListSortI ) PtList))
(command "break" pline1breakpt "@")
(setq count (+ 1 count))
);repeat
(prin1)
)
It#039;这肯定比Dave展示的代码还要多
您还必须重新配置每个凸出,因为凸出是夹角的度量
然而,这是可行的。 不知道该方法是否可用:getSplitCurves();-来自VBA中的ObjectARX
通过这种方式,您可以将点或参数传递给getSplitCurves()函数,它为添加到数据库中的新段提供一个指针数组。 我在LISP中编写了一个类似的函数,它将讨论开始和结束参数以及给定的多段线,该函数将根据这些参数重新创建一个新的pline
但它必须大约有1000行(包括支持功能) ;正如Bryco所说;煅烧亚弧和凸起可能是一件痛苦的事  ;由于我可以使用VLAX曲线functinos,所以在LISP中更容易实现。
为什么你需要比Dave发布的更多的代码 ;你说的重新配置每个凸起是什么意思 ;不#039;Break命令已经处理好了吗
Dave';假设用户希望使用Autocad点对象来指示打断,则s代码对我来说似乎很好 ;但它需要撤消分组,以便可以一次性撤消整个BreakAtPt操作,而不是一次撤消一个break;当然,如果你选择了很多断点,你会得到大量的文本回显到命令行 ;但对我来说似乎很有效。 我认为他的意思是,如果要在VBA中进行编码,则需要更多的代码;并尝试重新创建pline段
;如果任何断点位于弧段上,则由于夹角发生变化,凸起将发生变化 ;新弧段的凸出部分也必须计算。
页:
[1]