测量多段线并指定
你好我需要将一些管道(或管道)从Autocad转移到另一个程序中进行专业分析。该分析要求我将管道作为1m长的零件。
我找到了lisp代码来测量线并每隔1米放置一个标记(块),还有一个程序将块坐标提取到文本文件中(然后允许我将线重新加载到第三方应用程序)。
然而,这个过程涉及到了所有的方面,所以我重新构建的路线并不完全是我开始的路线。
我需要一个lisp代码来测量多段线,但也将块标记放置在多段线的顶点。
作为辅助项,可以使用文本作为块,并修改文本,使其扩展1,2,3,。。。这将有助于我确保在第三方应用程序中正确地重新构建该行,尤其是当我想同时执行多行时。
我在R10和R12上都有一些使用Autolisp的经验,但在过去的10年里没有太多接触过。所以我想我可以修改提供的代码,以适应R2006,如果您更喜欢只在R2010上测试的代码等。。
干杯 分段时需要检查代码中是否有小于1m的余数,然后写出vertice并继续。它现在应该这样做,否则它不会做1m段,除非它使用除法或度量,而不是从第一个主体计算,在这种情况下,您将需要一个不同的程序。
你能把现在的代码贴出来吗。
此外,在这里搜索“沿多段线的链测长度”可能是一个很好的起点,它可以做你想要的。 实际上,这只是“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)
) 谢谢你的搜索建议。我设法找到了一个线程,它提供了一些接近我需要的东西,在学习了一些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)
); 这对我来说非常有用!!!但我想在数字前加一段文字。
有可能吗?
页:
[1]