rkmcswain 发表于 2007-11-9 08:09:42

在点处打断多段线

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

Bryco 发表于 2007-11-9 08:49:48

它必须是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)
)

Bryco 发表于 2007-11-9 09:57:33

It#039;这肯定比Dave展示的代码还要多
您还必须重新配置每个凸出,因为凸出是夹角的度量
然而,这是可行的。

Bryco 发表于 2007-11-9 13:28:03

不知道该方法是否可用:getSplitCurves();-来自VBA中的ObjectARX
通过这种方式,您可以将点或参数传递给getSplitCurves()函数,它为添加到数据库中的新段提供一个指针数组。

Bryco 发表于 2007-11-9 14:01:15

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

Bryco 发表于 2007-11-9 18:54:49


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

Bryco 发表于 2007-11-9 19:36:07

我认为他的意思是,如果要在VBA中进行编码,则需要更多的代码;并尝试重新创建pline段
;如果任何断点位于弧段上,则由于夹角发生变化,凸起将发生变化 新弧段的凸出部分也必须计算。
页: [1]
查看完整版本: 在点处打断多段线