AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[已解決]請教關於LISP中的"INSERT"用法

上一篇主題 下一篇主題 向下

[已解決]請教關於LISP中的"INSERT"用法

發表 由 minture 于 2015-09-11, 10:16

各位前輩好!!
請教各位關於使用command 呼叫"insert"指令後
應該如何指定圖塊名稱??

(command "insert" .........)

此段後續的寫法是否有固定的格式??
在LISP中是否有類似EXCEL中的那種函數說明可以參考?
請各位協助我解惑

謝謝!

1


minture 在 2015-10-02, 03:31 作了第 1 次修改
avatar
minture
初級會員
初級會員

文章總數 : 32
年齡 : 31
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 1114
威望值 : 51
注冊日期 : 2015-07-16
男 水瓶座 牛

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 minture 于 2015-09-14, 05:06

小弟自己抽空研究了一下發現
只要把檔案放在支援檔搜尋路徑下
就可以用以下程式碼叫出圖塊
(command "insert" "圖塊名稱"))
來插入圖塊

不過好像不能用上面的方式來插入動態圖塊
一定要在檔案裡面有這個要插入的動態圖塊得圖塊定義
才可以用這各方式插入動態圖塊
如下圖示
[img][/img]
如果檔案裡沒有這個C型鋼 就無法直接插入C型鋼的動態圖塊

不知道有沒有前輩願意分享其中的奧妙之處
小弟希望最終的功能是開一張新的圖檔
但是利用LISP寫的DCL配合INSERT 可以快速的插入各式圖塊(包含動態圖塊)
avatar
minture
初級會員
初級會員

文章總數 : 32
年齡 : 31
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 1114
威望值 : 51
注冊日期 : 2015-07-16
男 水瓶座 牛

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 Tiger&蘋果爸 于 2015-09-15, 02:14

你可以把「動態圖塊」製作成獨立的dwg檔,這樣子就可以插入囉~
認同

____________________________________________________________________________________
avatar
Tiger&蘋果爸
系統管理員
系統管理員

文章總數 : 17328
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 65328
威望值 : 12862
注冊日期 : 2008-04-23
2D基礎函授 2D進階函授 3D基礎函授 https://i11.servimg.com/u/f11/19/71/67/71/2d3d10.png2D+3D線上 顧問外掛程式 經典問與答讀者 藍鵲1號
2009聚會勳章 2010聚會勳章 2011聚會勳章 2012聚會勳章 2013勳章-2D基礎 2014聚會勳章 2015聚會勳章 2016聚會勳章 串連貼紙成功 男 水瓶座 兔

http://mypaper.pchome.com.tw/kv1012tiger

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 minture 于 2015-09-15, 04:52

感謝蘋果爸回覆

小弟試了一下確實是可以插入
但是
假設我圖塊檔案是C-ST.dwg 此檔案內含一個C-STEEL的動態圖塊
插入後得到的圖塊是C-ST
必須炸一次之後才能得到C-STEEL動態圖塊

avatar
minture
初級會員
初級會員

文章總數 : 32
年齡 : 31
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 1114
威望值 : 51
注冊日期 : 2015-07-16
男 水瓶座 牛

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 明~ 于 2015-09-15, 16:39

command就是用來執行指令用,所以語法就是(command "-insert" 圖塊名稱 插入點 x比例 y比例 旋轉角度)

你的檔案內是有多個動態圖塊嗎? 如果是那你程式要寫有"複製非打開文件的特定塊至本圖"這功能~
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4664
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 minture 于 2015-09-16, 03:39

明~ 寫到:command就是用來執行指令用,所以語法就是(command "-insert" 圖塊名稱 插入點 x比例 y比例 旋轉角度)

你的檔案內是有多個動態圖塊嗎? 如果是那你程式要寫有"複製非打開文件的特定塊至本圖"這功能~

我是在一個檔案內有多個圖塊 (包含動態圖塊)
"複製非打開文件的特定圖塊至本圖"這個功能的寫法可以請您指教嗎?
avatar
minture
初級會員
初級會員

文章總數 : 32
年齡 : 31
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 1114
威望值 : 51
注冊日期 : 2015-07-16
男 水瓶座 牛

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 明~ 于 2015-09-20, 16:42

剛好我寫的螺絲程式中就有用到,這段程式也是寫程式需要在網路上找到的~

;;複製非打開文件的特定塊至本圖
 (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)
)
 )

有需要的朋友可參考看看~
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4664
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 minture 于 2015-09-23, 02:41

感謝前輩分享!!

不過還是有以下問題請教:
我有一個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)
)
avatar
minture
初級會員
初級會員

文章總數 : 32
年齡 : 31
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 1114
威望值 : 51
注冊日期 : 2015-07-16
男 水瓶座 牛

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 明~ 于 2015-09-23, 11:21

漏了一個副程式
;;獲取ObjectDBX版本字符串
 (defun GetObjectDBXVer (/ VERSION)
   (if (>= (setq VERSION (atoi (getvar "acadver"))) 16)
     (strcat "ObjectDBX.AxDbDocument." (itoa VERSION))
   )
 )

載入後就可以了~
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4664
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 minture 于 2015-09-24, 08:18

明~ 寫到:漏了一個副程式
;;獲取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)
)
avatar
minture
初級會員
初級會員

文章總數 : 32
年齡 : 31
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 1114
威望值 : 51
注冊日期 : 2015-07-16
男 水瓶座 牛

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 明~ 于 2015-09-24, 16:33

(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)
 )
avatar
明~
高級會員
高級會員

文章總數 : 307
年齡 : 37
來自 : 彰化
職業 : 機械
愛好 : 打球 騎車 健行 音樂 電影 (說不完...)
個性 : 不與人爭
使用年資 : 從學生時代接觸到現在(工作中不一定使用)
使用版本 : 2004和2008
積分 : 17
經驗值 : 4664
威望值 : 670
注冊日期 : 2009-12-24
藍鵲292號
男 雙魚座 猴

回頂端 向下

回復: [已解決]請教關於LISP中的"INSERT"用法

發表 由 minture 于 2015-10-02, 03:32

明~ 寫到:(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)
 )

感謝前輩指點!!
已經順利解決我的問題!!
avatar
minture
初級會員
初級會員

文章總數 : 32
年齡 : 31
來自 : 新北市
職業 : excel autocad
愛好 : 宅在家裡
個性 : 隨遇而安
使用年資 : 10
使用版本 : autocad2010
積分 : 1
經驗值 : 1114
威望值 : 51
注冊日期 : 2015-07-16
男 水瓶座 牛

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章