2016-01-14 9 views
0

我在autocad中有以下二維多段線。如何選擇內部沒有艙口的封閉二維多段線?

enter image description here

我試圖創建一個代碼,選擇所有的人時,會過濾掉那些誰擁有內孵化。

從另一個來源我有下面這段代碼(感謝tharwat),但是,altough我明白每一塊的話,從第二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) 

初學者在這裏,對不起,如果這是不是一個好問題。

回答

0

「_CP」實際上代表交叉多邊形。 該選項需要一個點列表(多邊形頂點)。

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

從多段線頂點構建這個點列表。

所以,這個例程首先提示用戶選擇折線。 然後,遍歷選擇集,並且對於每個選定的多段線,嘗試通過將多邊形與多段線頂點交叉來選擇任何陰影線。如果從第一個選擇集中刪除了多段線。

在我看來,由於'Crossing'選項的原因,此代碼對於您的目標並非真正安全。用「_WP」代替「_CP」將使用窗口多邊形選擇,如果多段線沒有弧段,則選擇更安全。