2026年4月14日 星期二

[AutoTower] 檢核與除錯

 

自動檢查邊距(Edge Distance)

輸入角鋼寬度與螺栓準距,如果螺栓孔太靠近邊緣,程式就發出警告。


尺寸標註

鐵塔的尺寸標註,數值大都是經過四捨五入後的整數,在細部尺寸加總後,不一定會剛好等於構件長度,因此需要核對這兩部分是否長度相等。


統計數量

2D作圖時,構件、鐵板和螺栓的倍權有可能會設置錯誤,以至於影響數量的正確性。

2026年4月12日 星期日

[AutoTower] 輔助作圖

在從事鐵塔繪圖時,常常會需要先畫出特定的輔助線,才能決定決定正確位置。


輔助線

atPtToPer.lsp  從一交點畫一條垂直線到其它直線。線條圖層「Defpoints」。

atPtToPerO.lsp  從一交點畫一條垂直線到其它直線,然後加做偏移複製。線條圖層「Defpoints」。

atOffsetDef.lsp  畫出平行線。線條圖層「Defpoints」。適用於輔助標示出螺栓間距。


變更線型

atSideToHidden.lsp  根據一條邊界線,把其中一邊做出隱藏線。適用於角鋼被鐵板遮蔽處。

2026年4月11日 星期六

[AutoTower] AutoCAD 物件資料

AutoCAD 物件,大略可區分為圖形物件與非圖形物件。圖形物件是以 DXF 群碼方式為架構。 

AutoCAD 建立圖形物件的指令,在不同版本間不盡相同。因此如果 AutoLISP 程式使用 AutoCAD 基本繪圖指令來建立圖形,有可能會產生錯誤,這一點值得注意。

因此,使用非 AutoCAD 基本繪圖指令,也就是使用 DXF 群碼來建立圖形,應該是較為明智的。


圖形物件 DXF 群碼

POINT

LINE

CIRCLE

ARC

ELLIPSE

XLINE

RAY

POLYLINE

POLYGON

RECTANG

REGION

HATCH

TEXT

MTEXT

BLOCK

TABLE


建立圖形物件


非圖形物件 DXF 群碼


建立非圖形物件

2026年4月10日 星期五

[AutoTower] 事件反應器

 當繪圖員做了哪些事,進而觸發事件反應器時,AutoTower系統似乎就可以因應做些甚麼。


[AutoTower] 尺寸標註

同一張圖面,因應實際需求,會有不同大小比例或不同標註形式的尺寸。因此需要預先設定多款標註型式。


標註比例

因應不同圖面單位與比例,需要設定不同的標註比例。


匯出與匯入標註型式

把舊有圖面的標註型式匯出成為標準檔案,然後在新的圖面中匯入,成為可用的標準型式。

提醒:在開始一個新的圖面時,最好先匯入標註型式。


預設的標註型式

Standard


尺寸文字避讓

在狹小的間距標註尺寸,會讓尺寸數據顯得擁擠,因此需要手動或程式自動避讓。

在不同的標註用途與標註型式下,因地制宜可以設定一個「避讓係數」:

  • 主材標註:文字固定向外推 80 單位。

  • 斜材標註:文字依斜率方向偏移。

  • 螺栓孔位:文字垂直於準距線彈開。


內部子程式

(at_DimCStyGet)    取得目前標註型式  RETURN "(目前標註型式)"

(at_DimCStySet  styleName)    設定目前標註型式

(at_DimDetails ent)    提取標註物件的所有關鍵變數

(at_dimStyUpdate sl styleNew)    將新的標註型式套用到物件

(at_DimOffset ent ang dist)    錯開標註文字位置

(at_dimSmart style p0 rt ps strDist)    標註尺寸


外部指令

atDimExport.lsp   匯出目前圖面的標註型式,檔名 "C:\\AutoTower\\User\\_DimStyle.dwg"。

提醒:標註型式名稱為中文的,將無法匯出與匯入。

atDimImport.lsp   匯入標註型式到目前圖面

atDimStyDup.lsp  套用標註型式

atDimOffset           將標註的文字錯開位置



[AutoTower] 線型

 


預設的線型



整體線型比例



物件線型比例


2026年4月9日 星期四

[AutoTower] 錯誤處理

 

*error*


AutoLISP 程式語言神奇之處,是可以把 '函式' 當作參數。

  • vl-exit-with-error  將控制從 VLX 錯誤處理器傳遞給調用它的名稱空間的 *error* 函數

2026年4月6日 星期一

[AutoTower] 文字型式

舉凡鐵塔設計尺寸,構件編號、規格、長度、尺寸標註,鐵板編號、規格,螺栓規格、數量和其它註解...等,都跟文字型式有關。


建立標準文字型式

大原則,依需求建立。

分析、歸納與定義。

利用AutoCAD原有的指令建立文字型式。


在實務上,字型寬度有可能設定到 0.7,所以同一種字型似乎可以如下這樣建立:

尺寸線-大

尺寸線-中

尺寸線-小

構件編號

構件規格

構件長度

單線10

單線09

單線08

單線07


利用程式將繪圖區內已建立之許多文字型式儲存到外部檔案,作為標準字型。


如何使用

程式需要使用到字型時,先偵測特定字型是否存在,如果不存在,則從外部檔案讀入字型。


自訂變數

構件編號字型  --  "StlNoTextStyle" "構件-編號" "STR" "RW" "構件編號字型")

規格  --  ("StlSpecTextStyle" "構件-規格" "STR" "RW" ""構件規格字型")

長度  --  ("StlLenTextStyle" "構件-長度" "STR" "RW" "構件長度之字型")

尺寸標註

鐵板編號

規格

螺栓規格

數量

其它註解


文字型式管理員

1. c:atTxtStyExport 可以將目前圖面內的文字型式匯出成 "_varTextStyle.txt " 檔,其內容格式如下:

; AutoTower 自動生成,請勿手動編輯此文件

; 字型名稱  字體檔名  長寬比

("標準-07" "Arial.ttf" 0.7)

("單線-1"  "simplex.shx,chineset.shx" 1.0)


2. (at_TxtStyImport) 可以讀取外部 "_varTextStyle.txt " 檔,將文字型式匯入到目前圖面內。


系統開發與管理建議

在處理鐵塔2D佈樣與各種構件標註時,這套解決方案有幾個可以進一步優化或考量的面向:

1. 建立字體缺失的防呆機制 (findfile) 在匯入字體時,如果使用者電腦缺少特定的 .shx.ttf 檔案,AutoCAD 會彈出警告或自動以替代字體取代,這可能會導致斜率標註或構件編號的排版跑位。您可以在 entmake 之前,加入 (findfile fontFile) 的檢查。如果找不到字體,可以透過警示訊息提醒使用者,或者在程式內部自動降級(Fallback)使用如 txt.shx 等系統預設字體。

2. 與您現有的 DCL 介面整合 您可以將匯入文字型式的功能整合到參數輸入介面(DCL)中。例如,在啟動 AutoTower 佈樣程式時,自動在背景讀取這個 .txt 檔並載入必要的文字型式;或者在 DCL 面板中提供一個下拉選單,讓使用者根據不同業主(例如台電或其他客戶)的規範,一鍵切換整套「標註配置檔」。

3. 考慮註解性文字 (Annotative Text) 不同於一般的機械圖,鐵塔佈樣圖面中常會有大量極微小的細節與巨觀視圖的切換。如果您未來希望在不同的視埠(Viewport)比例下,構件編號與規格文字都能保持一致的列印字高,可以考慮在建立文字型式時加入註解屬性(Annotative)。不過這會牽涉到延伸字典(Extension Dictionary)的建立,會比上述純 DXF 碼複雜一些,通常搭配樣板檔(.dwt)會是比較簡單的作法。

4. 擴充文字對齊與圖層屬性 目前的 .txt 格式只記錄了「名稱、字體、長寬比」。未來若有需要,您的格式還可以擴充加入「預設圖層 (Layer)」與「文字高度 (TextHeight)」。例如:標註構件編號時,程式不僅幫使用者切換到正確的字型,還同時將該文字鎖定於指定的圖層中,這會大幅提升出圖管理的效率。

2026年3月31日 星期二

[AutoTower] 可用資源

VisualLISP IDE

VisualLISP教學影片

VisualLISP教學

LEE MAC

AfraLISP

AutoCAD 2022 Help(英文)

AutoCAD 2022 Help (簡體中文)

VL 函數

在 VsCode 裡發展 AutoLISP





[AutoTower] 關於塔身

 


名稱定義



塔身截面

塔身截面型式

從塔身截取斷面寬度

插入塔身截面基點



[AutoTower] 橫擔



橫擔型式

橫擔有多種型式,如果要考慮到每一種型式都做到完善,需要耗費不少時間,可選擇幾款比較常見的型式來「操練」,進而從其中了解相關知識。

橫擔三面:平面、立面和斜面。


名稱定義



從塔身到橫擔

橫擔可以視為塔身的手,以這個概念來規劃橫擔該如何寫程式。


橫擔需要哪些資料從塔身傳遞過來

塔身截面寬度

主柱規格、Gauge

橫擔主材鐵板厚度


橫擔基本資料

橫擔型式

橫擔寬度



橫擔基點

每一個橫擔平面都需要一個基點作為繪圖的依據。

橫擔截面基點名稱:GW、C1、C2...

橫擔平面東、南、西、北側基點名稱:GW-PE、GW-PS、GW-PW、GW-PN

橫擔立面東、南、西、北側基點名稱:GW-EE、GW-ES、GW-EW、GW-EN


橫擔立截面



圖層規劃

南北向的橫擔,在放樣時可能線條會重疊,或許可以利用圖層來區別它們,或是將整個橫擔平面移動到旁邊。然而,如果上述兩者都做,應該會讓繪圖者更加方便。

圖層規劃需同時考慮到放樣圖、詳細圖、裝建圖和鐵板圖之使用。

以橫擔部位來作為圖層首碼,在於必要時方便選取並移動該圖形。

圖層名稱                顏色

GW-放樣

GW-詳細圖

GW-裝建圖

GW-構件-編號球

GW-構件-規格

-


2026年3月23日 星期一

[AutoTower] 斜率與基線

正確的斜率可以將空間中鐵塔側面 '攤平' 在地表或是 2D 繪圖面,以利於放樣出實際長度。

基線是鐵塔放樣的依據,一切尺寸都從這裡開始,基線一旦錯了就一切前功盡棄。


鐵塔設計資料

梯形有上寬、下寬、垂高、主柱彎曲點偏移距離,就可以計算出斜率。

若像是繼塔或塔腳,只知道梯形上寬和垂高,該如何計算出下寬和斜率? 

由基點的塔體部位屬性值,就可知道這個基點是UPPER、LOWER、幾米塔身或幾米繼塔!


問AI:

輸配電鐵塔的塔身是一個3D楔形體,然而在AutoCAD實施鐵塔放樣時需要把這個楔形體的立面側邊「放倒貼平」到地面,才能進行2D放樣。

我需要你幫我寫一個Autolisp DCL程式,可以輸入塔身資料,例如

頂部偏移

垂直高度

底部偏移

頂部寬度

底部寬度

鐵塔斜率(button)+(editbox)


程式產生之資料

        以下由程式產生之所有圖形物件皆放置於圖層「基線」。

基線名稱

一次斜率

基準點

中軸線

上寬線

下寬線

左斜線

右斜線


名稱唯一與多個名稱之間的關聯性

一個基線梯形一個唯一的名稱。

上塔身、下塔身、繼塔們與塔腳們都有其各自的基線梯形。

需要定義他們之間的關聯性。


作用基線

雖然有多個基線,但「作用」基線只有1個。


基線與 'Handle'

記住基線的每一根線的 Handle,有利於讓程式運算相對位置。 

變數 at$BLHandle

值    '(("基線名稱" "N/A")

          (" 一次斜率" "1000.438")

          ("基準點Handle"  "N/A")

          ("中軸線Handle"  "N/A")

          ("上寬線Handle"  "N/A")

          ("下寬線Handle"  "N/A")

          ("左斜線Handle"  "N/A")

          ("右斜線Handle"  "N/A"))


節號、節距與節型


多種高度的下塔身


多種高度的繼塔


多種高度的塔腳

塔腳的節型與塔身不同,需要另外處理。


鐵塔的戶口名簿

        鐵塔各部位的組合關係應該可以參考戶口名簿記載的方式來處理。上下位置可視為兄弟姊妹關係,內外位置可視為父母子女關係。

本人姓名

父母姓名

兄姊姓名

子女姓名

弟妹姓名


在圖塊屬性內有一欄位「關係」,其值為 "本人姓名,父母姓名,兄/姊姓名,子/女姓名,弟/妹姓名"

上述概念是否適合於用來表述塔體各部位之關係?


塔體圖塊  BlockName = "BasePoint_Body"   (圖層 = "基線")

屬性名稱       值    (圖層 = "Defpoints")

鐵塔名稱 = "PP-4JP"

塔體名稱 = "Lower"

接續自 = "Upper"

居內於 = "  "

低降垂距 = "  "

梯形資料 = "頂端寬度, 底端寬度, 垂直高度, 彎曲偏移, 一次斜, 二次斜"

基線Handle = "中軸線, 頂端線, 底端線, 左端線, 右端線"

節距 = "起始編號, 節距1, 節距2, 節距3, ..."

節型 = "   "

主柱規格 = "L90x7,L100x7..."

接續方式 = "(無),外搭,外搭,內搭,對接..."


塔腳圖塊  BlockName = "BasePoint_Foot"   (圖層 = "基線")

屬性名稱       值    (圖層 = "Defpoints")

鐵塔名稱 = "PP-4JP"

塔體名稱 = "10M FT"

接續自 = "  "

梯形資料 = "頂端寬度, 底端寬度, 垂直高度, 彎曲偏移, 一次斜, 二次斜"

左米數 = "3,4,5,6"

左基線Handle = "中軸線, 頂端線, 左端線, 右端線"

右米數 = "4,5,6,7,8"

右基線Handle = "中軸線, 頂端線, 右端線, 左端線"


================================================

我們來一步步推導這個「放倒貼平」的幾何公式。為了方便討論,我們假設鐵塔的這個節間(Section)是一個正方形截面的對稱截角方錐體。

1. 定義已知變數(來自圖面上的資訊)

在看鐵塔的正視圖或側視圖時,我們通常能直接取得以下數據:

  • $H$:該節間的垂直高度 (Vertical Height)。

  • $W_b$:該節間的底部寬度 (Bottom Width)。

  • $W_t$:該節間的頂部寬度 (Top Width)。

從這些已知數據,我們可以先算出單側的水平內縮量 ($\Delta W$)

$$\Delta W = \frac{W_b - W_t}{2}$$

在傳統的正立面圖上,主腳材的投影斜率 ($m_{proj}$) 就是水平內縮量與垂直高度的比值:

$$m_{proj} = \frac{\Delta W}{H}$$


2. 計算關鍵轉換參數:斜面實高 ($H_s$)

這是「放倒貼平」最核心的一步。

鐵塔的側立面是一個向內傾斜的等腰梯形。當你把它以底邊為軸心,往下「放倒」並與地面平行時,這個梯形的底邊 $W_b$ 和頂邊 $W_t$ 長度都不會改變。唯一改變的是這個梯形的「高度」。

在 3D 空間中,這個面的實際高度(也就是沿著傾斜面量測的中心線長度,我們稱為斜高 $H_s$)會大於垂直高度 $H$。根據畢氏定理,斜面實高是由垂直高度與單側內縮量構成的:

$$H_s = \sqrt{H^2 + \Delta W^2}$$


3. 推導「放倒貼平」後的 2D 幾何公式

現在,我們已經把那個傾斜的 3D 側面,轉換成了一個平躺在 2D 平面上的等腰梯形。

在這個放平的梯形中:

  • 底邊寬度 = $W_b$

  • 頂邊寬度 = $W_t$

  • 梯形高度 = $H_s$

  • 單側水平內縮量 = $\Delta W$ (放平後,橫向的內縮量並未改變)

這時候,我們就可以推導出放樣所需要的實面斜率真實夾角了:

A. 實面放樣斜率 ($m_{true}$)

在 2D 放樣圖面上,主腳材的斜率變成了橫向內縮量與「斜高」的比值:

$$m_{true} = \frac{\Delta W}{H_s} = \frac{\Delta W}{\sqrt{H^2 + \Delta W^2}}$$

(你會發現,$m_{true}$ 必定小於立面圖上的 $m_{proj}$,這代表放倒後的主腳材看起來會「稍微沒那麼斜」)

B. 主腳材與垂直中心線的真實夾角 ($\theta_{true}$)

這決定了斜材與主材交會時的真實角度:

$$\theta_{true} = \arctan\left(\frac{\Delta W}{H_s}\right)$$

C. 主腳材與水平構件的真實夾角 ($\alpha_{true}$)

這通常用於角鋼端部的切角加工:

$$\alpha_{true} = \arctan\left(\frac{H_s}{\Delta W}\right)$$


💡 驗證:這樣推導出來的主腳材長度是對的嗎?

我們可以用 3D 空間的距離公式來驗證這個 2D 推導是否正確。

在 3D 空間中,鐵塔角落的主腳材會同時在 X 軸和 Y 軸內縮 $\Delta W$,並在 Z 軸上升 $H$。所以主腳材的 3D 空間實長 ($L_{3D}$) 為:

$$L_{3D} = \sqrt{\Delta W^2 + \Delta W^2 + H^2} = \sqrt{2\Delta W^2 + H^2}$$

現在看我們剛剛「放倒貼平」的 2D 梯形。這個梯形的斜邊(也就是主腳材)長度 ($L_{2D}$),是由水平內縮量 $\Delta W$ 和梯形高度 $H_s$ 構成的直角三角形斜邊:

$$L_{2D} = \sqrt{\Delta W^2 + H_s^2}$$

把前面推導的 $H_s = \sqrt{H^2 + \Delta W^2}$ 代入:

$$L_{2D} = \sqrt{\Delta W^2 + (H^2 + \Delta W^2)} = \sqrt{2\Delta W^2 + H^2}$$

$L_{2D} = L_{3D}$

數學完美地吻合了。這證明了只要把原本立面圖的高度 $H$ 替換成斜高 $H_s$,畫出來的 2D 梯形,其斜邊長度就是主腳材真正的長度,而在這個 2D 梯形裡面畫出的任何斜材(Diagonal members),量出來的長度與角度,也都會是百分之百準確的加工實長與實角。

有了這些公式,下一步無論你是要在 AutoCAD 裡手動輸入相對座標畫圖,還是準備寫 Python 腳本讓它自動讀取 $W_b$$W_t$$H$ 然後生成 2D 展開圖,邏輯都已經打通了!


2026年3月22日 星期日

[AutoTower] 關於螺栓

 

定義

怎樣的圖形物件,才能被程式識別為螺栓?

註冊的螺栓圖塊

位於特定圖層內特定直徑的Circle?


螺栓規格(公制與英制)


螺栓圖塊


螺栓比例


螺栓數量與長度


引線


腳踏釘




[AutoTower] 關於鐵板

 

鐵板的外觀沒有固定的形狀,需等待設計放樣後才能裁切出板型。


定義


鐵板規格



鐵板厚度



鐵板編號

因材料表將鐵板編號與扁鐵編號放在一起,所以這兩者需要同時討論。


型板

鐵板上有螺栓孔,在製作型板時,須把螺栓比例回復為1:1。





2026年3月21日 星期六

2026年3月20日 星期五

[AutoTower] 快速增強鐵塔設計部門的實力

欲速則不達,採六階段式增強。


階段一 -- 實施標準化

目標:實施標準化,以達到快速畫出標準一致的圖面與報表。

基本數據 -- 例如鋼鐵規格、鐵塔放樣準則...等。

基本圖形 -- 標準圖紙、常用圖塊...等。


階段二 -- 加快繪製詳細圖與裝建圖的速度

繪製角鋼

放置螺栓

處理鐵板

快速出圖


階段三 -- 統計數量與製作材料表

AutoCAD 數量傳到 Excel 材料表。


階段四 -- 放樣與繪圖自動化

基線

塔身主柱

斜材

橫擔

塔腳


階段五 -- 加強 AutoCAD 與 Excel 的溝通

VisualLISP

C#

Python


階段六 -- 應力圖

AutoCAD 與 Excel 資料雙向維護。

[AutoTower] 如何寫一套基於 AutoCAD 的 AutoTower 鐵塔繪圖軟體

大原則是,依據現有資料與需求量身打造。

觀念必須改變,畢竟手繪與程式自動繪圖有很多地方不一樣。


鋼材基本資料

    角鋼 -- 等邊角鋼與不等邊角鋼。

    鐵板 -- 材料表需注意不同材質。

    螺栓 -- 公制 M16、M20、M22、M24 等;英制 5/8"、3/4"、7/8"、1" 等。

    腳踏釘


鐵塔基本資料

    電壓

    型式

    部位

    高度與寬度

    節距

    彎曲點


鐵塔規範


設計資料

    基線

    主柱

    塔身

    橫擔

    繼塔

    塔腳


輸出需求

    應力圖

    詳細圖

    裝建圖

    Excel材料表


實作順序

1. 型鋼基本資料、鐵塔放樣規則、程式基本常數與變數之管理。

2. 繪圖單位與比例,圖紙與圖框。

3. 斜率三角形與基線梯形。

4. 放置螺栓、書寫螺栓數量長度。

5. 書寫構件規格、長度與插入編號。

6. 繪製角鋼。

7. 書寫鐵板規格與插入編號。

8. 放置主柱。

9. 放置斜材角鋼。


11. 橫擔。


優先建立的幾個開發邏輯

  1. 資料結構化 (Data Driven): 鐵塔的節間(Panel)通常是有規律的。建議你建立一個 List 來儲存塔身的寬度與高度。

    • 例如:'((Height . 3000) (TopWidth . 1200) (BottomWidth . 1800))

    • 這樣在繪圖與標註時,只需調用這個清單,就不需要手動輸入座標。

  2. 標註型式自動化: 鐵塔圖面通常包含「零件圖」與「組裝圖」。零件圖需要極精確的標註(如:螺栓孔位),組裝圖則需要較大的字體。

    • 建議在 SmartDim 執行前,加入我們之前討論的標註型式切換功能。

  3. 座標運算子 (Helper Functions): 鐵塔充滿了「斜線」。建議你寫一些專門計算塔身斜度(Slope)與斜撐長度(Bracing length)的微型子程式。

    • 例如:給定高度與上下寬差,自動算出斜材的角度。

[AutoTower] 編號之管理

編號之管理會牽涉到材料表,需謹慎為之。


定義

有哪些東西需要編號?

分類需考慮材料表。


編號類型

    構件

    鐵板

    扁鐵


編號球外觀

為方便程式運作,需先分類。

構件編號球 -- 圖層(構件-編號)

stlNobA   01=圓形    02=虛線圓形    03=雙圓

stlNobB    01=頂綴圓形

stlNobC    01=上半圓實線+下半圓虛線


鐵板編號球 -- 圖層(鐵板-編號)

plNobA    01=頂綴圓形    02=頂綴虛線圓形    03=頂綴雙圓

plNobB    01


扁鐵編號球 -- 圖層(扁鐵-編號)

fpNobA    01=頂綴圓形    02=頂綴虛線圓形    03=頂綴雙圓

fpNobB    01


編號之維護


atStlNobType.lsp  設定構件編號球外框型式。

atStlNoIns.lsp  插入構件編號。

atStlNoEdit.lsp  修改編號內容。


atTextAdj.lsp  調整文字寬度,可用於調整編號文字寬度。

atNoList.lsp  構件編號、鐵板編號...列表,一併列示最大與最小編號。



[AutoTower] 畫出怎樣的螺栓才能方便統計數量

        一般在繪製施工圖面時都是以 2D 繪製,但你總是會有一個夢想,想要在繪製完施工圖時也能同時知道螺栓的數量。


2D 圖面如何因應 3D 世界?

        解決的方法大概就是點名作記號了。

Xdata

屬性與倍權


BOM 格式


分類

    部位 -- 上塔身、下塔身、繼塔、塔腳...。

    規格 -- M16、M20、1/8"、1/4"...。

    螺帽 -- 單螺帽或雙螺帽。

    材質 -- A36 或其它。

    配件 -- 像是墊圈之類的。

[AutoTower] 自訂介面


AutoCAD 標準介面 

    Menu

    Toolbox

    ScreenBar


自訂介面

    用程式操作 AutoCAD 標準介面


    自訂交談式介面 (Dialog Control Language)


    繪圖區介面


    VBA介面


    C介面


    Python介面

[AutoTower] 你想要畫出一支怎樣的角鋼

    看似平凡無奇的一支角鋼,麻雀雖小卻五臟俱全,細究起來要注意的事還真是不少。


定義

甚麼是角鋼? 怎樣的東西才是大家認可的角鋼? 除了你認可之外,最好也能讓程式認可。

被程式認可的角鋼,維護起來會比較容易,而且在統計數量時也才會正確。

那麼,角鋼該如何定義呢?

可以用「圖層」? 或是在線條內加上Xdata?

是否需要把一群 '鬆散' 的線條 'Group' 在一起?

在鐵塔的材料表裡,作為構件的除了角鋼之外還會有其他類似 H型鋼或圓管之類的材料嗎?


角鋼本體

定義

    位於「構件-物件」圖層內的線段。


拉線孔

肉厚線

Gauge 與 Pitch

加工

加工後外觀多樣,程式有必要分開處理嗎?

    直條形角鋼

    多彎折角鋼


螺栓

定義

    位於「螺栓-M16」圖層內的圖塊。

    圖塊名稱為「       」。


螺栓規格、直徑、長度、材質與數量

螺帽與墊片


角鋼編號

定義

    位於「構件-編號」圖層內的文字。

    文字內容不限制。


單支

前後雙支


角鋼規格

定義

    位於「構件-規格」圖層內的文字。

    文字內容必須符合鋼鐵規格。


角鋼長度

定義

    位於「構件-長度」圖層內的文字。

    文字內容必須符合 '('  + 數值 + ')' 之格式。


加工符號

定義

    位於「構件-加工」圖層內的圖塊。

    圖塊名稱為「       」。


尺寸標註

定義

    位於「構件-尺寸標註」圖層內的標註。    


加強的自動化


自動識別角鋼開口朝向

    設立一個開關,在繪製立面時旗標為 1,其它時候旗標為 0。

at$TowerView  0 = 平面   1 = 立面


自動識別肉厚是實線還是虛線

    在塔身立面處之角鋼斜材外觀呈現 "X" 形,通常右斜( / ) 角鋼的肉厚都是實線,而左斜 ( \ ) 是虛線。此處可以考慮設立一個開關,是否要自動處理或是詢問後處理。


一次畫出 "X" 的角鋼

    在塔身立面處之角鋼斜材外觀呈現 "X" 形,此處可以考慮設立一個開關,或詢問是否要一次畫出 "X" 外觀的角鋼。

或許可以同時剪除被遮住處的線條。


程式需要斜率與基線之中線,來計算出角鋼交叉處之交點。

如果尚未有基線之中線,則可以自行指定。


在交叉處自動加入螺栓孔

    在塔身立面處之角鋼斜材外觀呈現 "X" 形,在其交叉處會需要放置一個螺栓,此處可以考慮設立一個開關,或詢問是否要插入螺栓。


要畫出一支怎樣的角鋼才能統計數量

        角鋼本體與編號、規格、長度...如何關聯?




[AutoTower] 自訂變數

    有別於 AutoCAD 變數,自訂變數對於自己寫的程式來說特別重要,尤其是要寫一整套的外掛(3rd Party Program)。

    AutoCAD 是一套通用型繪圖系統,它並沒有為使用者特別制定繪圖時的單位與比例,有的只是 1 單位,而這個「單位」可以是 1inch、1mm 或 1cm...。

    想要寫一整套的外掛程式,就得對圖紙單位和比例加以設定與管理,尤其是在一個模型空間中同時擁有不同繪圖單位與比例尺的圖面。每一張圖紙都有它自己的繪圖單位與比例尺,但模型空間只有一個,此時就需要自訂變數,好讓程式們在運作時畫出適當比例的圖形。

    在 AutoCAD 裡的自訂變數與一般程式 (例如 C 或 Python) 的變數大同小異,如果你會寫程式,那麼一些觀念都可以應用到這裡。


AutoCAD 變數類型

整數(Integers)
實數(reals)
字符串(Strings)
列表(lists)
選擇集(Selection sets)
實體名(entity names)
vla對象(VLA-objects)
文件描述符(file descriptors)
符號和變量(Symbols and Variables)


自訂變數類型

項目自然繼承自 AutoCAD,但似乎可以精簡一些。



預定義的常數

AutoCAD 常數 0 或 PI 可以用來表示 0度和 180度,但在程式裡使用到其他角度的機會也很多,例如 90 度、270度...之類的。你應該不會寫上數萬次諸如下列的語句吧?

(setq 90deg (* PI 0.5))

(setq 270deg (* PI 1.5))

此時你應該可以想到這麼做,在主程式裡寫上

(setq 90deg  (* PI 0.5))        

        270deg (* PI 1.5)

)

在啟用 AutoCAD 時順便將其載入到記憶體,然後你就可以用 90deg 和 270deg 來代表 90度和 270度了。


再例如,你也可以將所有角鋼規格設為預定義常數,例如

(setq StlAngle ("L45x4" "L60x5" "L75x6"...))

(setq StlAngle ("L45x4,R,W" "L60x5,R,W" "L75x6,R,W"...))


管理自訂變數

建立變數名稱的規則

全域變數的優點是存取方便快速,但具有被其他使用者 '汙染' 的風險。以全域變數名稱「DwgScale」為例,你存放的值是「30」,而後來他人程式存的值是「1:30」,接著你再取出來用,此時將會造成不可預期的後果,不是變數的型態錯誤就是變數值超過範圍。解決的方式是在你的變數名稱加入前綴字元,例如 'at$'。

儲存在圖面字典裡的變數會跟著圖面走,它雖然不像全域變數那般方便存取,但卻具有不被其他使用者 '汙染' 的風險。你可以將

'AutoTower' 命名為字典名稱,除非他人也同樣使用 'AutoTower'  這個字典名稱。

外部檔案可以讓使用者直接修改變數值,它最大的風險是檔案內容被改到壞掉,變成格式錯亂或無法取檔案。

像 AutoCAD 那樣擁有管理自訂變數的指令

(at_varSet   var   val)  存入變數

(at_varGet   var   val   filename)  取出變數

c:atVarManager 可以管理數個變數檔案。


實作

在開發 AutoCAD 第三方軟體時,為了避免「寫死」(Hard-coded)參數並兼顧使用者的修改便利性,通常會採用層級式管理

以下是針對您的需求,建議的儲存位置選擇以及資料存取流程:


1. 自訂變數的儲存位置選擇

根據資料的性質(是屬於「個人偏好」還是「圖面規範」),通常會分開存放:

A. 外部檔案(設定檔):適合「全域參數」

這類變數與特定圖檔無關(例如:公司標準圖層名稱、零件路徑、UI 顏色)。

  • 格式: 建議使用 JSONXML(Lisp 可搭配 VL-FILENAME-BASE 讀取,Python 則有內建模組)。

  • 優點: 繪圖者可以直接用記事本修改,不需打開 AutoCAD。

  • 管理: 存放在軟體安裝目錄或 AppData 使用者資料夾下。

B. 命名物件字典 (Named Object Dictionary, NOD):適合「圖面參數」

這類變數隨 DWG 檔案保存(例如:這張圖的比例、特定計算結果、輸電塔的坡度參數)。

  • 機制: 在 DWG 內部的隱藏資料庫中建立 XRecord

  • 優點: 繪圖者在介面上看不到,不會誤刪,但程式可以隨時讀取。

  • 存取: 透過 (dictsearch (namedobjdict) "MY_APP_VAR") 存取。

C. 圖元擴展資料 (XData):適合「對象參數」

當變數必須綁定在某個特定的「物件」(如某根電桿、某個圖框)時使用。


2. 變數存取與回存的順序邏輯

為了確保靈活性與正確性,建議採用以下**「優先級讀取順序」**:

第一階段:啟動與載入 (Loading)

  1. 讀取預設值: 程式內部定義一組最基本的 Default 值(防錯機制)。

  2. 讀取外部設定檔: 覆蓋預設值,取得使用者的全域偏好。

  3. 掃描圖面字典 (NOD): 如果該圖檔已存在舊有的設定,以此為準(因為這代表該圖檔的特定規格)。

  4. 存入記憶體 (Global Variables): 將最終決定的數值存入 Lisp 全域變數或 Python 物件中,供指令執行時快速調用。


變數讀取順序:
程式預設值 > 如果全域變數為真則取代預設值 > 如果圖面字典為真則取代預設值 > 如果外部檔案為真則取代預設值 
(defun at_varGet  (變數名稱  預設值  外部檔案) ...

變數儲存順序:
同時儲存到全域變數和圖面字典。
(defun at_varSet  (變數名稱  值) ...

外部變數檔案管理:
使用交談框存取檔案。
(defun c:atVarManager () ...


第二階段:執行與互動 (Interaction)

  1. 顯示對話框 (DCL): 將目前的變數顯示在 UI 上。

  2. 使用者修改: 繪圖者在介面上即時調整。

  3. 暫存變數: 使用者點擊「確定」後,先更新記憶體中的變數。


第三階段:儲存與同步 (Saving)

  1. 寫回圖面 (NOD): 立即將修改後的參數同步回該 DWG 的字典中,確保存檔後資料不遺失。

  2. (選配)更新外部檔案: 如果使用者勾選「設為往後預設值」,則將數值寫回外部 JSON/XML。


3. 實務建議架構

變數類型儲存媒介使用者修改方式
全域環境設定.json / .cfg 檔案外部編輯器或軟體設定頁面
圖面專屬參數XRecord (Dictionary)程式提供的對話框 (DCL)
暫存運算值Setq / Global Var僅限程式執行期間自動處理

管理技巧:

  • 版本控制: 在儲存資料時,建議多存一個 Version 欄位。當未來軟體升級、變數結構改變時,程式可以判斷是否需要進行資料格式轉換。

  • 防呆機制: 讀取外部檔案或字典時,務必加上 if 判斷,若資料毀損或不存在,需能自動回退 (Fallback) 到預設值。

這樣的方式既保證了程式的靈活度,也能讓繪圖者在不需要接觸代碼的情況下,透過 UI 或設定檔輕鬆完成自訂。


指令

(at_ldataSet "DwgScale" "1:40")    將變數值存入圖檔中

(at_ldataGet "DwgScale")    從圖檔中讀取變數值


at$FnVariable 公用變數的值為 "C:\\AutoTower\\User\\_Variable.txt"

(at_ldataImport (setq fn at$FnVariable))  匯入AutoTower變數

(at_ldataExport (setq fn at$FnVariable))  匯出AutoTower變數:

c:atSetvar   列出所有AutoTower存在圖檔內的變數


[AutoTower] 鐵塔基本資料之管理

電壓 

塔型

分區

節間

塔高

橫擔


匯出與匯入

[AutoTower] 2D圖面物件數量統計之對策


圖塊屬性、「倍權」欄位


XData


不同圖形物件之關聯管理


在 AutoCAD 與 Excel 之間互傳資料

[AutoTower] 圖塊管理

視覺化之圖塊管理員是一個好主意。


圖塊需分類

易於新建、修改、刪除、插入...。

[AutoTower] 圖紙與出圖管理

圖紙與出圖有啥關係?


紙張標準尺寸

A0 - 841 x 1189mm

A1 - 594 x 841mm

A2 - 420 x 594mm

A3 - 297 x 420mm

A4 - 210 x 297mm

E0 - 

E1 -

E2 -

E3 - 

E4 -


標準圖紙

圖紙單位與比例

思考那些東西會受到繪圖單位與比例的影響。直覺化的繪圖環境,受影響之物件應由程式處理。


因應不同繪圖單位和比例,圖形物件常常需要隨著縮放比例大小,我們可以自訂一個常數 at$DwgSc 讓字高乘上這個常數,就是程式需要畫出的大小。

(cond

    ((eq at$DwgUnit "MM") (setq at$DwgSc (* 1 (atof (substr at$DwgScale 3)))))

    ((eq at$DwgUnit "CM") (setq at$DwgSc (* 10 (atof (substr at$DwgScale 3)))))

    ((eq at$DwgUnit "M") (setq at$DwgSc (* 1000 (atof (substr at$DwgScale 3)))))

)


自訂圖框

圖框大小、樣式...因人而異,很難標準化。最好的因應方式是直接使用繪圖者原本的圖框製成程式可用的圖框。以下在說明如何將繪圖者原本的圖框製作成程式可用的圖框。

圖框元素的組成

1. 位於「圖框」圖層內的矩形聚合線,顏色可自訂,可視、可繪出。

2. 位於「圖框」圖層內,矩形聚合線右下角落的「at_SheetAtt」圖塊,它含有屬性。

屬性欄位

名稱    提示   預設值

圖名

圖號

張號

單位                MM

比例                1:30

製圖

日期

備註1

備註2

備註3

備註4

備註5

控制 (用來關聯圖框的欄位,批次出圖)


程式動作

出現交談框,輸入圖名、單位、比例...等資料,選取閉合的聚合線,變更它的圖層到「圖框」,並插入圖塊「at_SheetAtt」。

程式檢核

「圖號 - 張號」需具備唯一性質。


圖紙管理員

圖紙集中管理有利於標準化。


在模型空間批次出圖

給圖紙一個名稱,有利於程式批次出圖。


圖紙命名的規則


目前圖面單位與比例

c:atDwgIni  指定目前圖面單位與比例

c:atSheetBorder 繪製基本圖框

c:atSheetAtt 建立圖框屬性資料





2026年3月19日 星期四

[AutoTower] 圖層管理

在繪圖時,不同特性的線條分屬在不同的圖層,是最佳的狀況,其優點是易於管理,缺點是如果純粹使用基本指令切換圖層並繪圖,將事倍功半。如果使用程式,將可輕易解決上述問題。


圖層的規劃

分類是有必要的。但要如何分類才好? 可以先把需求條列出來。


條列需求:

1. 依使用者需求。

2. 依程式需求。

3. 可易於分組管理,放樣圖、應力圖、詳細圖、裝建圖...。

4. 使用分隔線 ' - ' 來區分父子或從屬關係。


通用 - 0

放樣圖 - 0,放樣圖

應力圖 - 0,應力圖,基線

詳細圖 - 0,詳細圖,標註,螺栓-物件,螺栓-規格,

裝建圖 - 0,裝建圖,螺栓-物件,螺栓-厚度,螺栓-數量長度,螺栓-引線

型板圖 - 0,型板圖,鐵板-物件,鐵板-厚度,螺栓-物件,螺栓-十字線


以螺栓為例:

分析所有的螺栓,大概可區分為不同大小的規格、螺栓十字線...。

因應圖層之切換,其圖層名稱之結構似可編為  

螺栓-M16

螺栓-M20

螺栓-M22

螺栓-M24

螺栓-十字線

螺栓-數量長度

螺栓-引線

螺栓-屬性

墊圈和墊片該如何處理?


以鐵板為例:

鐵板在詳細圖、裝建圖和型板的圖層表現皆不一樣。



以角鋼為例:

分析一支完整的角鋼詳圖,大概有角鋼本體、隱藏線、螺栓孔、螺栓十字線、角鋼編號、角鋼規格、長度、標註線。

角鋼-本體(角鋼背之隱藏線也畫在這裡)

角鋼-編號

角鋼-規格

角鋼-長度


圖層顏色

須注意線條顏色與出圖時線條粗細的關係。


圖層線型

該如何處理圖層線型?


圖層分組管理

使用「LayerState」 指令管理分組之圖層。

「新建」-- 新建一個名稱用來儲存目前圖層狀態。

「設置」-- 快點兩下名稱,即可設置成該名稱的圖層狀態。

「儲存」-- 將目前圖層狀態覆蓋舊有狀態。

「編輯」-- 顯示圖層視窗,手動修改圖層狀態。

「更名」-- 變更名稱。

「刪除」-- 刪除名稱。

「匯出」-- 將指定名稱的圖層狀態匯出,儲存成一個檔案。

「匯入」-- 選擇一個圖曾狀態檔案或圖檔,將它們的圖層狀態匯入到目前圖紙內。


圖層分組名稱:

全部打開

放樣圖

應力圖

詳細圖

裝建圖

型板圖


2026年2月13日 星期五

[陶瓷燈絲] DIY「Edsion Lamp」-- 工具與材料篇

本文旨在介紹在 DIY「Edsion Lamp」 時會使用到的工具與材料。由於資料眾多,因此會陸續增添內容。


常用工具

斜口鉗 -- 用來剪斷電線、銅線。

剝線鉗 -- 用來剝除電線外皮取出銅線。

尖嘴鉗 -- 用來彎折鐵線、銅管與陶瓷燈絲末端鐵片。

彎線鉗 -- 用來彎折銅線。

繞線棒 -- 用來彎曲銅線。

切管器 -- 用來切斷銅管。

鑷子ESD鑷子套組 -- 用來夾取陶瓷燈絲、銅線...。

銼刀 -- 用來打磨電線、銅管...等。

電鑽 -- 用來鑽洞或將銅線弄直。

電烙鐵 -- 用來焊接。

焊錫絲 -- 用來焊接。

松香(或助焊膏) -- 用來讓被焊接物容易上錫。

清潔綿 -- 用來清潔烙鐵頭。

鋼絲球 -- 用來清潔烙鐵頭。

三用電錶(萬用電錶) -- 用來量測電阻、電壓與線路。

熱熔膠槍 -- 用來將電子零件固定在燈座底板。


常用輔助材料

貼紙膠帶 -- 用來固定陶瓷燈絲、銅線...。

雙面泡棉膠帶 -- 用來將電子零件固定在燈座底板。

保存盒 -- 用來存放陶瓷燈絲。


燈罩與底座材料

        有些人喜愛工業風,會把陶瓷燈絲直接暴露在外與銅線搭配在一起。也有些人把陶瓷燈絲裝進玻璃保險絲管裡面,如此就可以隨時換裝燈絲顏色。

也有些人會覺得在陶瓷燈絲外面加上一個燈罩,不僅擁有美麗的外觀,同時也可以起到保護陶瓷燈絲的作用。


保險絲管

玻璃瓶

塑料膠囊

塑料管

塑料瓶

造型塑料瓶

木質窗花

原木底座

黃銅隔片 -- 可用來作為燈塔或太空船的腳座


電池與電池盒

聚合物鋰電池

16340鋰電池與電池盒

14500鋰電池與電池盒

18650鋰電池

18650單節電池盒(帶針)

18650單節電池盒(帶線)

18650雙節電池盒(帶線)


電子材料

鋰電池充放電保護模組

2A調光器

觸摸開關

1208YD自鎖開關

SW-520D滾珠開關

人體感應開關

磁簧開關

N20減速馬達

風車軸套


線材

0.15mm漆包線

包膜導線

0.3~0.8mm單芯銅線

1~2.5mm2 單芯銅線

0.8~1mm銅管

3mm銅管


陶瓷燈絲

17mm

26mm

38mm

53mm

68mm

軟燈絲


相關影片:

How to straighten a brass wire https://youtu.be/CySwNy804cA?si=qy6MUAywh9rp1dG0

How To Solder Solid Wire https://youtu.be/W4p5nfKMUeQ?si=KjV-mTBnf6YkQF4T

弄直銅線 https://youtu.be/RlOGB5lUmkA?si=MP5eHZvhWGw1Lwt8


How to make a Cube with solder wire https://youtu.be/enviQ8tIm_A?si=DvbIrD694U2ei1I1

How to solder Make 3D Ball In Copper Wire https://youtu.be/tQk9gVihig0?si=SEmoTE6E6mZoPsIZ

Platonic solid wireframes https://youtu.be/H6cuvdNz2vE?si=rZlz6wkIgcp6kGT1


DIY Edsion Lamp https://youtube.com/shorts/CnsBS4HIbPg?si=D_OyKqLXkPK0cbf4

https://youtu.be/waBf7huo0oY?si=_vs218FKiv15Inje

https://youtu.be/waBf7huo0oY?si=so41KRKban4bsdMj

How to make camping lantern https://youtu.be/HDSb4FbmYUY?si=ZmKYo0DPOzzPdZfa

How to make camping lantern https://youtu.be/P5yTYp4hay8?si=ykHey_aKUgYq5Gjp

DIY camping lantern https://youtu.be/ivka1ta4Uh0?si=h6vemDOOSK_3o7IA

DIY Edison-Style Lamp https://youtu.be/Fr6i1lc6PRo?si=KVQIsHYlaYosAIVR

Make camping lantern 4 LED https://youtu.be/BHBZBBx0Hp4?si=Wpiof4sYXN4cbR8-


Turning Glass Fuses into LED Lights https://youtu.be/WuSxTnHf_EQ?si=9EP8EjKosyWVoEkB

Made a Lamp from Glass Fuses https://youtu.be/f1NQMBz6lRA?si=dLD1rtfIFn9fslrK

小夜燈 https://youtu.be/gN4ZZ9hOK3s?si=_7D47LMlG-P-ud1Q

立方燈 https://www.youtube.com/watch?v=dB22gBrax6E


Eiffel Tower Themed Desk Lamp https://youtu.be/i1222NAswKA?si=EZSMMcL0zh1jKSgB

Satisfying DIY Christmas Cross Lamp https://youtu.be/y-ssy3248Po?si=56d6R5EPX3EPsfpV



https://youtu.be/cOiSF5lTH_4?si=Ii8VLVw8yStNockm

A Rotatable Edison LED Lamp https://youtu.be/FCFN7ecryC8?si=_pfljltmkEQ6Al82

WINDMILL Desk Lamp https://youtu.be/NdYTs1NasPw?si=cgT5NPs9GY6DP3_V

DIY Pinwheel Night Light https://youtu.be/-2e86rXmJRE?si=zuvrSUtmVcT1FBAQ

Pinwheel Lantern Lamp https://youtu.be/gatu86mPtrU?si=e3FUpe7q_9sQtUW4

Pinwheel Night Light https://youtu.be/-2e86rXmJRE?si=BtrzX7ZAGOnoIPXV

a Mini Lighthouse https://youtu.be/zbWbH8Yhd2I?si=_kUa1oud_982fbuO

DIY Rotatable Edison LED Lamp https://youtu.be/QwzCSQTnJiw?si=RQWwqH7HGLcgs6dd

DIY Desk Lamp with Edison LEDs https://youtu.be/wU_3_A7WM8U?si=tqEN2Tle5VE5QyFL

DIY a Cylinder Frame Lamp https://youtu.be/1s9B3X_sDs0?si=b4Y-z7DCvGJFg6jP

Make Your Own Oil Pumpjack Desk Lamp https://youtu.be/INbpAjGFwjk?si=v83yAhHq7WEjglRu

小燈塔 https://youtu.be/aehEnZydD7Y?si=btNgT-bHLwhWbmJP