程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 使用Autolisp刪除Autocad指定圖層內的實體

使用Autolisp刪除Autocad指定圖層內的實體

編輯:更多關於編程

       如何用autolisp獲取cad圖形文件中直線和多義線的圖層名?

      用(cdr(assoc 8 (entget (car (entsel)))))就可以得到直線和其他實體的圖層名。

      想要的程序是:點取一條直線,得到該直線的層名,然後將該層所有直線的線寬改為某個值。我現在想要的是“點取直線,獲得層名”這一步。

      (setq lyname (cdr(assoc 8 (entget (car (entsel)))))) that's it!, What else d

      (setq lyname (cdr(assoc 8 (entget (car (entsel)))))) that's it!, What else do you want?

      繪圖過程中經常會碰到這種情況:某個圖層已被“清空”,但卻無法將其刪除,究竟是什麼回事?其實,圖層中還可能含有不可見的實體。例如,使用mtext命令輸入一連串空格,即產生一個不可見實體。在實際繪圖中,我們當然不會特意去建立這樣的實體,但無意的操作或者ACAD應用程序的運行都有可能產生“副產品”,要刪除這些不可見實體,如果單靠現成的ACAD命令是難以完成的,必須借助程序來進行,下面的程序能夠刪除指定圖層內的一切簡單實體,從而能讓用戶進一步使用layer或purge命令來刪除圖層。

      需要注意的是,個別圖層即便使用下列程序處理後,仍可能關聯其他對象(注意,對象的概念較實體廣得多,包括標注樣式等非實體對象)而不能被刪除,除非指定的圖層不再關聯圖塊或者不含有任何用戶定義的標注樣式。這些圖層是:

      1.被塊定義參照的圖層,如a層含有一個圖塊,塊內某條線屬於b層;

      2.名字為 DEFPOINTS 的特殊圖層(為某個標注樣式所用)。

      程序清單如下:

      (defun c:de(/ et ln lay_name ss li)

      (princ "刪除指定圖層內的實體n")

      (setq li (entsel"n請選擇指定圖層內的任何一個實體<回車直接輸入層名>:"))

      (if li

      (progn ;選擇一個實體

      (setq et (entget(nth 0 li)))

      (setq lay_name (cdr (assoc 8 et)))

      )

      (progn ;直接輸入層名,理想的辦法是采用列表框選擇,大家可以自己試試。

      (princ"輸入層名:")

      (while (= ln nil)

      (setq lay_name (getstring))

      (setq ln (cdr (assoc 2 (tblnext "layer" t))))

      (while (and ln (/= ln "%") )

      (if (/= ln lay_name)

      (setq ln (cdr (assoc 2 (tblnext "layer"))))

      (setq ln "%")

      ;如指定的圖層名已存在,則設“%”標志

      )

      )

      (if (/= ln "%") ;錯誤處理

      (princ"指定的圖層不存在,請重新輸入:")

      )

      )

      )

      )

      (setq ss (ssget "X"(list(cons 8 lay_name)))) ;構造選擇集

      (COMMAND "-layer" "u" lay_name "") ;圖層解鎖

      (COMMAND "ERASE" ss "") ;清除所有實體

      (princ "n清除完畢!")

      (princ)

      )

      ;程序結束

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved