[已解決]請教關於LISP中的"INSERT"用法
3 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
[已解決]請教關於LISP中的"INSERT"用法
各位前輩好!!
請教各位關於使用command 呼叫"insert"指令後
應該如何指定圖塊名稱??
(command "insert" .........)
此段後續的寫法是否有固定的格式??
在LISP中是否有類似EXCEL中的那種函數說明可以參考?
請各位協助我解惑
謝謝!
1
請教各位關於使用command 呼叫"insert"指令後
應該如何指定圖塊名稱??
(command "insert" .........)
此段後續的寫法是否有固定的格式??
在LISP中是否有類似EXCEL中的那種函數說明可以參考?
請各位協助我解惑
謝謝!
1
minture 在 2015-10-02, 10:31 作了第 1 次修改
minture- 初級會員
- 文章總數 : 34
年齡 : 38
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 3709
威望值 : 99
注冊日期 : 2015-07-16
回復: [已解決]請教關於LISP中的"INSERT"用法
小弟自己抽空研究了一下發現
只要把檔案放在支援檔搜尋路徑下
就可以用以下程式碼叫出圖塊
(command "insert" "圖塊名稱"))
來插入圖塊
不過好像不能用上面的方式來插入動態圖塊
一定要在檔案裡面有這個要插入的動態圖塊得圖塊定義
才可以用這各方式插入動態圖塊
如下圖示
[img][/img]
如果檔案裡沒有這個C型鋼 就無法直接插入C型鋼的動態圖塊
不知道有沒有前輩願意分享其中的奧妙之處
小弟希望最終的功能是開一張新的圖檔
但是利用LISP寫的DCL配合INSERT 可以快速的插入各式圖塊(包含動態圖塊)
只要把檔案放在支援檔搜尋路徑下
就可以用以下程式碼叫出圖塊
(command "insert" "圖塊名稱"))
來插入圖塊
不過好像不能用上面的方式來插入動態圖塊
一定要在檔案裡面有這個要插入的動態圖塊得圖塊定義
才可以用這各方式插入動態圖塊
如下圖示
[img][/img]
如果檔案裡沒有這個C型鋼 就無法直接插入C型鋼的動態圖塊
不知道有沒有前輩願意分享其中的奧妙之處
小弟希望最終的功能是開一張新的圖檔
但是利用LISP寫的DCL配合INSERT 可以快速的插入各式圖塊(包含動態圖塊)
minture- 初級會員
- 文章總數 : 34
年齡 : 38
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 3709
威望值 : 99
注冊日期 : 2015-07-16
回復: [已解決]請教關於LISP中的"INSERT"用法
你可以把「動態圖塊」製作成獨立的dwg檔,這樣子就可以插入囉~
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [已解決]請教關於LISP中的"INSERT"用法
感謝蘋果爸回覆
小弟試了一下確實是可以插入
但是
假設我圖塊檔案是C-ST.dwg 此檔案內含一個C-STEEL的動態圖塊
插入後得到的圖塊是C-ST
必須炸一次之後才能得到C-STEEL動態圖塊
小弟試了一下確實是可以插入
但是
假設我圖塊檔案是C-ST.dwg 此檔案內含一個C-STEEL的動態圖塊
插入後得到的圖塊是C-ST
必須炸一次之後才能得到C-STEEL動態圖塊
minture- 初級會員
- 文章總數 : 34
年齡 : 38
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 3709
威望值 : 99
注冊日期 : 2015-07-16
回復: [已解決]請教關於LISP中的"INSERT"用法
command就是用來執行指令用,所以語法就是(command "-insert" 圖塊名稱 插入點 x比例 y比例 旋轉角度)
你的檔案內是有多個動態圖塊嗎? 如果是那你程式要寫有"複製非打開文件的特定塊至本圖"這功能~
你的檔案內是有多個動態圖塊嗎? 如果是那你程式要寫有"複製非打開文件的特定塊至本圖"這功能~
明~- 高級會員
- 文章總數 : 307
年齡 : 44
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 7195
威望值 : 667
注冊日期 : 2009-12-24
回復: [已解決]請教關於LISP中的"INSERT"用法
明~ 寫到:command就是用來執行指令用,所以語法就是(command "-insert" 圖塊名稱 插入點 x比例 y比例 旋轉角度)
你的檔案內是有多個動態圖塊嗎? 如果是那你程式要寫有"複製非打開文件的特定塊至本圖"這功能~
我是在一個檔案內有多個圖塊 (包含動態圖塊)
"複製非打開文件的特定圖塊至本圖"這個功能的寫法可以請您指教嗎?
minture- 初級會員
- 文章總數 : 34
年齡 : 38
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 3709
威望值 : 99
注冊日期 : 2015-07-16
回復: [已解決]請教關於LISP中的"INSERT"用法
剛好我寫的螺絲程式中就有用到,這段程式也是寫程式需要在網路上找到的~
;;複製非打開文件的特定塊至本圖
(defun CopyBlock (DwgName BlkName / *ACAD* BLOCKS DBXDOC NUM)
(setq *acad* (vlax-get-acad-object))
(setq blocks (vla-get-blocks (vla-get-ActiveDocument *acad*)))
(setq dbxDoc (vla-GetInterfaceObject *acad* (GetObjectDBXVer)))
(vla-open dbxDoc DwgName)
(setq num (vla-item (vla-get-blocks dbxDoc) BlkName))
(vla-CopyObjects
dbxDoc
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbObject
'(0 . 0)
)
(list num)
)
blocks
)
(vlax-release-object dbxDoc)
(vla-item blocks BlkName)
)
在我的程式中的寫法如下(有對話框的寫法)
(if (= act 1) (progn (setq na (strcat *type "-" tt "-" *view));將字串合併成長字串
(CopyBlock *pa na)
(setq p1 (getpoint "\n插入點:"))
(princ "\n角度:")
(command "-insert" na p1 "" "" pause)
)
)
有需要的朋友可參考看看~
;;複製非打開文件的特定塊至本圖
(defun CopyBlock (DwgName BlkName / *ACAD* BLOCKS DBXDOC NUM)
(setq *acad* (vlax-get-acad-object))
(setq blocks (vla-get-blocks (vla-get-ActiveDocument *acad*)))
(setq dbxDoc (vla-GetInterfaceObject *acad* (GetObjectDBXVer)))
(vla-open dbxDoc DwgName)
(setq num (vla-item (vla-get-blocks dbxDoc) BlkName))
(vla-CopyObjects
dbxDoc
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbObject
'(0 . 0)
)
(list num)
)
blocks
)
(vlax-release-object dbxDoc)
(vla-item blocks BlkName)
)
在我的程式中的寫法如下(有對話框的寫法)
(if (= act 1) (progn (setq na (strcat *type "-" tt "-" *view));將字串合併成長字串
(CopyBlock *pa na)
(setq p1 (getpoint "\n插入點:"))
(princ "\n角度:")
(command "-insert" na p1 "" "" pause)
)
)
有需要的朋友可參考看看~
明~- 高級會員
- 文章總數 : 307
年齡 : 44
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 7195
威望值 : 667
注冊日期 : 2009-12-24
回復: [已解決]請教關於LISP中的"INSERT"用法
感謝前輩分享!!
不過還是有以下問題請教:
我有一個PA的圖檔 圖檔內包含一個AWS的圖塊
不過以下執行時會先跑出
no function definition: GETOBJECTDBXVER
這個函數我在Visual LISP的說明主題裡也找不到相關的說明
還請前輩指點迷津!!
;;圖名PA 圖塊名AWS
(defun c:test()
(setq na "aws")
(copyblock *pa na)
(command "-insert" na '(0 0) "" "" pause)
)
;;複製非打開文件的特定塊至本圖
(defun copyblock (dwgname blkname / *acad* blocks dbxdoc num)
(setq *acad* (vlax-get-acad-object))
(setq blocks (vla-get-blocks (vla-get-activedocument *acad*)))
(setq dbxdoc (vla-getinterfaceobject *acad* (getobjectdbxver)))
(vla-open dbxdoc dwgname)
(setq num (vla-item (vla-get-blocks dbxdoc) blkname))
(vla-copyobjects
dbxdoc
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbobject
'(0 . 0)
)
(list num)
)
blocks
)
(vlax-release-object dbxdoc)
(vla-item blocks blkname)
)
不過還是有以下問題請教:
我有一個PA的圖檔 圖檔內包含一個AWS的圖塊
不過以下執行時會先跑出
no function definition: GETOBJECTDBXVER
這個函數我在Visual LISP的說明主題裡也找不到相關的說明
還請前輩指點迷津!!
;;圖名PA 圖塊名AWS
(defun c:test()
(setq na "aws")
(copyblock *pa na)
(command "-insert" na '(0 0) "" "" pause)
)
;;複製非打開文件的特定塊至本圖
(defun copyblock (dwgname blkname / *acad* blocks dbxdoc num)
(setq *acad* (vlax-get-acad-object))
(setq blocks (vla-get-blocks (vla-get-activedocument *acad*)))
(setq dbxdoc (vla-getinterfaceobject *acad* (getobjectdbxver)))
(vla-open dbxdoc dwgname)
(setq num (vla-item (vla-get-blocks dbxdoc) blkname))
(vla-copyobjects
dbxdoc
(vlax-safearray-fill
(vlax-make-safearray
vlax-vbobject
'(0 . 0)
)
(list num)
)
blocks
)
(vlax-release-object dbxdoc)
(vla-item blocks blkname)
)
minture- 初級會員
- 文章總數 : 34
年齡 : 38
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 3709
威望值 : 99
注冊日期 : 2015-07-16
回復: [已解決]請教關於LISP中的"INSERT"用法
漏了一個副程式
;;獲取ObjectDBX版本字符串
(defun GetObjectDBXVer (/ VERSION)
(if (>= (setq VERSION (atoi (getvar "acadver"))) 16)
(strcat "ObjectDBX.AxDbDocument." (itoa VERSION))
)
)
載入後就可以了~
;;獲取ObjectDBX版本字符串
(defun GetObjectDBXVer (/ VERSION)
(if (>= (setq VERSION (atoi (getvar "acadver"))) 16)
(strcat "ObjectDBX.AxDbDocument." (itoa VERSION))
)
)
載入後就可以了~
明~- 高級會員
- 文章總數 : 307
年齡 : 44
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 7195
威望值 : 667
注冊日期 : 2009-12-24
回復: [已解決]請教關於LISP中的"INSERT"用法
明~ 寫到:漏了一個副程式
;;獲取ObjectDBX版本字符串
(defun GetObjectDBXVer (/ VERSION)
(if (>= (setq VERSION (atoi (getvar "acadver"))) 16)
(strcat "ObjectDBX.AxDbDocument." (itoa VERSION))
)
)
載入後就可以了~
請教明大
載入後我的程式如下
但是執行後會跑出下面這一段
!!錯誤: 自動化錯誤。未提供描述。
(copyblock pa na)→好像是這段出現錯誤 請問我的用法哪裡有誤嗎?
;;圖名PA 圖塊名AWS
(defun c:aws ()
(vl-load-com)
(setq na "aws")
(setq pa "pa")
(copyblock pa na)
(setq p1 (getpoint "\n插入點:"))
(princ "\n角度:")
(command "-insert" na p1 "" "" pause)
)
minture- 初級會員
- 文章總數 : 34
年齡 : 38
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 3709
威望值 : 99
注冊日期 : 2015-07-16
回復: [已解決]請教關於LISP中的"INSERT"用法
(defun c:aws ()
(setq na "aws");圖塊名稱
(setq *pa "c:\\AutoCAD系統規劃\\圖塊\\pa.dwg");圖檔路徑
(CopyBlock *pa na)
(setq p1 (getpoint "\n插入點:"))
(princ "\n角度:")
(command "-insert" na p1 "" "" pause)
)
(setq na "aws");圖塊名稱
(setq *pa "c:\\AutoCAD系統規劃\\圖塊\\pa.dwg");圖檔路徑
(CopyBlock *pa na)
(setq p1 (getpoint "\n插入點:"))
(princ "\n角度:")
(command "-insert" na p1 "" "" pause)
)
明~- 高級會員
- 文章總數 : 307
年齡 : 44
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 7195
威望值 : 667
注冊日期 : 2009-12-24
回復: [已解決]請教關於LISP中的"INSERT"用法
明~ 寫到:(defun c:aws ()
(setq na "aws");圖塊名稱
(setq *pa "c:\\AutoCAD系統規劃\\圖塊\\pa.dwg");圖檔路徑
(CopyBlock *pa na)
(setq p1 (getpoint "\n插入點:"))
(princ "\n角度:")
(command "-insert" na p1 "" "" pause)
)
感謝前輩指點!!
已經順利解決我的問題!!
minture- 初級會員
- 文章總數 : 34
年齡 : 38
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 3709
威望值 : 99
注冊日期 : 2015-07-16
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章