Cad_Cae 板


LINE

※ 引述《ggg888 (g8)》之銘言: : 請問版上高手 : 我畫一了一條polyline : 其中還包括有圓孤的部份 : 取出這條線的串列資料後 : 發現關於圓孤的部份的資料為 : (10 409.77 199.567) (40 . 0.0) (41 . 0.0) (42 . -0.466828) : 10應該是起點,請問42.代表的是什麼樣的資料呢? : 由於我想寫一個程式,可以在這條polyline中每隔20m插入一個block : 所以必須計算每段線段,包括孤長的長度, : 藉此算出每個插入點的座標 : 請問各位有那些方法可以達到呢? 如果要寫程式可以用下式: 先畫一條聚合線或雲形線,長度超過20 (setq dist 20) (setq Curve-obj(vlax-ename->vla-object(car(entsel)))) (setq Prm (vlax-curve-getParamAtDist Curve-obj dist)) (setq Pt (vlax-curve-getPointAtParam Curve-obj Prm)) 如此就可以取得20m處的座標值 Pt 當然這樣的功能用內建的 measure可以達成, 所以要寫程式就要有其必要性,不然這樣好了,再求出該點法向斜率: (setq Dri (vlax-curve-getFirstDeriv curve-obj Prm)) (setq Ang (+ (* pi 0.5) (angle '(0 0 0) Dri))) 如此就可以取得20m處的法向角度 Ang,可以調整插入圖塊的角度, 但這有什麼用嗎?用 measure 插入圖塊用對齊不就好了! 寫程式的用處在於:不等距分段、依里程標記 1. 可以不等距的分段,這點 measure 就很麻煩, 應該要支援 3@200, 2@150 表示式,試著設計輸入迴圈如下: (defun GetList(/ ls tmp tmpls @) (setq ls '()) (while (/= "" (setq tmp (getstring "hint:3@200=(200,200,200):"))) (setq tmpls '() ls (append ls (if (setq @ (vl-string-search "@" tmp)) (repeat(atoi tmp) (setq tmpls (append tmpls (list (substr tmp (+ 2 @)))))) (list tmp) ) ) ) );_ eo while (mapcar 'ATOF ls)) ;_eo GetList (setq SegList (GetList)) 如此可得各分段距離串列 SegList (ex: 200.0 200.0 200.0 150.0 150.0 300.0) 再寫個小程式來累計串列: (defun CumulativeList(oList / ls add nList) (setq ls 0.0 nList '()) (foreach add oList(setq ls(+ ls add)nList(append nList(list ls))))) (setq CumList (CumulativeList SegList)) 如此可得累進距離串列 CumList (ex: 200.0 400.0 600.0 750.0 900.0 1200.0) 2. 可以在每個分段依其里程長度作動態標示(ex:Sec.2 ,Len=200.0, Loc=400.), 下面以畫垂線示範一個簡單完整的程式,也可以改為插入圖塊就更簡單: (vl-load-com) (defun c:meas() (setq MSpace(vla-get-ModelSpace(vla-get-ActiveDocument(vlax-get-acad-object))) SegList (ms:GetList) CumList (ms:CumulativeList SegList) Offset (getreal "Offset distance:") Extend (getreal "Extend length:") Curve-obj(vlax-ename->vla-object(car(entsel))) n 0) (foreach Loc CumList (setq Prm (vlax-curve-getParamAtDist curve-obj Loc) Pt1 (vlax-curve-getPointAtParam curve-obj Prm) Dri (vlax-curve-getFirstDeriv curve-obj Prm) Ang (+ (* pi 0.5) (angle '(0 0 0) Dri)) Pt2 (polar Pt1 Ang Offset) Pt1 (polar Pt2 Ang Extend) Str (strcat " Sec."(itoa n)", Len="(rtos(nth n SegList))", Loc="(rtos Loc)) Obj (vla-AddLine MSpace (vlax-3d-point Pt2) (vlax-3d-point Pt1)) Obj (vla-AddText MSpace Str (vlax-3d-point Pt2) (getvar "textsize")) n (1+ n) ) (vla-put-Rotation Obj (+ Ang pi)) ));_eo meas (defun ms:GetList(/ ls tmp tmpls @) (setq ls '()) (while (/= "" (setq tmp (getstring "hint:3@200=(200,200,200):"))) (setq tmpls '() ls (append ls (if (setq @ (vl-string-search "@" tmp)) (repeat(atoi tmp) (setq tmpls (append tmpls (list (substr tmp (+ 2 @)))))) (list tmp) ) ) ) );_ eo while (mapcar 'ATOF ls)) ;_eo GetList (defun ms:CumulativeList(oList / ls add nList) (setq ls 0.0 nList '()) (foreach add oList(setq ls(+ ls add)nList(append nList(list ls))))) 執行範例: 先畫一條spline, 其長度約1000以上, 執行 meas 輸入分段長度:0 3@200 2@150 <enter> 輸入Offset:-100 輸入extend:200 選取曲線: OK 目前這是個非常陽春的曲線分段程式,並無設定起點功能, 只要加入check指定起點是否為曲線起點就可以了, 如果為否就令 CumList = 曲線長 - CumList 即可, 不過 Visual Lisp 有一點很奇怪的地方, 就是 ActiveX 裡面 polyline 有 length property, 可以用 (setq Curve-Len(vla-get-length Curve-obj)) 取得。 但是 Spline 卻沒有 length property, 故 spline 的曲線長必須改為下式: (setq Curve-Len(vlax-curve-getDistAtParam curve-obj (vlax-curve-getEndParam curve-obj))) 這點真是夠了,連 spline 的曲線長都和 ls 指令不太相同。 -- 小弟初學 Lisp 若有寫錯請見諒! --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.200.130 ※ 編輯: suny999 來自: 118.169.200.130 (05/29 14:59)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP