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

在点处打断多段线

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

**** Hidden Message *****

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

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

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


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

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

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

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

我用LISP写了一个类似的程序,它会给出一个开始和结束参数,以及一个给定的折线,这个函数会从这些参数中重新创建一个新的折线。
但必须是1000行左右(含配套功能)。就像Bryco说的,钙化亚弧和凸起可能会很痛苦。在LISP中更容易,因为我可以使用VLAX-curve函数。

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


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

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

我想他的意思是,如果要在VBA进行编码,并试图重建普林尼片段,将需要更多的代码。
如果任何断点都在弧段上,则凸起会随着夹角的变化而变化。新弧线段的凸起也必须计算。
页: [1]
查看完整版本: 在点处打断多段线