1

使用 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)
)

我大部分时间都在那里,但我需要一个指针来改进我现有的代码以减少短边。也欢迎其他解决方案。

如何总结一层中所有矩形的长边?

4

1 回答 1

0

为什么不使用矩形创建一个动态块,而不是使用设置长度的拉伸动作。这样,您可以使用正确的名称迭代所需层上的所有块并查询动态长度属性。

是的,这可能是您起草程序的巨大变化,但它会为您提供所需的东西。

于 2016-01-11T16:14:46.940 回答