RESPNJR 发表于 2022-7-5 23:05:08

总长度

我正在做管道规划,我需要找到管道的总长度。我找到了这个lisp例程(如下),它工作得很好。唯一的问题是它以十进制单位显示结果,我想要英尺和英寸。如果它能以与图纸相同的单位显示总长度,我会很高兴。你能帮忙吗。
 
谢谢
 
(普林斯
“\nTotalADDition v.1.0已激活!-运行”TADD“启动或”TADD-r“结束。”
)
 
(defun c:tadd(/itemarea itemPerior itemlinelength)
项目弧长项目样条长度项目区域周长项目周长
项目样条参数项目样条参数项目样条长度项目跟踪长度
项目弧长项目椭圆长度a b c d p1 p2项目长度tarea tperim T长度
)
(vl load com)
(defun*oo\u object\u modification*(objreactor objectsmodified)
(setq selected_objects(vla get pickfirstselectionset
(vla get activedocument(vlax get acad object))
)
)
(setq项区域0
项目周长0
itemlinelength 0
itemarclength 0
项目长度0
项目区域周长0
项目周长0
ItemSplinePeriometer 0
项目参数0
项目长度0
itemtracelength 0
itemarclength 0
项目长度0
)
;面积
(n个选定_对象的vlax
(如果(vlax-property-available-p n’区域)
(if(eq(vla get objectname n)“AcDbRegion”)
(setq itemarea(+itemarea(vla get area n)))
(如果(vlax曲线闭合n)
(setq itemarea(+itemarea(vla get area n)))
)
)
)
;;圆形
(if(vlax-property-available-p n’圆周)
(setq ItemPercentage(+ItemPercentage(vla get percentage n)))
)
;;样条曲线
(if(eq(vla get objectname n)“AcDbSpline”)
(如果(vlax曲线闭合n)
(setq itemsplineperimeter(+itemsplineperimeter
(vlax curve getdistatparam n(vlax curve getendparam n))
)
)
(setq itemsplinelength(+itemsplinelength
(vlax curve getdistatparam n(vlax curve getendparam n))
)
)
)
)
;;地区
(if(eq(vla get objectname n)“AcDbRegion”)
(setq itemregionperiod(+itemregionperiod(vla get period n)))
)
;;普林线
(if(or(eq(vla get objectname n)“AcDb2dPolyline”)
(eq(vla get objectname n)“AcDbPolyline”)
)
(如果(vlax曲线闭合n)
(setq itemplineperimeter(+itemplineperimeter
(vlax curve getdistatparam n(vlax curve getendparam n))
)
)
(setq ITEMPLINELENGHT(+ITEMPLINELENGHT
(vlax curve getdistatparam n(vlax curve getendparam n))
)
)
)
)
;;生产线
(if(eq(vla get objectname n)“AcDbLine”)
(setq itemlinelength(+itemlinelength(vla get length n)))
)
;;弧
(if(eq(vla get objectname n)“AcDbArc”)
(setq itemarclength(+itemarclength(vla get arclength n)))
)
(if(eq(vla get objectname n)“AcDbEllipse”)
(setq itemellipselength(+itemellipselength
(vlax curve getdistatparam n(vlax curve getendparam n))
)
)
)
;;跟踪
(if(eq(vla get objectname n)“AcDbTrace”)
(progn(setq plist(vlax safearray->列表
(vlax变量值(vla get坐标n))
)
)
(setq a(列表(第n个0 plist)(第n个1 plist)(第n个2 plist)))
(setq b(列表(第n个3 plist)(第n个4 plist)(第n个5 plist)))
(setq c(列表(第6个plist)(第7个plist)(第8个plist)))
(setq d(列表(第n个9 plist)(第n个10 plist)(第n个11 plist)))
(setq p1(极轴a(角度a b)(/(距离a b)2.0)))
(setq p2(极坐标c(角度c d)(/(距离c d)2.0)))
(setq itemtracelength(+itemtracelength(距离p1 p2)))
)
)
)
;;_结束vlax for
(setq项周长(+项周长)
项目SplinePerimeter
项目区域周长
项目参数
)
)
(setq itemlength(+itemplinelength itemsplinelength itemlinelength itemtracelength itemarclength itemellipselength)
)
(setq tarea(rtos项目区域2)
(setq tperim(rtos项目周长2)
(设置长度(rtos itemlength 2)
(acet ui状态(strcat“Toatl Area:”tarea“\n”“总周长:”tperim“\n”
“总长度:”t长度)
)
)
;;对象选择
(如果oo\u object\u修改
(progn(vlr remove oo\u object\u modification)
(setq oo\u object\u modification nil)
)
)
(setq oo_object_修改
(vlr其他反应堆

'(:vlr pickfirstmodified.*oo\u object\u modification*)
)
)
;;命令已结束
(如果oo\u object\u modification\u action
(progn(vlr remove oo\u object\u modification\u action)
(setq oo\u object\u modification\u action nil)
)
)
(setq oo\u object\u modification\u动作
(vlr命令反应堆零
“(:vlr命令结束。*oo\u object\u修改*)
;(:vlr命令已取消。*oo\u object\u modification\u CANCEL*)
)
)
)
)
 
 
(定义c:TADD-r()
 
(如果oo\u object\u modification\u action
(progn(vlr remove oo\u object\u modification\u action)
(setq oo\u object\u modification\u action nil)
)
)
(如果oo\u object\u修改
(progn(vlr remove oo\u object\u modification)
(setq oo\u object\u modification nil)
)
)
)

ReMark 发表于 2022-7-5 23:44:16

将信息提取到可以放置在Excel中的格式,添加将十进制英寸转换为英尺/英寸的必要公式,并让电子表格完成这项工作。

ymg3 发表于 2022-7-6 00:11:24

更改这些:
 

(setq tarea (rtos itemarea 2 )
(setq tperim (rtos itemperimeter 2 )
(setq tlength (rtos itemlength 2 )

 
收件人:

(setq tarea (rtos itemarea))
(setq tperim (rtos itemperimeter))
(setq tlength (rtos itemlength))

 
从Autocad帮助:
 
 
ymg公司
 
P、 请编辑您的帖子,在代码周围添加代码标签
页: [1]
查看完整版本: 总长度