2022年12月20日 星期二

CTP_曲線轉聚合線的簡化曲線程式

程式名稱 : CTP.vlx

載入指令 : (load "CTP")

執行指令 : CTP


************************************************************************

請輸入 CTP, 以執行簡化特定曲線 ELLIPSE, SPLINE, LWPOLYLINE, POLYLINE 的頂點數量.

************************************************************************


簡化特定曲線 ELLIPSE, SPLINE, LWPOLYLINE, POLYLINE 的頂點數量 v1.0

原始程式 11A.LSP ->> ALP.VLX -->>> CTP.VLX

程式設計 

開始日期 2009/3/25 11A.LSP

版本說明

此程式較適用於圓滑的曲線, 不適用於 [ 直線, 尖角 ] 較多的曲線.  因為原 11A.LSP 程式的目標是將曲線轉換成以 [ 圓弧 ] 為主的聚合線. 無法在轉換當中, 再加上直線/圓弧的判別條件. 因此在明顯尖角的區域, 轉換會失真. CTP.VLX 針對這點, 補上縮減看似直線的頂點數.

明顯/直覺是圓形的曲線, 可直接按 ENTER 將曲線用最少的點數畫聚合線. 內定等分數由 2 開始.

程式在曲線圖層和目前作用圖層名稱一樣時, 會刪除原曲線; 所以, 先將圖層和曲線所在圖層避開, 可以保留曲線, 並在目前的圖層畫出簡化的聚合曲線. 簡化的聚合線可以和原曲線比對.

CTP 為預覽式的縮減頂點程式. 以 +, -, *, /, 輸入等分值, 來調整縮減曲線的等分數, 同時預覽縮減曲線和原始曲線間的差距.  + >> +1, - >> -1, * >> +10, / >> -10, 目前等分值所得曲線和原曲線相差很大時, 可直接輸入 200, 300, 600,... 等較大的等分數值, 再按 +, -, *, /  來做微調.

 Auto CAD 的版本為 2010 以後的版本, 且目前圖形檔內存在 雲形線, 此程式會自動提示, 是否要將雲形線轉為聚合線.內定轉為圓弧為主的聚合線.

若單一條曲線內有多處看似直線, 建議先執行 (PLL) 縮減 近似直線 的頂點數量; 再執行 (BPD) 將單一曲線在每個尖角處分段.

或 執行 (BPL) 將曲線中, 長度值 大於 最短線條 長度 的 直線段, 在 中間頂點 分段.

 [ 最小度數 ] >> 曲線上的三個連續頂點 VT1, VT2, VT3, 夾角為 VT1->VT2 向量, 和 VT2->VT3 向量 之間的角度. VT1 >> VT2 >> VT3 三點共線時, 夾角為零. VT1 為起始點, VT2 為中間點, VT3 為三點的終點, 三點是有順序的排列. 當 VT1, VT2, VT3 三點接近共線時, 可刪除點 VT2, 剩下 VT1, VT3 則變為直線, 下三個頂點 VT3, VT4, VT5,再來判斷是否和 VT1, VT3 同角度, 如果是, 可再消點......

重覆的執行 (PLL) -> (BPD) 或 (BPL) -> (PLL) -> (BPD) 或 (BPL) ->..., 除了縮減頂點數量, 將單一曲線在尖角點分段外, 還將只有兩頂點, 且凸度為零的聚合線轉畫為 直線, 並移到 noprint 圖層. 這樣就不會一再重複選到看似直線的聚合線, 且不斷對它們執行縮減程式.

善加利用 (PLL) , (BPD), 和 (BPL) 這三個小程式, 可以讓複雜的單一曲線, 簡化為多條圓滑的曲線, 並將 直線段 轉成 圖層為 noprint 的 直線 圖元, 排除在選取曲線外, 這樣做, 可以提供 CTP 選到最圓滑的曲線, 來轉畫為 最少頂點 的 聚合線.

(CS)  的功能則相反, 是將看似單一曲線的相連的 直線 和 圓弧, 聚合線, 雲形線 ..., 鏈接成單一條聚合線的曲線. 此程式, 有可能鏈接多條曲線在一個共同交點上. 鏈接而成的曲線最好為圓滑的曲線, 以方便 CTP 做後續的簡化曲線處理.

2014.09.12 Ya-Kuei 用 11A.LSP 原始 AUTOLISP 程式修改而來

2014.09.13 modified

2016.06.08 Ya-Kuei 用 ALP.LSP 原始 AUTOLISP 程式修改而來

2016.06.20 modified, 加入 (PLL), (BPL) 的輔助副程式.