發表文章

AutoCAD使用巨集建立今天日期的文字

圖片
       這裡需要使用引入以 DIESEL (直譯式演算字串表示式語言) 撰寫的巨集條件表示式的指令,並使用Edtime函數來呈現。 使用DIESEL表示式需要在前面加 $M= ,表示方式如下: $M=表示式 使用Edtime函數,表示方式如下: $(edtime, time, picture) $(edtime, 時間, 呈現方式) 時間直接使用系統變數DATE來獲得,方式如下: $(getvar,date) 簡單呈現方式: $M=$(edtime, $(getvar,date), YYYY年M月DD日) 如果把它添加到文字上: ^C^C_.text;\;;$M=$(edtime, $(getvar,date), YYYY年M月DD日); 其他格式參考如下: 以1998/9/5  04:53:17 AM呈現 格式 呈現 D 5 DD 05 DDD 星期六/Sat DDDD 星期六/Saturday M 9 MO 09 MON 九月/Sep MONTH 九月/September YY 98 YYYY 1998 H 4 HH 04 MM 53 SS 17 MSEC 506 AM/PM AM am/pm am A/P A a/p a         如果 picture (呈現方式)中出現任何 AM/PM 片語,則 H 與 HH 片語會依據 12 小時制 (12:00-12:59 1:00-11:59),而不是 24 小時制 (00:00–23:59) 來編輯時間。請注意其中 picture (呈現方式)有逗號(,)必須含括在引號中,否則它會被當做引數的分隔符號。 例如: $(edtime, $(getvar,date), DDD"," DD MO YYYY...

AutoCAD LISP 曲線測量函數查找表(AutoLISP / ActiveX)

快速查詢函數功能與用法。 這裡的曲線可以是線(LINE)、聚合線(Polyline)、圓(Circle)、弧(Arc)、建構線(XLINE)、射線(Ray)......等線類型。 函數 描述 (vlax-curve-getArea   curve-obj ) 返回曲線內的面積。 (vlax-curve-getClosestPointTo  curve-obj givenPnt [extend] ) 返回最接近指定點的曲線上的點(在WCS坐標中)。 (vlax-curve-getClosestPointToProjection  curve-obj givenPnt normal [extend] ) 將曲線投影到平面上後,返回曲線上的最近點(在WCS中)。 (vlax-curve-getDistAtParam   curve-obj param ) 返回曲線段從曲線開始到指定參數的長度。 (vlax-curve-getDistAtPoint curve-obj point ) 返回曲線起點和指定點之間曲線段的長度。 (vlax-curve-getEndParam  curve-obj ) 返回曲線端點(終點)的參數。 (vlax-curve-getEndPoint  curve-obj ) 返回曲線的端點(終點)(以WCS坐標表示)。 (vlax-curve-getFirstDeriv  curve-obj param ) 返回指定位置的曲線的一階導數(在WCS坐標中)。 (vlax-curve-getParamAtDist  curve-obj point ) 返回距曲線起點指定距離的曲線參數。 (vlax-curve-getParamAtPoint  curve-obj dist ) 返回該點處曲線的參數。 (vlax-curve-getPointAtDist   curve-obj dist ) 返回沿用戶指定距離...

open 指令介紹 (AutoLISP)

打開文件以供AutoLISP I / O函數使用。 (open filename mode) filename (檔案名):要打開的文件的名稱和路徑。如果未指定文件的完整路徑名,打開預設的AutoCAD默認目錄。 mode (模式):指示文件是否已打開以進行讀取,寫入或追加。指定包含以下字母之一的字符串: r :開啟讀取。 w :開啟寫入。如果 filename 不存在,則創建並打開一個新文件。如果 filename 已存在,則會覆蓋其現有內容。寫入到打開檔案的內容實際上不會寫入,直到使用 close 函數來檔案關閉。 a :開啟追加。如果 filename 不存在,則創建並打開一個新文件。如果 filename 已存在,則會打開並且現有內容的最後,因此寫入文件的新數據將附加到已有內容。 所述模式參數可以是大寫或小寫。請注意,在AutoCAD 2000之前的版本中,必須以小寫形式指定模式。 返回值:檔案或 nil 如果成功, 打開返回可供其他I / O函數使用的文件描述。如果模式“R”指定並且文件名不存在,將返回 nil . 範例: 打開現有文件: (setq a (open "c:/datafiles/filelist.txt" "r")) #<file "c:/datafiles/filelist.txt"> 以下示例問題 打開 針對不存在的文件: (setq f (open "c:\\my documents\\new.tst" "w")) #<file "c:\\my documents\\new.tst"> (setq f (open "nosuch.fil" "r")) nil (setq f (open "logfile" "a")) #<file "logfile"> 相關連結 AutoCAD 如何載入LISP AutoLISP 如何將CAD的內容導出到TXT或CSV 參考 open (AutoLISP)

AutoLISP 如何將CAD的內容導出到TXT或CSV

1.開啟已有的TXT檔案並寫入資料 基本上利用 OPEN 來開啟已有的檔案, 用 write-line 來寫入每一行, 用 close 來關閉檔案, 範例: (setq file (open "D://123.txt" "w")) (write-line "這是第一行..." file) (close file) 2.建立新的TXT檔案並寫入資料 如果要建立新的檔案, 加上 getfiled 來開啟新增檔案視窗, 範例: (setq file (open (getfiled "保存到..." "D:\\" "txt" 1) "w")) (write-line "這是第一行..." file) (close file) 3.建立新的CSV檔案並寫入資料 基本上跟TXT檔是差不多的, 只差在於CSV檔需要有分隔符號, 通常是逗號分隔,或Tab分隔, 範例: (setq file (open (getfiled "保存到..." "D:\\" "csv" 1) "w")) (write-line "圖塊名, 圖層, 數量" file) (close file) 相關連結 AutoCAD 如何載入LISP open 指令介紹 (AutoLISP) AutoCAD LISP 讀取TXT檔的內容

AutoLISP 如何檢查左右括號對稱問題

圖片
在寫LISP時, 左右括號對稱是很重要的, 而有時會因為不對稱而導致發生錯誤。 在使用Visual LISP IDE中, 可以使用兩個方式來檢查左右括號對稱(括號匹配), 第一個方法: 使用「括號符合」(或叫括號匹配)(Balancing Parentheses)(Ctrl+M)的功能, 在工具列「編輯」中的「括號符合」(Ctrl+M), 裡面有4個功能,       名稱                     英文                快捷鍵                                  功能 符合及向前(F)  Match Forward        Ctrl+]                  向下跳到互相對稱的括號旁 符合及退回(B)  Match Backward     Ctrl+[                 向上跳到互相對稱的括號旁 選取向前(O)     Select Forward      Ctrl+Shift+]          向下選取到互相對稱的括號 選取退回(A)     Select Backward   Ctrl+Shift+[          向上選取到互相對稱的括號 第二個方法: 使用「...

AutoLISP 防止輸入函數回傳空值

輸入函數基本上是以 GET 開頭, 例如: GETINT 、 GETREAL ...等 回傳空值 nil 通常是未輸入值就按下Enter鍵, 通常方法是在前面使用 initget 來預防, (initget 1);;;參數1是防止直接按下Enter鍵 但是如果有設定預設值時, (setq TheV 10) (setq TheV (getreal (strcat "\n 輸入新的值:<" TheV ">"))) 想要直接用預設值,而使用 initget 來預防就會不方便了, 但不用 initget ,卻又想要使用預設值,而直接按下Enter鍵, 卻只會回傳空值 nil , 這時就會使用一些方法來解決, 通常方法是在後面使用 IF 進行判斷, 缺點是會多一個變數。 (setq TheV 10) (setq NewTheV (getreal (strcat "\n 輸入新的值:<" TheV ">"))) (if (/= NewTheV nil) (setq TheV NewTheV)) 另一個方法是使用 cond : 來判斷是否回傳空值 nil ,否則給予原本的值。 (setq TheV 10) (setq TheV (cond ((getreal (strcat "\n 輸入新的值:<" (rtos TheV) ">"))) (TheV))) *備註: getstring 不適用此方法,因為直接按下Enter鍵會回回傳的是 "" ,而不是 nil 。 相關連結 AutoCAD 如何載入LISP

AutoLISP CAR 跟 CDR 疊加用法

在串列資料中, 很常用 car 跟 cdr , 而這兩個有為了縮減疊加的寫法, 例如: caaaar  或 cadr 這樣的方式可以最多疊加4層, 如何分辨 ( c aa r x)     相當於  ( c a r (c a r x)) ( c da r  x)     相當於  ( c d r (c a r  x))  ( c ada r  x)    相當於   ( c a r (c d r  (c a r  x))) ( c ad r  x)     相當於  ( c a r (c d r  x)) ( c dd r  x)     相當於   ( c d r (c d r  x)) ( c add r  x)    相當於   ( c a r (c d r (c d r  x)))