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

时间:2016-01-10 10:52:28

标签: scripting autocad autolisp

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

缺少的是将矩形的所有侧放在一边的功能,并仅总结 long 侧。

根据我的理解,最简单的解决方案是:添加功能以确定在图层上找到的矩形的所有边的长度之和,然后从"中减去它。总和")

在伪代码中:

(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)
)

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

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

1 个答案:

答案 0 :(得分:0)

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

是的,这可能是您的起草程序中的一个巨大变化,但它可以为您提供所需的一切。