Femtet2026.0マクロヘルプ/マニュアル
 

ホーム / モデリング / 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する)
  • Divに0以外を指定される場合、Trueにしないでください。

   DXFファイルデータの円弧に頂点座標を合わせる機能ですので、変換後の多角形の辺上には座標が補正されません。

Div   円の分割数
  • 0[多角形近似をしない]以外を指定する場合は、FixArcはTrueにしないでください。

   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する)
  • Divに0以外を指定される場合は、Trueにしないでください。

   DXFファイルデータの円弧に頂点座標を合わせる機能ですので、変換後の多角形の辺上には座標が補正されません。

Div   円の分割数
  • 0[多角形近似をしない]以外を指定する場合は、FixArcはTrueにしないでください。

   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 CFemtet
Dim 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