2017-01-30 51 views
0

こんにちは私は、Pythonを使用してワークフローを自動化する必要があります。私はdxfファイルを開いて、その中の1つのテキストと図形の名前を変更する必要があります。私はezdxfモジュールを使用しています。私は層を見ることができますが、私はそれらのうちの1つの名前を変更してファイルを保存しようとすると、新しい名前で新しい層を作成します。前もって感謝します。Pythonを使用してdxfファイルのレイヤー名を変更する

dwg = ezdxf.readfile('path_to_my_file.dxf') 
for layer in dwg.layers: 
    if layer.dxf.name == 'old_layer_name': 
     layer.dxf.name = 'new_layer_name' 

答えて

1

DXF形式は非常に緩んでいると、あなたがする必要がありますので、レイヤ名は、(あまりにも、また、潜在的にいくつかのOBJECTSに)ENTITIESテーブル内のLAYERSのテーブルにだけでなく、すべてのアイテムの両方に指定されていますレイヤー名を更新して有効にします。

私はezdxfライブラリについて何も知らないけど、でもあなたは'new_layer_name''old_layer_name'と改名ライブラリ通知をファイルを保存するときにそう何が起こっていることは、'old_layer_name'を指定するエンティティがまだあるされるように、ライブラリーは、そのレイヤーを追加します整合性を維持しようとすると、LAYERSテーブルに追加されます。すべてのエンティティは、それがだ持っているので、あなただけのレイヤーテーブル内のレイヤの名前を変更する場合

# your existing code 
dwg = ezdxf.readfile('path_to_my_file.dxf') 
for layer in dwg.layers: 
    if layer.dxf.name == 'old_layer_name': 
     layer.dxf.name == 'new_layer_name' 

# this is the part that's untested 
for entity in dwg.entities: 
    if entity.layer.dxf.name == 'old_layer_name': 
     entity.layer.dxf.name == 'new_layer_name' 
+0

私はすべてのエンティティの参照を変更したが、他の層がまだそこにある...私は(異なる色で)今、私の新しい形でドローを持っています。もう一方の図形は空になります。しかし、古いレイヤーへのすべての参照をどのように知ることができるのか解消しないでください。他の回答ありがとう – JoskoRubio

1

、任意のエンティティのレイヤーを変更しません:

最終結果はこのような何か(未テスト)になります独自のレイヤー属性。エンティティがどのレイヤーに表示されるかを決定します。これは、モデル空間を含むすべてのレイアウト空間とすべてのブロック定義に対して手動で行う必要があります。ちょうどモデル空間のための

例:

import ezdxf 

dwg = ezdxf.readfile('old.dxf') 
msp = dwg.modelspace() 

OLD_LAYER_NAME = 'old_layer_name' 
NEW_LAYER_NAME = 'new_layer_name' 

# rename layer 
try: 
    layer = dwg.layers.get(OLD_LAYER_NAME) 
except ValueError: 
    print('Layer {} not found.'.format(OLD_LAYER_NAME)) 
else: 
    layer.dxf.name = NEW_LAYER_NAME 

# move entities in model space to new layer 
all_entities_on_old_layer = dwg.modelspace().query('*[layer=="%s"]' % OLD_LAYER_NAME) 
for entity in all_entities_on_old_layer: 
    entity.dxf.layer = NEW_LAYER_NAME # this assigns the new layer 

dwg.saveas('new.dxf') 
+0

ありがとう!私は近いと思うが、私はレイアウトの参照とモデル空間を変更し、それはまだ十分に動作しません – JoskoRubio

関連する問題