Тема: Как определить, что замкнутая полилиния является прямоугольником?

1)Полилиния замкнутая.
2)Надо проверить что это прямоугольник.
Спасибо.

Re: Как определить, что замкнутая полилиния является прямоугольником?

Получил решение на dwg.ru

Re: Как определить, что замкнутая полилиния является прямоугольником?

До кучи

;; as posted on: http://www.theswamp.org/index.php?topic=43522.msg487926#msg487926
(defun fxRectangle-p (en fuzz / leg obj pts)
  (vl-load-com)
(defun _getpt(obj idx)
  (vlax-safearray->list(vlax-variant-value (vla-get-coordinate obj  idx))))

(and
  (setq obj (vlax-ename->vla-object en))
  (eq "AcDbPolyline" (vla-get-objectname obj))
  (vlax-method-applicable-p obj 'getbulge)
  (vlax-property-available-p obj 'coordinate)
  (eq (vla-get-closed obj) :vlax-true)
  (= 8 (length (setq pts (vlax-get obj 'coordinates))))
  (vl-every '(lambda (x) (zerop (vla-getbulge obj x)))
        (list 0 1 2 3))
  (setq    leg (- (vlax-curve-getdistatpoint
        obj
        (list (nth 2 pts) (nth 3 pts)))
           (vlax-curve-getdistatpoint obj (list (car pts) (cadr pts)))))
  (vl-every '(lambda (a b)
           (equal (abs (- (vlax-curve-getdistatpoint obj (_getpt obj a))
                  (vlax-curve-getdistatpoint obj (_getpt obj b))))
              leg
              fuzz))
        (list 0 1 2)
        (list 1 2 3))
  (equal (/ pi 2) (abs (- (angle (_getpt obj 1)(_getpt obj 2))(angle (_getpt obj 2)(_getpt obj 3))))fuzz)
           )
)
;; usage:
(setq rectangle-p (fxRectangle-p (car (entsel "\nSelect: ")) 0.00001))