ホーム / モデリング / CGaudi / 関数 / ImportDXF
ImportDXF7関数
定義
ImportDXF7 (FileName As String, Unit As FILE_UNIT_T, Eps As Long, FixArc As Boolean, Div As Long, UniteLayer As Boolean, SetLayName As Boolean, LayerList() As String, DXF_LAYER_T LayerType, HeightData() As Double, ThicknessData() As Double,newBodies() As CGaudiBody, RemoveLineLength As Double, InterpolationLine As Boolean) As Boolean
[Python]
ImportDXF7_py(str FileName, constants.FILE_UNIT_T newUnit, int Eps, bool FixArc, int Div, bool UniteLayer, bool SetLayName, str[] LayerList, constants.DXF_LAYER_T LayerType, double[] HeightData, doubld[] ThicknessData, double RemoveLineLength, bool InterpolationLine)
戻り値
| True | 成功 | |
| False | 失敗 |
[Python]
|
[0] |
True:成功、False:失敗 | |
| [1][0~インポートされたボディ数-1] | インポートされた結果(CGaudiBody)を返すための配列(動的配列) |
引数
| FileName | DXFファイル名 | |
| Unit | 読み込むDXFファイルの単位 (FILE_UNIT_Tを設定してください) | |
| Eps | DXFファイルの座標誤差 | |
| FixArc | 円弧上に近い頂点を円弧上に移動させるかどうか(True:Fixする)
DXFファイルデータの円弧に頂点座標を合わせる機能ですので、変換後の多角形の辺上には座標が補正されません。 |
|
| Div | 円の分割数
FixArcは、DXFファイルデータの円弧に頂点座標を合わせる機能ですので、変換後の多角形の辺上には座標が補正されません。 |
|
| UniteLayer | レイヤ毎に一括Uniteするかどうか(True:Uniteする) | |
| SetLayName | レイヤ名をBodyAttribute名とMaterial名に設定する[True]/しない[False] | |
| LayerList | レイヤ名のリスト | |
| LayerType | LayerListに対する解釈(DXF_LAYER_Tを設定してください) | |
| HeightData | 各レイヤ毎に設定する高さの配列 | |
| ThicknessData | 各レイヤ毎に設定する厚みの配列 | |
| newBodies | インポートされた結果(Body)を返すための配列(動的配列) | |
| RemoveLineLength | 除去する辺の長さ | |
| InterpolationLine | 直線補間をおこなうかどうか(通常は"True:行う"を設定してください) |
[Python]
| FileName | DXFファイル名 | |
| Unit | 読み込むDXFファイルの単位 (constants.FILE_UNIT_Tを設定してください) | |
| Eps | DXFファイルの座標誤差 | |
| FixArc | 円弧上に近い頂点を円弧上に移動させるかどうか(True:Fixする)
DXFファイルデータの円弧に頂点座標を合わせる機能ですので、変換後の多角形の辺上には座標が補正されません。 |
|
| Div | 円の分割数
FixArcは、DXFファイルデータの円弧に頂点座標を合わせる機能ですので、変換後の多角形の辺上には座標が補正されません。 |
|
| UniteLayer | レイヤ毎に一括Uniteするかどうか(True:Uniteする) | |
| SetLayName | レイヤ名をBodyAttribute名とMaterial名に設定する[True]/しない[False] | |
| LayerList | レイヤ名のリスト | |
| LayerType | LayerListに対する解釈(constants.DXF_LAYER_Tを設定してください) | |
| HeightData | 各レイヤ毎に設定する高さの配列 | |
| ThicknessData | 各レイヤ毎に設定する厚みの配列 | |
| RemoveLineLength | 除去する辺の長さ | |
| InterpolationLine | 直線補間をおこなうかどうか(通常は"True:行う"を設定してください) |
解説
指定されたDXFファイルをGaudiにインポートします。newBodiesは動的配列を指定してください。
また、この配列は関数実行後に作成されるので、呼び出し前の配列情報は全て削除されます。
ファイル名が不正な場合や、newBodiesが動的配列ではない場合、失敗します。
※レイヤ情報が含まれていないDXFファイルをインポートした場合、
LayerList、LayerType、HeightData、ThicknessDataの設定は無視され、すべてのオブジェクトがインポートされます。
座標誤差:
DXFの座標誤差は 1.0 x 10^(-Eps) で解釈されるため、Epsは正の整数を指定します。小数点以下第Epsまで残し、Epsの下の桁を四捨五入します。
指定できる範囲は0~16です。
また、誤差修正が原因で元々円弧上にあった頂点が外れる場合があります。これを修正するためにはFixArcをTrueで指定してください。
多角形近似:
多角形近似では、円を正多角形、円弧形状を多角弧に変換します。指定できる範囲は0(多角形近似をしない)と3~360(多角形近似)です。
多角弧の分割数は、角度をθと置くと
max( (int)( θ/2π * Div + 0.5 ), 1 )
と、なります。
除去する辺の長さ:
ここで指定した値以下の長さの辺を除去(スプラインに変換)し、図形の頂点を減らします。UniteLayerについて:
UniteLayerをTrueに設定した場合、同じ名前のレイヤに属するボディを自動的に一括でUniteします。LayerTypeについて:
LayerListに入力されたレイヤ名(大文字/小文字を区別します)に対して以下のように解釈をして読み込みます。[INCLUDE_NORMAL_C]
DXF内で、LayerListに含まれるレイヤ名を持つオブジェクトが存在する場合(完全一致検索)、一致したオブジェクトをインポートします。"ABC"をLayerListに入力した場合、"ABC"のレイヤ名を持つオブジェクトのみインポートされます。
"ABCD"等のオブジェクトはインポートされません。
※LayerListに何も入力しなかった場合、何もインポートされません。
[INCLUDE_PREFIX_C]
DXF内で、LayerListに含まれるレイヤ名を持つオブジェクトが存在する場合(部分一致検索)、一致したオブジェクトをインポートします。"ABC"をLayerListに入力した場合、"ABC"、"ABCD"等がインポートされます。
※LayerListに何も入力しなかった場合、何もインポートされません。
[EXCLUDE_NORMAL_C]
DXF内で、LayerListに含まれるレイヤ名を持つオブジェクトが存在する場合(完全一致検索)、一致したオブジェクトをインポートしません。"ABC"をLayerListに入力した場合、"ABC"のみインポートされません。"ABCD"等はインポートします。
※LayerListに何も入力しなかった場合、全てのレイヤをインポートします。
[EXCLUDE_PREFIX_C]
DXF内で、LayerListに含まれるレイヤ名を持つオブジェクトが存在する場合(部分一致検索)、一致したオブジェクトをインポートしません。"ABC"をLayerListに入力した場合、"ABC"、"ABCD"等はインポートされません。
※LayerListに何も入力しなかった場合、全てのレイヤをインポートします。
HeightData,ThicknessDataについて:
LayerListに入力されたレイヤ名の順番と対応して、レイヤ毎の高さ、厚みを指定します。たとえば、
LeyerList = {"a","b","c"}
HeightData = {1,2}
ThicknessData = {1}
と指定した場合、
レイヤ名"a"に属するボディは、インポート先平面からみて高さ1の位置にインポートされ、引き延ばし距離1で引き延ばしされます。
レイヤ名"b"に属するボディは、インポート先平面からみて高さ1の位置にインポートされます。
レイヤ名"c"に属するボディは、インポート先平面上にインポートされます。
LayerTypeが"EXCLUDE_NORMAL_C","EXCLUDE_PREFIX_C"の場合、この設定は無視されます。
InterpolationLineについて:
直線補間をおこなうかどうかを指定します。直線補間をおこなうことにより、細かく分割された連続した辺トポロジを直線に補間し無駄な頂点を省きますので、
通常はTrueに設定してください。(以前のImportDXF関数では強制的に直線補間が行われていました。)
ただし、アスペクト比が極端に大きいモデルにおいて直線補間が誤動作し、正しくインポートができない場合があります。
そのような場合はFalseに設定していただく事で問題を回避する事が可能です。
実行例
Dim Femtet As New CFemtetDim Gaudi As CGaudi
Dim newBodies() As CGaudiBody
'新規プロジェクト作成
If Femtet.OpenNewProject() = False Then
Femtet.ShowLastError
End If
'Femtet.Gaudiを変数Gaudiに代入して使いやすくする
Set Gaudi = Femtet.Gaudi
'DXFのインポート
’レイヤリストなし
’全てを読み込む場合は、LayerTypeにEXCLUDE_NORMAL_CまたはEXCLUDE_PREFIX_Cを入力してください
’LayerTypeにINCLUDE_NORMAL_CまたはINCLUDE_PREFIX_Cを入力すると何もインポートされません。
Dim LayerList() As String
Dim HeightData() As Double
Dim ThicknessData() As Double
If Gaudi.ImportDXF7("E:\Temp\dxfFiles\Box.dxf", F_MILLI_METER_C, 5, True, 8, True, True, LayerList, EXCLUDE_PREFIX_C, HeightData, ThicknessData, newBodies, 0.0, True) = False Then
Femtet.ShowLastError
End If
'DXFのインポート
’部分一致の読み込みで、レイヤリスト有り
Dim LayerList2(1) As String
Dim HeightData(1) As Double
Dim ThicknessData(1) As Double
LayerList2(0) = "ABC"
LayerList2(1) = "XYZ"
HeightData(0) = 1.0
HeightData(1) = 2.0
ThicknessData(0) = 1.0
ThicknessData(1) = 2.0
If Gaudi.ImportDXF7("E:\Temp\dxfFiles\Box.dxf", F_MILLI_METER_C, 5, True, 8, True, True, LayerList2, INCLUDE_PREFIX_C, HeightData, ThicknessData, newBodies, 0.0, True) = False Then
Femtet.ShowLastError
End If


