使用 AutoLISP(用于 AutoCAD 2015),我正在编写一个脚本来计算放置在某个图层上的所有矩形的总长度。
(具体目的:我有一个带有多个矩形的层,代表用于承载木地板的木梁。我想计算我必须为这个地板购买多少米的梁。)
到目前为止,我所拥有的是一个脚本,可以计算图层上所有线的长度之和。到目前为止,这工作正常。它返回图层上所有矩形的(周长)线的总长度,以及找到的矩形数量。
(defun C:PLINELEN (/ ent sset obj len sum layer a)
(setvar "ERRNO" 0)
(while
(and (not (setq ent (car (entsel "Select object on layer: "))))
(/= (getvar "ERRNO") 52)
)
)
(cond ((and ent
(setq sset
(ssget
"X"
(list '(0 . "LWPOLYLINE")
(cons 8 (setq layer (cdr (assoc 8 (entget ent)))))
)
)
)
)
(setq a 0
sum 0
)
(repeat (sslength sset)
(setq obj (vlax-ename->vla-object (ssname sset a))
len (vlax-curve-getDistAtParam
obj
(- (vlax-curve-getEndParam obj)
(vlax-curve-getStartParam obj)
)
)
sum (+ sum len)
)
(setq a (1+ a))
)
(princ (strcat "\nTotal length of "
(itoa a)
(if (= a 1)
" pline on layer "
" plines on layer "
)
layer
": "
(rtos sum)
)
)
)
(T (princ "\nNo plines found"))
)
(princ)
)
还缺少的是把矩形的所有短边都放在一边的功能,只对长边求和。
根据我的理解,最简单的解决方案是:添加功能以确定在图层上找到的矩形的所有短边的长度之和,然后从“sum”中减去它)
在伪代码中:
(iterate through all rectangles on the layer
(measure all four sides of the rectangle)
(compare the four measurements and store [one of the] shortest into variable x)
(sumOfShortSides = sumOfShortSides + x)
)
我大部分时间都在那里,但我需要一个指针来改进我现有的代码以减少短边。也欢迎其他解决方案。
如何总结一层中所有矩形的长边?