Coyote 发表于 2022-7-6 10:11:08

测量多段线并指定

你好
 
我需要将一些管道(或管道)从Autocad转移到另一个程序中进行专业分析。该分析要求我将管道作为1m长的零件。
 
我找到了lisp代码来测量线并每隔1米放置一个标记(块),还有一个程序将块坐标提取到文本文件中(然后允许我将线重新加载到第三方应用程序)。
 
然而,这个过程涉及到了所有的方面,所以我重新构建的路线并不完全是我开始的路线。
 
我需要一个lisp代码来测量多段线,但也将块标记放置在多段线的顶点。
 
作为辅助项,可以使用文本作为块,并修改文本,使其扩展1,2,3,。。。这将有助于我确保在第三方应用程序中正确地重新构建该行,尤其是当我想同时执行多行时。
 
我在R10和R12上都有一些使用Autolisp的经验,但在过去的10年里没有太多接触过。所以我想我可以修改提供的代码,以适应R2006,如果您更喜欢只在R2010上测试的代码等。。
 
干杯

BIGAL 发表于 2022-7-6 10:38:07

分段时需要检查代码中是否有小于1m的余数,然后写出vertice并继续。它现在应该这样做,否则它不会做1m段,除非它使用除法或度量,而不是从第一个主体计算,在这种情况下,您将需要一个不同的程序。
 
你能把现在的代码贴出来吗。
 
此外,在这里搜索“沿多段线的链测长度”可能是一个很好的起点,它可以做你想要的。

Coyote 发表于 2022-7-6 10:42:30

实际上,这只是“measure”命令周围的一段代码-很抱歉,我没有说得足够清楚。我不确定这会对你有多大帮助。我试图编辑“tag”中的文字,使其成为trk_nam,但从未真正做到任何地方。。
 
(setq trk_nam“”)
(defun C:轨迹(/)
(setq trk_nam(getstring“音轨名称:”))
(setq dist_pts(getreal“点之间的距离:”))
(命令“measure”pause“B”“tag”“Y”dist\u pts)
)

Coyote 发表于 2022-7-6 10:59:19

谢谢你的搜索建议。我设法找到了一个线程,它提供了一些接近我需要的东西,在学习了一些ActiveX之后,我设法修改它以获得我需要的东西。
 
这就是我想到的:
(defun c:pldiv (/ actDoc spFlag actSp poly
      sumDis nextPt oldDist oldNum)
(vl-load-com)
(setq actDoc(vla-get-ActiveDocument
         (vlax-get-acad-object))
spFlag(vla-get-ActiveSpace actDoc)
       ); end setq
(if(= 0 spFlag)
(setq actSp(vla-get-PaperSpace actDoc))
(setq actSp(vla-get-ModelSpace actDoc))
); end if
(if(not pldiv:dist)(setq pldiv:dist 1.0))
(if(not pldiv:num)(setq pldiv:num 1))
(setq stFlag T
      sumDis 0.0
oldDist pldiv:dist
oldNum pldiv:num
pldiv:dist
(getdist
    (strcat
      "\nSpecify distance <"(rtos pldiv:dist)">: "))
pldiv:num
(getint
    (strcat
      "\nSpecify start number <"(itoa pldiv:num)">: "))
); end setq
(if(not pldiv:dist)(setq pldiv:dist oldDist))
(if(not pldiv:num)(setq pldiv:num oldNum))
(princ "\n*** Select line, polyline or spline *** ")
(if
   (and
   (setq poly
    (ssget "_:S"
   '((0 . "*LINE")(-4 . "<NOT")(0 . "MLINE")(-4 . "NOT>"))))
   (setq nextPt
   (getpoint "\nSpecify start point at curve > "))
   (vlax-curve-getDistAtPoint
   (setq poly(vlax-ename->vla-object(ssname poly 0)))
   nextPt)
   ); end and   
   (progn
   (setq next_vtx_param 1
next_vtx_dist (vlax-curve-getDistAtParam poly next_vtx_param)
); end setq
   (while nextPt
(while (> sumDis next_vtx_dist)
(progn
(setq VtxPt(vlax-curve-getPointAtParam poly next_vtx_param))
(vla-AddPoint actSp(vlax-3d-point VtxPt))
(vla-AddText actSp (itoa pldiv:num)
    (vlax-3d-point VtxPt)(getvar "TEXTSIZE"))
(setq next_vtx_param (+ 1 next_vtx_param)
       next_vtx_dist (vlax-curve-getDistAtParam poly next_vtx_param)
       pldiv:num(1+ pldiv:num)
       );end set q
) ; end progn
);end while
(vla-AddPoint actSp(vlax-3d-point nextPt))
(vla-AddText actSp (itoa pldiv:num)
   (vlax-3d-point nextPt)(getvar "TEXTSIZE"))
(setqsumDis (+ sumDis pldiv:dist)
pldiv:num(1+ pldiv:num)
      nextPt(vlax-curve-getPointAtDist poly sumDis)
       ); end setq
      ); end while
   (setq endParam (vlax-curve-getEndParam poly)
         EndPoint(vlax-curve-getPointAtParam poly endParam))
      (vla-AddPoint actSp(vlax-3d-point EndPoint))
(vla-AddText actSp (itoa pldiv:num)
   (vlax-3d-point EndPoint)(getvar "TEXTSIZE"))
   ); end progn
   (princ "\nERROR. Empty selection, invalid object type or point not at curve. ")
   ); end if
(princ)
);

ciprian 发表于 2022-7-6 11:14:26

这对我来说非常有用!!!但我想在数字前加一段文字。
 
有可能吗?
页: [1]
查看完整版本: 测量多段线并指定