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

[已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

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

[已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 franwist 于 2010-10-11, 22:59

最近接到一套圖被很多人修過又套來套去的
很多線段都畫歪,有許多0.0004、0.0001之類的小數點
經理每看到一次就唸一次
又不准我花時間去把圖重新放樣
請問lisp有辦法寫出讓小數點好幾位的線段端點,去抓最靠近的0.5格點嗎?
謝謝


franwist 在 2010-10-17, 00:49 作了第 1 次修改
avatar
franwist
初級會員
初級會員

文章總數 : 44
年齡 : 32
來自 : 桃園縣
職業 : 建築設計
愛好 : 建築
個性 : 平易近人
使用年資 : 7
使用版本 : 2014
積分 : 1
經驗值 : 2857
威望值 : 21
注冊日期 : 2010-04-26
男 獅子座 牛

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 pizg 于 2010-10-15, 11:02

;;2010-10-15 By PizG
(defun c:FixDwg(/ FixVal ssl i ent dxf p1 x1 y1 z1 p2 x2 y2 z2)
;;(FixVal (setq r 123.234)) RETURN 123.0
;;(FixVal (setq r 123.456)) RETURN 123.5
;;(FixVal (setq r 123.789)) RETURN 124.0
(defun FixVal(r / v)
(setq v (rem r 1))
(cond
((< v 0.25) (setq ret (- r v)))
((< v 0.75) (setq ret (+ (- r v) 0.5)))
(T (setq ret (+ (- r v) 1)))
)
)

;;
(if (setq ssl (ssget '((0 . "LINE"))))
(progn
(setq i 0)
(repeat (sslength ssl)
(setq ent (ssname ssl i))
(setq dxf (entget ent))
(setq p1 (cdr (assoc 10 dxf)))
(setq x1 (FixVal (nth 0 p1)))
(setq y1 (FixVal (nth 1 p1)))
(setq z1 (FixVal (nth 2 p1)))
(setq dxf (subst (cons 10 (list x1 y1 z1)) (assoc 10 dxf) dxf))
(setq p2 (cdr (assoc 11 dxf)))
(setq x2 (FixVal (nth 0 p2)))
(setq y2 (FixVal (nth 1 p2)))
(setq z2 (FixVal (nth 2 p2)))
(setq dxf (subst (cons 11 (list x2 y2 z2)) (assoc 11 dxf) dxf))
(entmod dxf)
(setq i (1+ i))
)
(alert "DONE!")
)
)
(princ)
)
avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4024
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 franwist 于 2010-10-15, 18:40

謝謝囉 天阿 真是太神奇了
真的很大的幫助,萬分感謝~~~~
但PLINE是不是無法選取到? 剛剛試了幾次都一樣QQ
avatar
franwist
初級會員
初級會員

文章總數 : 44
年齡 : 32
來自 : 桃園縣
職業 : 建築設計
愛好 : 建築
個性 : 平易近人
使用年資 : 7
使用版本 : 2014
積分 : 1
經驗值 : 2857
威望值 : 21
注冊日期 : 2010-04-26
男 獅子座 牛

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 pizg 于 2010-10-16, 02:50

franwist 寫到: 謝謝囉 天阿 真是太神奇了
真的很大的幫助,萬分感謝~~~~
但PLINE是不是無法選取到? 剛剛試了幾次都一樣QQ

依照你的要求, 增加處理PLINE的功能, 程式碼如下所示,
若還有其它問題, 可以在此留言, 或發送短信給我.

;;By PizG
;;2010-10-16 增加處理PLINE
;;2010-10-15 處理LINE
(defun c:FixDwg (/ FixVal ssl i ent dxf typ p1 x1 y1 z1 p2 x2 y2 z2 lst j code)
;;(FixVal (setq r 123.234)) RETURN 123.0
;;(FixVal (setq r 123.456)) RETURN 123.5
;;(FixVal (setq r 123.789)) RETURN 124.0
(defun FixVal (r / v)
(setq v (rem r 1))
(cond
((< v 0.25) (setq ret (- r v)))
((< v 0.75) (setq ret (+ (- r v) 0.5)))
(T (setq ret (+ (- r v) 1)))
)
)

;;
(if (setq ssl (ssget '((0 . "LINE,LWPOLYLINE"))))
(progn
(setq i 0)
(repeat (sslength ssl)
(setq ent (ssname ssl i))
(setq dxf (entget ent))
(setq typ (cdr (assoc 0 dxf)))
(cond
((= typ "LINE")
(setq p1 (cdr (assoc 10 dxf)))
(setq x1 (FixVal (nth 0 p1)))
(setq y1 (FixVal (nth 1 p1)))
(setq z1 (FixVal (nth 2 p1)))
(setq dxf (subst (cons 10 (list x1 y1 z1)) (assoc 10 dxf) dxf))
(setq p2 (cdr (assoc 11 dxf)))
(setq x2 (FixVal (nth 0 p2)))
(setq y2 (FixVal (nth 1 p2)))
(setq z2 (FixVal (nth 2 p2)))
(setq dxf (subst (cons 11 (list x2 y2 z2)) (assoc 11 dxf) dxf))
)
((= typ "LWPOLYLINE")
(setq lst '() j 0)
(repeat (length dxf)
(setq code (nth j dxf))
(if (= (car code) 10)
(progn
(setq p1 (cdr code))
(setq x1 (FixVal (nth 0 p1)))
(setq y1 (FixVal (nth 1 p1)))
(setq code (list 10 x1 y1))
)
)
(setq lst (cons code lst))
(setq j (1+ j))
)
(setq dxf (reverse lst))
)
)
(entmod dxf)
(setq i (1+ i))
)
(alert "DONE!")
)
)
(princ)
)
[

Tiger&蘋果爸 寫到: 竊喜 感恩您的無私分享<積分+1>


Tiger&蘋果爸 在 2010-10-16, 10:20 作了第 1 次修改 (原因 : 讚一個!!)
avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4024
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 franwist 于 2010-10-17, 00:39

pizg大大實在是太熱心了
我真的很感動~QQ
avatar
franwist
初級會員
初級會員

文章總數 : 44
年齡 : 32
來自 : 桃園縣
職業 : 建築設計
愛好 : 建築
個性 : 平易近人
使用年資 : 7
使用版本 : 2014
積分 : 1
經驗值 : 2857
威望值 : 21
注冊日期 : 2010-04-26
男 獅子座 牛

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 Tiger&蘋果爸 于 2010-10-17, 04:26

franwist 寫到:pizg大大實在是太熱心了
我真的很感動~QQ
很高興你的問題已獲得幫助~
提醒你:
已解決主題顏色要改為[無]
認同

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

文章總數 : 17064
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 63868
威望值 : 12639
注冊日期 : 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有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 suny999 于 2010-10-17, 05:36

我去年剛上班也遇過這種問題,所以寫了這個程式,使用前請先設定格線X間距GridUnit:0.5,0.5(這程式X,Y都用第一個當間距值,
如果要改成X,Y不等間距值的話再提出來討論吧,對Line很簡單,對聚合線就稍微麻煩了)
當時剛學CAD,lisp不熟所以副程式用中文變數請勿見笑,能用就好 微笑
--------------------------------------------------------------
(defun c:Fix(/ tor xen i cs)
(defun RoundUp(值 距)
(setq 正負(minusp 值)
餘數(rem(abs 值)距)
商數(-(abs 值)餘數)
結果(+(if(<=(* 0.5 距)餘數)距 0)商數))
(if 正負(- 結果)結果))
(defun LV(l)(vlax-make-variant(vlax-safearray-fill(vlax-make-safearray vlax-vbdouble(cons 0(1-(length l))))l)))
(defun VL(v)(vlax-safearray->list(vlax-variant-value v)))
(defun fixPt(p f)(list(RoundUp(car p)f)(RoundUp(cadr p)f)(RoundUp(caddr p)f)))
(setq tor (car(getvar 'GridUnit))); 採用系統格點間距,可自行設定格點間距(需為1/x值),例如:0.1, 0.5, 0.25, 0.125
(prompt (strcat "\n將採用系統格點間距GridUnit:" (rtos tor 2 2) "來調整端點座標,請選線或聚合線:"))
(setq ss (ssget '((0 . "LINE,LWPOLYLINE"))) i -1)
(repeat (sslength ss)
(setq xen(vlax-ename->vla-object (ssname ss (setq i (1+ i))))cs nil)
(cond
((=(vla-Get-ObjectName xen)"AcDbPolyline")
(ForEach c(vl(vla-get-Coordinates xen))(setq cs(Append cs(List(RoundUp c tor)))))
(vla-put-coordinates xen (lv cs)))
((=(vla-Get-ObjectName xen)"AcDbLine")
(vla-put-StartPoint xen(lv(fixPt(vl(vla-get-startpoint xen))tor)))
(vla-put-EndPoint xen(lv(fixPt(vl(vla-get-endpoint xen))tor))))))
(princ))
avatar
suny999
一般會員
一般會員

文章總數 : 13
年齡 : 36
來自 : 台北
職業 : 結構技師
愛好 : 寫程式
個性 : 善良
使用年資 : 2年
使用版本 : 2012
經驗值 : 3095
威望值 : 27
注冊日期 : 2009-05-12
男 摩羯座 猴

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 小五 于 2011-09-27, 03:51

請問此lisp載入後要如何使用
avatar
小五
一般會員
一般會員

文章總數 : 17
年齡 : 35
來自 : 桃園
職業 : 繪圖
愛好 : 繪圖
個性 : 活潑
使用年資 : 5
使用版本 : 2008
經驗值 : 2465
威望值 : 24
注冊日期 : 2011-01-27
女 金牛座 狗

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 suny999 于 2011-09-27, 04:33

小五 寫到:請問此lisp載入後要如何使用
先設定系統網格參數GridUnit
如:0.5
輸入指令:fix
選取線或聚合線
avatar
suny999
一般會員
一般會員

文章總數 : 13
年齡 : 36
來自 : 台北
職業 : 結構技師
愛好 : 寫程式
個性 : 善良
使用年資 : 2年
使用版本 : 2012
經驗值 : 3095
威望值 : 27
注冊日期 : 2009-05-12
男 摩羯座 猴

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 stone1224 于 2011-09-28, 08:39

好像斜線弄不出來,而且請問是移動的那一條線,是先選擇到的還是后選擇到
avatar
stone1224
一般會員
一般會員

文章總數 : 23
年齡 : 35
來自 : 深圳
職業 : 景觀設計師
愛好 : 運動
個性 : 外向
使用年資 : 10
使用版本 : 2013
經驗值 : 2576
威望值 : 6
注冊日期 : 2010-11-02
男 摩羯座 雞

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 ginse0727 于 2011-10-04, 05:48

感謝PIZG前輩的程式分享,我也下載來使用了,對於來圖中有帶很多小數的線段,透過這個程式的校正,真的大大節省了許多時間,真是太好用了!讚啦!!
感激 感恩吶!
avatar
ginse0727
高級會員
高級會員

文章總數 : 256
年齡 : 43
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 4168
威望值 : 491
發帖精華 : 1
注冊日期 : 2010-07-12
經典問與答讀者 藍鵲61號
2011聚會勳章 男 獅子座 虎

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 tarpon 于 2011-10-04, 16:35

很實用的程式感謝PIZG的分享 親一個
avatar
tarpon
中級會員
中級會員

文章總數 : 201
年齡 : 27
來自 : 台北
職業 : 設計
愛好 : 打球
個性 : 溫和
使用年資 : 5年
使用版本 : 2006
積分 : 6
經驗值 : 3530
威望值 : 238
注冊日期 : 2010-07-01
串連貼紙成功 男 巨蟹座 馬

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 aaronchung.tw 于 2011-12-06, 00:05

這程式經過我的測試好像只能修正直線和聚合直線的接點處,請問有辦法再加進弧線嗎?

這樣這程式就非常棒了,功能盡善完美,要是還能再加雲行線,難度很高嗎?

謝謝!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 38
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2517
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 Jakie 于 2011-12-07, 06:29

太感謝PIZG的分享
能夠做到這樣的程度
真的是要深入才行
讚+1

Jakie
初級會員
初級會員

文章總數 : 74
年齡 : 40
來自 : Tainan Baiho
職業 : 土木
愛好 : 自然藝術
個性 : 有點品味,有點走味~^.^
使用年資 : 8年
使用版本 : 2004
積分 : 1
經驗值 : 2824
威望值 : 81
注冊日期 : 2010-10-28
藍鵲79號
男 獅子座 蛇

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 aaronchung.tw 于 2011-12-07, 07:36

PIZG大大有辦法增加弧線的功能嗎?感謝你提供這個好程式。
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 38
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2517
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 pizg 于 2012-06-08, 08:53

aaronchung.tw 寫到:PIZG大大有辦法增加弧線的功能嗎?感謝你提供這個好程式。
請問你弧線的處理規則是什麼?
avatar
pizg
高級會員
高級會員

文章總數 : 253
年齡 : 52
來自 : 桃園縣
職業 : 建築設計;程式設計
愛好 : 音樂;攝影;繪畫;棋奕;電腦
個性 : 隨和
使用年資 : 20↑
使用版本 : 2010
積分 : 10
經驗值 : 4024
威望值 : 320
發帖精華 : 1
注冊日期 : 2010-04-16
串連貼紙成功 男 摩羯座 龍

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 awi 于 2013-07-15, 08:44

這程式太好用了,容我收藏,感謝PIZG大。謝謝囉
avatar
awi
一般會員
一般會員

文章總數 : 74
年齡 : 34
來自 : 新北市
職業 : 電機技師事務所
愛好 : 新奇有趣的事物
個性 : 固執
使用年資 : 6
使用版本 : 2012
經驗值 : 1993
威望值 : 42
注冊日期 : 2013-05-03
男 白羊座 豬

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 liunvc 于 2014-11-29, 19:36

非常謝謝,這個超好用的,
事務所常被這樣的問題困惱,
光人工調整小數點就非常耗時,
因為這個的方便讓我想加入贊助會員,
avatar
liunvc
一般會員
一般會員

文章總數 : 14
年齡 : 28
來自 : 台北
職業 : 建築設計
愛好 : 運動
個性 : 樂觀
使用年資 : 3年
使用版本 : 2010
經驗值 : 2811
威望值 : 15
注冊日期 : 2010-02-18
男 摩羯座 龍

回頂端 向下

回復: [已解決]請問LISP有辦法做到把圖面上畫歪的小數點線段修成整數嗎?

發表 由 liunvc 于 2015-01-28, 17:08

請問PIZG大大,
FIXDWG您提供的小數點整數功能非常強大,很好用!!
只是有一個小問題不知道您有沒有方法可以解決,

當輸入FIXDWG後,線段會自動移位,例如原本線條在(0,0)會自動微調位置至(0.9,1.3),
即使線段無小數點,同樣也會跳位,
以致有時線段之間會產生0.5與1cm的空隙,無連結再一起,

還請您多幫忙,謝謝您,
avatar
liunvc
一般會員
一般會員

文章總數 : 14
年齡 : 28
來自 : 台北
職業 : 建築設計
愛好 : 運動
個性 : 樂觀
使用年資 : 3年
使用版本 : 2010
經驗值 : 2811
威望值 : 15
注冊日期 : 2010-02-18
男 摩羯座 龍

回頂端 向下

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


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