我正在實作一個 DXF 匯入器,現在我正在考慮 HEADER 部分和它的一個變數 INSUNITS、TABLES 部分只有一個表 BLOCK_RECORD 表、BLOCKS 部分、ENTITIES 部分(INSERT、LINE、LWPOLYLINE、ARC、CIRCLE)。匯入時我不知道是否需要考慮單位,如果需要,我不知道如何準確地考慮這一點。我的檔案現在沒有以正確的方式匯入,很可能是由于這些單位,因為我認為我正在正確地進行插入轉換 EXTRUSIONDIRECTIONTRANSFORMATION * INSERTIONPOINTTRANSLATION * ROTATION * SCALING * BASEPOINTTRANSLATION。當我洗掉 BASEPOINTTRANSLATION 時,我正在匯入的檔案以正確的方式匯入,但是其他一些檔案沒有以正確的方式匯入,并且繪圖的某些部分與其他部分相距很遠。在我看來,塊的基點以英寸為單位,當我將其轉換為米時,它會變得更好一些。因此,如果有人知道我應該按什么順序進行轉換以及如何處理 DXF?? 檔案中的單位,我會非常高興,因為我現在被卡住了。
uj5u.com熱心網友回復:
在 Pythonezdxf包中,我是這樣做的:
- 起始矩陣
M0= OCS 變換矩陣,包括 x、y 和 z 軸的縮放;與 OCS 變換矩陣 * 縮放矩陣相同 M1關于擠壓向量的旋轉矩陣- 變換矩陣
M=M0*M1 - 將翻譯添加到
insert重點- 將
insert點從 OCS 轉換為 WCS - 轉變
block_base_point當前矩陣M無需轉換,當前的狀態M沒有翻譯呢,所以一個完整的轉型不會是一個問題,但“唯一的方向”轉型是在我的代碼快 block_base_point從insert點減去- 將最后一行設定
M為(insert.x, insert.y, insert.z, 1)如果行主要順序,最后一列如果是列主要順序,這基本上是M* 翻譯矩陣
- 將
github 上的 Python 代碼
單位縮放可以忽略,CAD 應用程式必須設定正確的縮放值以匹配INSERT縮放屬性中的父布局單位和塊參考單位。例如,如果您將具有 mm 單位的塊插入具有 m 單位的模型空間,則INSERT物體的縮放值必須為 0.001 才能將毫米轉換為米 (1mm = 0.001m)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383885.html
