CAD统计多条线段长度程序及程序加载方法.docx
- 文档编号:1470768
- 上传时间:2022-10-22
- 格式:DOCX
- 页数:5
- 大小:16.46KB
CAD统计多条线段长度程序及程序加载方法.docx
《CAD统计多条线段长度程序及程序加载方法.docx》由会员分享,可在线阅读,更多相关《CAD统计多条线段长度程序及程序加载方法.docx(5页珍藏版)》请在冰豆网上搜索。
CAD统计多条线段长度程序及程序加载方法
用下面的这个程序可以,加载后执行命令:
mulen
(defunc:
mulen()
(setqi1s0)
(prompt"
选择直线:
")
(setqss(ssget))
(setqleng(sslengthss))
(setqnamelist(list(ssnamess0)))
(repeat(1-leng)(setqnamelist(appendnamelist(list(ssnamessi))))(setqi(1+i)))
(foreachnamenamelist
(setqnameall(entgetname))
(setqps(cdr(assoc10nameall)))
(setqpe(cdr(assoc11nameall)))
(setqpsx(carps))
(setqpsy(cadrps))
(setqpsz(caddrps))
(setqpex(carpe))
(setqpey(cadrpe))
(setqpez(caddrpe))
(setqx(-psxpex))
(setqy(-psypey))
(setqz(-pszpez))
(setqlength(sqrt(+(exptx2)(expty2)(exptz2))))
(setqs(+slength))
)
(princ(strcat"
直线总长为:
"(rtoss)))
(princ)
){:
em27}
上述为程序内容,然后存为:
“文件名.lsp”,再从CAD里用appload命令加载此文件。
这里有一个程序,你可以用用看,
命令为AM
对line,arc,ellispe,spline,polyline,lwpolyline,circle,mline,solid均有效。
你既可统计长度,也可统计面积,或者两者都统计。
如果你对精确位不满意,你可以改动程序中的数字(我已经在程序注释中说明)。
;;;===================
;;;面积和长度统计程序
;;;highflybirdkunming
;;;===================
(prompt"命令为:
AM")
(defunC:
am(/f ss l i SSarea totlen entlen
ename name obj text-S text-L insPt0 height
insPt1 insPt2 text-1 text-2 *APP *DOC *MSP
)
(vl-load-com)
(setq*APP(vlax-get-acad-object))
(setq*DOC(vla-get-activeDocument*APP))
(setq*MSP(vla-get-Modelspace*DOC))
(initget1"123")
(setqf(getkword"\n请输入你要统计的<1>面积<2>长度<3>两者:
"))
(if
(and
(setqss(ssget))
(setqinsPt0(getpoint"\n请输入文字插入点:
"))
(setqheight(getdist"\n请输入文字高度:
"))
)
(progn
(setql(sslengthss))
(setqi0)
(setqSSarea0)
(setqtotlen0)
(setqinsPt1(vlax-3d-pointinsPt0))
(setqinsPt2(polarinsPt0(*1.5Pi)(*1.5height)))
(setqinsPt2(vlax-3d-pointinsPt2))
(cond
((=f"1")
(repeatl
(func-1)
(func-2)
(setqi(1+i))
)
(setqtext-S(strcat(convert1SSarea6)"平方米"));总面积为:
小数后6位
(vla-addtext*MSPtext-SinsPt1height)
)
((=f"2")
(repeatl
(func-1)
(func-3)
(setqi(1+i))
)
(setqtext-L(strcat(convert1totlen4)"米")) ;总长度为:
小数后4位
(vla-addtext*MSPtext-LinsPt2height)
)
((=f"3")
(repeatl
(func-1)
(func-2)
(func-3)
(setqi(1+i))
)
(setqtext-S(strcat(convert1SSarea6)"平方米"));总面积为:
小数后6位
(setqtext-L(strcat(convert1totlen3)"米")) ;总长度为:
小数后3位
(vla-addtext*MSPtext-SinsPt1height)
(vla-addtext*MSPtext-LinsPt2height)
)
)
)
(alert"你没有选取物体或者输入正确的数据!
")
)
(princ)
)
(defunfunc-1()
(setqename(ssnamessi))
(setqobj(vlax-ename->vla-objectename))
(setqelist(entgetename))
(setqname(cdr(assoc0elist)))
)
;;面积的统计
(defunfunc-2(/p1p2p3p4)
(if(vlax-property-available-pobj"area")
(setqSSarea(+(vla-get-areaobj)SSarea))
(if (=name"SOLID")
(setqp1(cdr(assoc10elist))
p2(cdr(assoc11elist))
p3(cdr(assoc12elist))
p4(cdr(assoc13elist))
SSarea(+(area-of-verties(listp1p2p4p3))SSarea)
)
)
)
)
;;长度的统计
(defunfunc-3(/p1p2p3p4)
(cond
((=name"MLINE")
(setqtotlen(+totlen(ml-lengthename)))
)
((or(=name"ARC")
(=name"CIRCLE")
(=name"LINE")
(=name"POLYLINE")
(=name"LWPOLYLINE")
(=name"SPLINE")
(=name"ELLIPSE")
)
(setqentlen(vlax-curve-getdistatparamename(vlax-curve-getendparamename)))
(setqtotlen(+totlenentlen))
)
((=name"SOLID")
(setqp1(cdr(assoc10elist)))
(setqp2(cdr(assoc11elist)))
(setqp3(cdr(assoc12elist)))
(setqp4(cdr(assoc13elist)))
(setqtotlen(+(length-of-verties(listp1p2p4p3))totlen))
)
)
)
;;Mline的长度
(defunml-length(ename/jdptlist)
(foreachn(entgetename)
(if (=(carn)11)
(setqptlist(cons(cdrn)ptlist))
)
)
(reverseptlist)
(setq j0)
(setqd0)
(repeat(1-(lengthptlist))
(setqd(+d(distance(nthjptlist)(nth(1+j)ptlist))))
(setqj(1+j))
)
d
)
;;单位转化
(defunconvert(xn/tol_xfra_xint_x)
(setqtol_x(/x(expt10n)))
(setqfra_x(rtos(-tol_x(fixtol_x))2n))
(setqfra_x(vl-string-left-trim"0"fra_x))
(setqint_x(itoa(fixtol_x)))
(strcatint_xfra_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAD 统计 线段 长度 程序 加载 方法