在点处打断多段线
我承认,我没有考虑太多——但是在我这么做之前,我想我会由你们专家来运行它,也许可以节省一些时间......给定一个LWPOLYLINE和一个落在这个多段线上的点列表,我需要能够将原始多段线分解成由多段线中的点定义的更小的片段。这些点可以在原始多段线上的任何位置,而不仅仅是顶点。中断的目的是能够为每个部分分配不同的线型。
如果您手动执行此操作,您可以在每个点上逐个中断多段线。但是我需要在VBA中这样做,并且沿着这条折线可能有数百个点。
另请参阅附加图像。
TIA
**** Hidden Message ***** 必须是VBA吗?它可以在LISP中轻松完成。
但我不认为VBA有Break方法,但(希望)我会被证明是错误的。
如果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)
)
您还必须重新配置每个凸起,因为凸起是夹角的度量。
然而,这是相当可行的。 不知道它是否可用该方法:getSplitCurves();- 来自 VBA 中的 ObjectARX。
这样,您可以将点或参数传递给 getSplitCurves() 函数,该函数为新段提供了一个指针数组,以简单添加到数据库中。 我用LISP写了一个类似的程序,它会给出一个开始和结束参数,以及一个给定的折线,这个函数会从这些参数中重新创建一个新的折线。
但必须是1000行左右(含配套功能)。就像Bryco说的,钙化亚弧和凸起可能会很痛苦。在LISP中更容易,因为我可以使用VLAX-curve函数。
为什么您需要比Dave发布的代码更多的代码?重新配置每个凸起是什么意思?Break命令不是已经解决了吗?
Dave的代码对我来说似乎不错,假设用户想要使用Autocad点对象来指示断点。除了它需要撤销分组,这样整个BreakAtPt操作可以一次撤销,而不是一次一个break...当然,如果您选择了许多断点,您会得到大量回显到命令行的文本。但在我看来很有效。 我想他的意思是,如果要在VBA进行编码,并试图重建普林尼片段,将需要更多的代码。
如果任何断点都在弧段上,则凸起会随着夹角的变化而变化。新弧线段的凸起也必须计算。
页:
[1]