Как выбрать замкнутые 2d полилинии, внутри которых нет штриховки?

У меня есть следующие 2D полилинии в Autocad.

введите здесь описание изображения

Я пытаюсь создать код, который при выборе всех из них будет отфильтровывать тех, у кого внутри есть люк.

Из другого источника у меня есть следующий фрагмент кода (спасибо tharwat), но, хотя я понимаю каждый его фрагмент, из второго ssget я не могу понять, что эти элементы означают вместе.

(defun c:test (/ ss i sn e)
   (if (setq ss (ssget '((0 . "POLYLINE")))) ;;selects all the polylines in a window
      (repeat (setq i (sslength ss))  ;;cycles trough each one of them

         (if (ssget "_CP" ;;???defines a crossing poligon inside wich the polylines will be considered???
                   (mapcar 'cdr ;;??? 
                             (vl-remove-if-not '(lambda (p) (= (car p) 10))
                              (entget (setq sn (ssname ss (setq i (1- i)))))
                       )
                    )
                    '((0 . "HATCH"))
      )
    (ssdel sn ss) ;;deletes the entities wich belong to the selection set
  )
)
  )
  (sssetfirst nil ss)
  (princ)

)

Новичок здесь, извините, если это не хороший вопрос.


person another J.Doe    schedule 14.01.2016    source источник


Ответы (1)


«_CP» означает Crossing Polygon. Для этой опции требуется список точек (вершин многоугольника).

           (mapcar 'cdr ;;??? 
                     (vl-remove-if-not '(lambda (p) (= (car p) 10))
                      (entget (setq sn (ssname ss (setq i (1- i)))))
               )
            )

Создает этот список точек из вершин полилинии.

Таким образом, эта подпрограмма сначала предлагает пользователю выбрать полилинии. Затем перебирает набор объектов и для каждой выбранной полилинии пытается выбрать любую штриховку, пересекая полигон с вершинами полилинии. Если таковая имеется, полилиния удаляется из первого набора объектов.

На мой взгляд, этот код не совсем безопасен для вашей цели из-за опции «Пересечение». Замена «_CP» на «_WP» будет использовать выбор оконного многоугольника, который безопаснее, если полилинии не имеют дуговых сегментов.

person gileCAD    schedule 17.01.2016