[討論]想大家幫忙一個LISP程式
+3
pizg
Tiger&蘋果爸
Alanlam
7 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第2頁(共2頁)
[討論]想大家幫忙一個LISP程式
主題回顧 :
我想寫一個LISP是可以打一個指令,可更改圖塊名稱,
之後如果再貼上同一個圖塊,名稱後數字累加
例如: BLOCK(1)
BLOCK(2)
.
.
.
求各位大大幫手!!!
我想寫一個LISP是可以打一個指令,可更改圖塊名稱,
之後如果再貼上同一個圖塊,名稱後數字累加
例如: BLOCK(1)
BLOCK(2)
.
.
.
求各位大大幫手!!!
Alanlam- 一般會員
- 文章總數 : 24
年齡 : 36
來自 : 中國
職業 : 學生
愛好 : 足球
個性 : 害羞
使用年資 : 4
使用版本 : 2012
經驗值 : 4628
威望值 : 0
注冊日期 : 2012-07-23
回復: [討論]想大家幫忙一個LISP程式
這是老式用法,shenhung 寫到:insert命令行 輸入的檔名的欄位..直接輸入 9a12(1)=9a12 或9a12(2)=9a12 以此類推.也行.不必修改檔名.!!
2010以後版本好像不可行.
回復: [討論]想大家幫忙一個LISP程式
Alanlam 寫到:可否把圖塊名稱ADD哪一部分變成是點選CAD圖上的其中一個圖塊as920029as 寫到:@@第3步驟就 點選你圖快要放的位子即可 點了之後圖塊
應該會顯示於你點的地方
你圖塊名稱是ADD?
我明天在幫你改進一下程式好了
就是把一開始預設的哪一部份變成點選CAD圖上的任何一個圖塊
這部份可用以下指令讀取圖塊名稱
(setq BL (entsel "點選圖塊"))
(setq BLO (entget (car BL)))
(setq BLOtxt (cdr (assoc 2 BLO)))
試著自己寫看看@@
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5226
威望值 : 47
注冊日期 : 2012-05-06
回復: [討論]想大家幫忙一個LISP程式
pizg 寫到:這是老式用法,shenhung 寫到:insert命令行 輸入的檔名的欄位..直接輸入 9a12(1)=9a12 或9a12(2)=9a12 以此類推.也行.不必修改檔名.!!
2010以後版本好像不可行.
這是r10時代的一種方法.是很久遠了.不過.
這樣的檔名輸入法.2010 還是可以用的.
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8075
威望值 : 1188
注冊日期 : 2009-06-03
回復: [討論]想大家幫忙一個LISP程式
as920029as 寫到:Alanlam 寫到:可否把圖塊名稱ADD哪一部分變成是點選CAD圖上的其中一個圖塊as920029as 寫到:@@第3步驟就 點選你圖快要放的位子即可 點了之後圖塊
應該會顯示於你點的地方
你圖塊名稱是ADD?
我明天在幫你改進一下程式好了
就是把一開始預設的哪一部份變成點選CAD圖上的任何一個圖塊
這部份可用以下指令讀取圖塊名稱
(setq BL (entsel "點選圖塊"))
(setq BLO (entget (car BL)))
(setq BLOtxt (cdr (assoc 2 BLO)))
試著自己寫看看@@
(defun c:add6()
(setvar "cmdecho" 0)
(setq intxt (getstring "圖塊代碼<1>"))
(if (= intxt "")
(setq intxt "1")
)
(setq BL (entsel "點選圖塊"))
(setq BLO (entget (car BL)))
(setq BLOtxt (cdr (assoc 2 BLO)))
(setq x1 (getpoint intxt))
(while x1
(setq newtx (strcat BLOtxt "(" intxt ")"))
(setq qq (command "rename" "b" BLOtxt newtx ))
(setq en_data (command "insert" newtx "s" "1" "r" "0" x1 ))
(setq att (atoi intxt))
(setq intxt (+ att 1))
(setq intxt (itoa intxt))
(setq BLOtxt newtx)
(setq x1 (getpoint intxt))
)
)
(prin1)
改成這樣子嗎?
Alanlam- 一般會員
- 文章總數 : 24
年齡 : 36
來自 : 中國
職業 : 學生
愛好 : 足球
個性 : 害羞
使用年資 : 4
使用版本 : 2012
經驗值 : 4628
威望值 : 0
注冊日期 : 2012-07-23
回復: [討論]想大家幫忙一個LISP程式
Alanlam 寫到:as920029as 寫到:Alanlam 寫到:可否把圖塊名稱ADD哪一部分變成是點選CAD圖上的其中一個圖塊as920029as 寫到:@@第3步驟就 點選你圖快要放的位子即可 點了之後圖塊
應該會顯示於你點的地方
你圖塊名稱是ADD?
我明天在幫你改進一下程式好了
就是把一開始預設的哪一部份變成點選CAD圖上的任何一個圖塊
這部份可用以下指令讀取圖塊名稱
(setq BL (entsel "點選圖塊"))
(setq BLO (entget (car BL)))
(setq BLOtxt (cdr (assoc 2 BLO)))
試著自己寫看看@@
(defun c:add6()
(setvar "cmdecho" 0)
(setq intxt (getstring "圖塊代碼<1>"))
(if (= intxt "")
(setq intxt "1")
)
(setq BL (entsel "點選圖塊"))
(setq BLO (entget (car BL)))
(setq BLOtxt (cdr (assoc 2 BLO)))
(setq x1 (getpoint intxt))
(while x1
(setq newtx (strcat BLOtxt "(" intxt ")"))
(setq qq (command "rename" "b" BLOtxt newtx ))
(setq en_data (command "insert" newtx "s" "1" "r" "0" x1 ))
(setq att (atoi intxt))
(setq intxt (+ att 1))
(setq intxt (itoa intxt))
(setq BLOtxt newtx)
(setq x1 (getpoint intxt))
)
)
(prin1)
改成這樣子嗎?
你這樣程式會有一點點改變
會變成
圖塊名稱ADD(1)..ADD(1)(2)...ADD(1)(2)(3)
會一直把(數字) 加在後面
以下是我改的 給您參考看看^^"
不知是否有幫上忙
(defun c:TEOK()
(setvar "cmdecho" 0)
(setq intxt (getstring "圖塊代碼<1>"))
(if (= intxt "")
(setq intxt "1")
)
(setq BL (entsel "點選圖塊"))
(setq BLO (entget (car BL)))
(setq BLOtxt (cdr (assoc 2 BLO)))
(setq x1 (getpoint intxt))
(setq XX BLOtxt)
(while x1
(setq newtx (strcat BLOtxt "(" intxt ")"))
(setq qq (command "rename" "b" XX newtx))
(setq en_data (command "insert" newtx "s" "1" "r" "0" x1 ))
(setq att (atoi intxt))
(setq intxt (+ att 1))
(setq intxt (itoa intxt))
(setq XX newtx)
(setq x1 (getpoint intxt))
)
)
(prin1)
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5226
威望值 : 47
注冊日期 : 2012-05-06
回復: [討論]想大家幫忙一個LISP程式
剛試了一下,block一個圖塊叫 1 結果複製出來的第1個圖塊名稱叫1(1),第2個叫 1(1)(2),...以此類推,
可怕的是回頭點前面的圖塊名稱都被改成跟最後一個一樣
比如說我複製到第3個名稱會變成 1(1)(2)(3),然後前面3個名稱也都變成1(1)(2)(3)
對lisp來說我完全是個門外漢,是到論壇挖寶之後才知道我的autocad竟然也可以運用這些小程式然後突然增加一甲子功力,可是綜觀列位先進很熱心的解答與切搓後突發感想,雖說大家因此可以長見識(至少個人就獲益良多),
不過個人是覺得樓主這個需求真的有點難以想像,因為圖塊都會指定插入點,所以複製後貼上時點在哪圖塊就應該貼在哪,而且圖塊一般的認知就是貼圖方便,所以都是直接貼到想貼的位置,如果當下貼上後發現找不到貼到哪去,其實馬上qselect,指定選取"圖塊""名稱",所有同名圖塊都會亮顯,這時那個不在應有位置的圖塊立馬乖乖現形,我想這樣應該可以比較直接而有效的解決樓主的問題,因為只是當下在一大張圖裡面要找個小圖塊確實是有點辛苦,沒找到的話圖上在不知名的位置又會多出一個莫名其妙的東西,只要用找到它的方法就解決了不是嗎?況且如果依樓主的說法每貼一次名稱都更改圖塊名稱加上排序,那以後在圖塊管理上不是自找麻煩嗎?
可怕的是回頭點前面的圖塊名稱都被改成跟最後一個一樣
比如說我複製到第3個名稱會變成 1(1)(2)(3),然後前面3個名稱也都變成1(1)(2)(3)
對lisp來說我完全是個門外漢,是到論壇挖寶之後才知道我的autocad竟然也可以運用這些小程式然後突然增加一甲子功力,可是綜觀列位先進很熱心的解答與切搓後突發感想,雖說大家因此可以長見識(至少個人就獲益良多),
不過個人是覺得樓主這個需求真的有點難以想像,因為圖塊都會指定插入點,所以複製後貼上時點在哪圖塊就應該貼在哪,而且圖塊一般的認知就是貼圖方便,所以都是直接貼到想貼的位置,如果當下貼上後發現找不到貼到哪去,其實馬上qselect,指定選取"圖塊""名稱",所有同名圖塊都會亮顯,這時那個不在應有位置的圖塊立馬乖乖現形,我想這樣應該可以比較直接而有效的解決樓主的問題,因為只是當下在一大張圖裡面要找個小圖塊確實是有點辛苦,沒找到的話圖上在不知名的位置又會多出一個莫名其妙的東西,只要用找到它的方法就解決了不是嗎?況且如果依樓主的說法每貼一次名稱都更改圖塊名稱加上排序,那以後在圖塊管理上不是自找麻煩嗎?
lingo_st- 中級會員
- 文章總數 : 211
年齡 : 60
來自 : 新北市
職業 : 營造,建設
愛好 : 學習,服務,電腦軟硬體
個性 : 正直,達觀且無可救藥的雞婆
使用年資 : 使用12年但真的是新手
使用版本 : 2012,2013
積分 : 6
經驗值 : 5965
威望值 : 271
注冊日期 : 2011-12-18
回復: [討論]想大家幫忙一個LISP程式
好久沒來這逛逛了~ 人在大陸出差中
看了板主這問題 ~ 只能說,lisp這東西是"客製化"的需求程式,
針對個人或企業的需求去做程式設計,有些想法可能很天馬行空,
有的可以完成,有的看起來是不可能的任務,
這程式目前的問題應該像前一位說的,所有貼上的圖塊最後都會變成最後一個圖塊名稱,
程式內容應該是要"另外創造一個相同圖塊並給予新的圖塊名稱",而並非只是改圖塊名而已
有空再來挑戰看看吧
看了板主這問題 ~ 只能說,lisp這東西是"客製化"的需求程式,
針對個人或企業的需求去做程式設計,有些想法可能很天馬行空,
有的可以完成,有的看起來是不可能的任務,
這程式目前的問題應該像前一位說的,所有貼上的圖塊最後都會變成最後一個圖塊名稱,
程式內容應該是要"另外創造一個相同圖塊並給予新的圖塊名稱",而並非只是改圖塊名而已
有空再來挑戰看看吧
阿希- 高級會員
- 文章總數 : 348
年齡 : 43
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 6825
威望值 : 226
發帖精華 : 1
注冊日期 : 2008-09-22
回復: [討論]想大家幫忙一個LISP程式
我想問如果做完之後,想把哪個累積的數字歸零,要怎麼做?pizg 寫到:是你圖塊自身的問題>>>圖塊 9A12 自身參考Alanlam 寫到:這是哪個圖塊 https://www.dropbox.com/s/e1p49d1f1207oat/9A12.rarpizg 寫到:有可能是你圖塊自身的問題,Alanlam 寫到:pizg 寫到:;;2012-07-25 by PizG
(defun c:Insblk(/ fn blkName)
(setq fn (getfiled "選取圖塊" "" "dwg" 2))
(setq blkName (vl-filename-base fn))
(if (null blkN) (setq blkN 1) (setq blkN (1+ blkN)))
(setvar "cmdecho" 1)
(command "_.insert" blkName pause 1 1 pause)
(command "_.rename" "b" blkName (strcat blkname "(" (itoa blkN) ")"))
(princ)
)
我遇到一個很奇怪的地方,就是在選取圖塊的時候,檔案名字是英文開頭的可以開,但是數字開頭的就不行....
是什麼問題呢?
如果你能貼出該圖塊網址讓我測一下,
如此答案會更清楚些.
與檔名為數字無關,
請重新建立該圖塊即可.
另外程式稍作修改如下:
;;2012-07-26 by PizG
(defun c:Insblk(/ fn blkName)
(setq fn (getfiled "選取圖塊" "" "dwg" 2))
(setq blkName (vl-filename-base fn))
(if (null blkN) (setq blkN 1) (setq blkN (1+ blkN)))
(setvar "cmdecho" 1)
(command "_.insert" fn pause 1 1 pause)
(command "_.rename" "b" blkName (strcat blkname "(" (itoa blkN) ")"))
(princ)
)
Alanlam- 一般會員
- 文章總數 : 24
年齡 : 36
來自 : 中國
職業 : 學生
愛好 : 足球
個性 : 害羞
使用年資 : 4
使用版本 : 2012
經驗值 : 4628
威望值 : 0
注冊日期 : 2012-07-23
回復: [討論]想大家幫忙一個LISP程式
你現在是用哪個程式在執行的 ??
pizg ? as920029as ?
pizg ? as920029as ?
阿希- 高級會員
- 文章總數 : 348
年齡 : 43
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 6825
威望值 : 226
發帖精華 : 1
注冊日期 : 2008-09-22
回復: [討論]想大家幫忙一個LISP程式
Pizg 大大的已自行解決了歸零問題,as920029as大大的哪個累積加數我都試到有之前圖塊會自動改成最後圖塊的名字,阿希大大如果要像你這樣子說的話,我應要怎麼做了,我剛開始接觸lisp,看見各位大大的幫忙,真心覺得各位很厲害
Alanlam- 一般會員
- 文章總數 : 24
年齡 : 36
來自 : 中國
職業 : 學生
愛好 : 足球
個性 : 害羞
使用年資 : 4
使用版本 : 2012
經驗值 : 4628
威望值 : 0
注冊日期 : 2012-07-23
回復: [討論]想大家幫忙一個LISP程式
XD我也算是LISP新手 只會基礎的而已
Pizg 大大 寫的那種目前還不是很清楚
所以沒辦法用大大那種方式寫看看XD
我的程式目前有2個問題XD"但是目前 我沒辦法改善的更好
希望各位大大給個建議 虛心求教
Pizg 大大 寫的那種目前還不是很清楚
所以沒辦法用大大那種方式寫看看XD
我的程式目前有2個問題XD"但是目前 我沒辦法改善的更好
希望各位大大給個建議 虛心求教
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5226
威望值 : 47
注冊日期 : 2012-05-06
回復: [討論]想大家幫忙一個LISP程式
如果要像阿希大大所言,應如何開始?
Alanlam- 一般會員
- 文章總數 : 24
年齡 : 36
來自 : 中國
職業 : 學生
愛好 : 足球
個性 : 害羞
使用年資 : 4
使用版本 : 2012
經驗值 : 4628
威望值 : 0
注冊日期 : 2012-07-23
回復: [討論]想大家幫忙一個LISP程式
各位大大.....可幫幫忙嗎?
Alanlam- 一般會員
- 文章總數 : 24
年齡 : 36
來自 : 中國
職業 : 學生
愛好 : 足球
個性 : 害羞
使用年資 : 4
使用版本 : 2012
經驗值 : 4628
威望值 : 0
注冊日期 : 2012-07-23
回復: [討論]想大家幫忙一個LISP程式
這篇文章供你參考!Alanlam 寫到:各位大大.....可幫幫忙嗎?
[分享]LISP複製圖塊及更名
http://autocad.bestoforum.net/t13836-topic
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第2頁(共2頁)
這個論壇的權限:
您 無法 在這個版面回復文章