發表文章

目前顯示的是 9月, 2018的文章

AutoLISP 計時器(Timer)

        基本上方法是使用時間相減得到時間差,而得到計時功能。         因為在AutoCAD版本上的改變,所以程式上會有所不同,主因是因為從2017開始 date 系統變數不再儲存到當前毫秒,在2016以前是使用 date 系統變數,而在2018之後則是使用 millisecs 系統變數(此系統變數是從2018才加入)。 下面是使用於版本2016以前 (defun C:Timer2016 (/ begin) (defun gettime (/ s seconds) (setq s (getvar "DATE")) (setq seconds (* 86400.0 (- s (fix s)))) ) (setq begin (gettime)) ; 加入500毫秒間隔 (command "._delay" 500) (setvar "dimzin" 8) (princ (strcat "\n" (rtos (- (gettime) begin) 2 12))) (princ) ) 下面是使用於版本2018以後 (defun c:Timer2018 (/ s e) (setq s (getvar "millisecs")) ; 加入500毫秒間隔 (command "._delay" 500) (setvar "dimzin" 8) (setq e (getvar "millisecs")) (princ (strcat "\n" (rtos (/ (- e s) 1000.0) 2 12))) (princ) ) 參考 AutoCAD autolisp CDATE and DATE sysvars

AutoLISP command explode 如何在LISP呼叫分解命令

在LISP中,使用explode指令發現無法炸開多個物件。 基本方式(在LISP中,使用explode(分解,俗稱炸開)指令,只能一次分解一個,如果物件放入多個也只會分解一個): (command "_.explode" 圖元資料) 分解單一物件的方法: (command "_.explode" (entsel)) 分解多個物件的方法: (setq SelObjs (ssget)) (setq N -1) (while (setq SelObj (ssname SelObjs (setq N (1+ N)))) (command "_.explode" SelObj) ) 相關連結 AutoCAD 如何載入LISP

AutoCAD Select 選取模式下或巨集中所用的快捷鍵

圖片
基本上的選取模式有: 窗選(W)/前次(L)/框選(C)/方塊(BOX)/全部(ALL)/籬選(F)/多邊形窗選(WP)/多邊形框選(CP)/群組(G)/加入(A)/移除(R)/多重(M)/前一個(P)/退回(U)/自動(AU)/單一(SI)/子物件(SU)/物件(O) 在平常或指令巨集常用的有2個是P跟L: P是最後或上一個選集。 L是最後一個建立的物件。 在指令巨集中多會配合Select指令的使用,下一個指令就直接使用P來選取上次選取物件選集。 下表整理至官方說明 模式 指令修改子 說明 窗選 W 選取完全處於兩點所定義之矩形內的所有物件。從左向右指定角點會建立一項窗選 ( 從右向左指定角點會建立框選 ) 。 最後一個 ( 建立的可見物件 ) L 選取最近建立的可見物件。物件必須位於目前空間 ( 即模型空間或圖紙空間 ) ,且其圖層必須未設定為凍結或關閉。 框選 C 選取處於兩點所定義之區域內的物件以及與該區域相交的物件。框選以虛線或亮顯來呈現,以區別窗選。 方塊 BOX 選取兩點所指定之矩形內的所有物件或所有與該矩形相交的物件。如果矩形的點是從右向左指定的,則「方塊」等於「框選」。否則,「方塊」等於「窗選」。 所有 ALL 選取模型空間或目前配置中的所有物件 ( 凍結或鎖住的圖層上的物件除外 ) 。 籬選 F 選取跨越選取籬選線的所有物件。籬選方法與多邊形框選方法相似,只是籬選線不封閉,並且籬選線可以與自身相交。籬選不受系統變數 PICKADD 的影響。 多邊形窗選 WP 選取透過指定點所定義的多邊形內的物件,以及與該多邊形相交的物件。多邊形可以是任何形狀,但不能與自身相交或接觸。將繪製多邊形的最後一條邊,所以多邊形在任何時候都是封閉的。多邊形框選不受系統變數 PICKADD 的影響。 多邊形框選 CP 選取透過指定點所定義的多邊形內的物件,以及與該多邊形相交的物件。多邊形可以是任何形狀,但不能與自身相交或接觸。將繪製多邊形的最後一條邊,所以多邊形在任何時候都是封閉的。多邊形框選不受系統變數 PICKADD 的影響。 群組 G 選取一個或多個具名群組或...

AutoLISP command fillet 如何在LISP呼叫圓角命令

呼叫圓角(fillet)命令基本範例: (command "fillet" (list 物件1-圖元資料 點座標1) (list 物件2-圖元資料 點座標2)) 物件-圖元資料或點可以省略其中一個,但省略點座標可能會影響圓角後的結果(尤其物件是聚合線)。 點座標1、點座標2可以是相同的點及可以不是物件1、物件2上的點。 點座標1、點座標2主要是影響各自物件的遭裁減保留部分或延伸部分。 下面簡易的範例: (setq object_1 (ssget)) (setq pt1 (getpoint)) (command "fillet" (list (ssname object_1 0) pt1) (list (ssname object_1 1) pt1)) 相關連結 AutoCAD 如何載入LISP

AutoLISP 在設定及恢復系統變數上的處理

在程式處理時經常會使用到 系統變數 , 尤其最常用的是 Cmdecho 、 Osmode ...等, 通常會在程式開始處保存原有 系統變數 值, 在程式結束處恢復原有 系統變數 值。 例如: (defun c:test ( / oldlayer oldsnap oldpick) ;|程式開始-保存原有系統變數|; (setq oldlayer (getvar "clayer")) ;目前圖層) (setq oldsnap (getvar "osmode")) ;(儲存目前的抓點設定) (setq oldpick (getvar "pickbox")) ;(儲存目前的選取框大小值) ;|程式開始-修改系統變數|; (setvar "clayer" "123") (setvar "osmode" 0) (setvar "pickbox" 5) ;|程式過程....|; ;|程式結束-恢復原有系統變數|; (setvar "clayer" oldlayer) (setvar "osmode" oldsnap) (setvar "pickbox" oldpick) (princ) ) 但是程式的過程中, 如果發生錯誤導致程式中斷, 會發生 系統變數 值沒有恢復的情形, 所以會應用到在錯誤處理時用的錯誤處理函數( *error* )上加入恢復 系統變數 值。 例如: (defun c:test ( / *error* oldlayer oldsnap oldpick) (defun *error* (err) ;|程式錯誤時-恢復原有系統變數|; (setvar "clayer" oldlayer) (setvar "osmode" oldsnap) (setvar "pickbox" oldpick) (princ (strcat ";...

AutoLISP 如何得到動態圖塊名稱

一般來說 使用 entget 獲取圖元資料 (cdr (assoc 2 (entget (car (entsel "\n 選取一個圖塊:"))))) 會得到圖塊名稱 但因為動態圖塊的特性, 也就是匿名圖塊 名稱大多是 *U 開頭 提供簡單得到動態圖塊名稱的語法: (vl-load-com) (vla-get-Effectivename (vlax-ename->vla-object (car (entsel "\n 選取一個圖塊:")))) 其他方法 下面LISP源自於作者 Lee Mac 原網址-Effective Block Name Visual LISP(從圖塊的VLA物件得到有效圖塊名稱) 例如: (LM:effectivename (vlax-ename->vla-object (car(entsel "\n 選取一個圖塊:")))) ;; Effective Block Name (有效圖塊名稱) - Lee Mac ;; obj - [vla] VLA Block Reference object (圖塊的VLA物件) (defun LM:effectivename ( obj ) (vlax-get-property obj (if (vlax-property-available-p obj 'effectivename) 'effectivename 'name ) ) ) Vanilla LISP(從圖塊的圖元名稱得到有效圖塊名稱) 例如: (LM:al-effectivename (car(entsel "\n 選取一個圖塊:"))) ;; Effective Block Name (有效圖塊名稱) - Lee Mac ;; ent - [ent] Block Reference entity (圖塊的圖元名稱) (defun LM:al-effectivename ( ent / blk rep ) (if (wcmatch (setq blk (cdr (assoc 2 ...

Excel 如何用資料剖析把換行符號分隔

圖片
其實這個很簡單 只是需要一點小技巧 上圖是資料剖析前 使用 分隔符號 剖析後,按下一步: 勾選 分隔符號 的 其他 其他後面輸入 Ctrl+j 或 ALT+10 輸入後 不會顯示字元 但下面預覽分欄結果會有變化,如下圖: 上圖-輸入後不會顯示字元及預覽分欄結果出現變化 看見這個結果表示資料剖析達成目標。 之後按完成即可。 上圖-資料剖析成功 上圖-完整動作流程

AutoCAD 如何自訂線型教學

圖片
基本線型設定教學 每種線型,均在線型定義檔中,佔用兩行,來加以定義。 *線型名稱,線型描述 線型範例 A,線型樣式描述1,線型樣式描述2...... 第一行包含‥線型名稱,及可選擇是否設定的線型描述。 第二行,是定義實際線型樣式的字碼。 第二行必須以字母 A (對齊) 開始,後面接著定義提筆長度 (空格)、下筆長度 (虛線) ,和圓點的樣式描述子列示。 透過以分號 (;) 開始一行,您可以在 LIN 檔中,包含註解。 *線型名稱,線型描述 線型範例 A,線型樣式描述1,線型樣式描述2...... *線型名稱 :以星號 ( * ) 開頭,並且應為線型唯一名稱。 *線型描述 :線型描述會顯示在「線型管理員」,和「載入或重新載入線型」對話方塊中的描述欄位。該描述為可選擇是否設定,如果設定則需要與前面的線型名稱用逗號( , ) 分隔;反之,沒有設定該描述則請勿加入逗號( , ) 分隔。 *對齊點 (A) :目前只有A類型對齊可以使用。用於指定個別線、圓、弧在端點處的樣式對齊動作,可以保證線與弧的起點與終點,均以虛線表示。 *樣式描述 :每個樣式描述均會指定組成線型各區段的長度,以逗號分隔 (不允許有空格) 十進位正數,表示該長度的下筆 (虛線) 區段。 十進位負數,表示該長度的提筆 (空格) 區段。 虛線長度為 0 時,則繪製一個圓點。 A 類型對齊要求第一個虛線長度,大於或等於 0 (下筆區段)。第二個虛線長度,應小於 0 (提筆區段或空格)。必須至少有兩種虛線規格。 線型設定中加入文字(有文字的線型) 在線型描述中加入文字字元的格式如下: ["文字字串",文字型式名稱,比例,旋轉,X 偏移,Y 偏移] 調整比例、旋轉、X 偏移和 Y 偏移值必須以帶符號的十進位數值表示,例如 1、-17 和 0.01。 *文字字串 :線型中要顯示的字元。 *文字型式名稱 :要使用的文字型式名稱。如果未指定文字型式,則使用目前定義的型式。 註: 嵌入的文字字元與圖面中的文字型式相關聯。載入線型之前,與線型相關聯的文字型式必須存在。 *比例 :用於文字型式之相對於線型比例的比例係數。所提供的比例係數字首必須為 S=,例如 S=.5 表示比例係數為 0.5。文字型式的高度會乘以比例係數。如果文字...

AutoCAD LISP 字串函數查找表(AutoLISP)

快速查詢函數功能與用法。 函數 描述 (read  [字串]) 從字串中獲取的第一個列表或原子。 (strcase 字串 [選擇]) 轉換所有字母成大寫或小寫。 (strcat [字串1 [字串2 ...]) 返回連接多個字串。 (strlen [字串 ...]) 返回字串的字數。 (substr 字串 開始位置 [長度]) 擷取字串中的文字。 (vl-prin1-to-string 資料) 返回任何LISP對象的字串表示形式,像是由 prin1 功能輸出。 (vl-princ-to-string 資料) 返回任何LISP對象的字串表示形式,像是由princ功能輸出。 (vl-string->list 字串) 將字串轉換為字元代碼列表。 (vl-string-elt 字串 位置) 返回字串中指定位置的字元的ASCII表示形式。 (vl-string-left-trim 要刪除字元 字串) 從字串的開頭刪除指定的字元。 (vl-string-mismatch 字串1 字串2 [位置1 位置2 忽略大小寫]) 返回兩個字串從指定位置開始最長相同字串的字數。 (vl-string-position 字元 字串 [ 開始位置 [從尾部開始]]) 在字串中查找具有指定ASCII代碼的字元。 (vl-string-right-trim 字元 字串) 從字串末尾刪除指定的字元。 (vl-string-search 搜尋字串 字串 [開始位置]) 在字串中搜索指定字串。 (vl-string-subst 取代字串 搜尋字串 原字串 [開始位置]) 在字串中用一個字串替換另一個字串。 (vl-string-translate 搜尋字元 取代字元 字串) 用指定的字元集替換字串中的字元。 (vl-string-trim 字元 字串) 從字串的開頭和結尾刪除指定的字元。 (wc...

AutoLISP 如何輸入函數中加入關鍵字選擇

輸入函數基本上是以 get 開頭, 例如: getint 、 getreal 、 getangle 、 getcorner 、 getdist 、 getpoint 、 getstring 、 getkword ...等 基本上是在提示字串內 加上 [ ] 來包覆關鍵字 關鍵字之間用 / 分隔 例如: (getint "\n 文章來自於 eakyle.blogspot.com:[選項A/選項B/選項C]") 並在前面使用 initget 來定義關鍵字 關鍵字之間用 空格 分隔 例如: (initget " 選項A 選項B 選項C ") 結合起來就是: (initget " 選項A 選項B 選項C ") (getint "\n 文章來自於 eakyle.blogspot.com:[選項A/選項B/選項C]") 而 initget 另外可以為輸入函數加上一些限制, (initget [值] [關鍵字]) 不同的值有不同功能。 常用的值如下: 0或忽略:無限制。 1:防止使用者只有輸入Enter。 2:防止使用者輸入0。 4:防止使用者輸入一個負值。 相關連結 AutoCAD 如何載入LISP