0

私は完全にばかげていると感じています。私は Python の初心者で、dxfgrabberなどのサードパーティ ライブラリを使用したいと考えています。

ヘルプセクションに記載されている次のことを試しましたが、それ以上はわかりません。

import dxfgrabber

dxf = dxfgrabber.readfile("1.dxf")

print("DXF version: {}".format(dxf.dxfversion))

header_var_count = len(dxf.header) 

layer_count = len(dxf.layers) 

entity_count = len(dxf.entities) 

print layer_count

print entity_count

print dxf.layers

これまでの出力は次のとおりです。

DXF version: AC1009

6

2

<dxfgrabber.layers.LayerTable object at 0x10f42b590>

私の質問:

  • したがって、6 つのレイヤーと 2 つのエンティティがあることがわかります。レイヤー名、エンティティなどの詳細情報を取得するにはどうすればよいですか?

  • 実際にエンティティにアクセスするにはどうすればよいですか (たとえば、2 つの行があることを知っています)。どうすればラインを取得できますか?

  • キャンバス上にエンティティ(線など)が表示されるようにコードを書きたいと思います。

このライブラリはすぐに使用できるように思われますが、Python について私よりも知識が豊富な人向けかもしれません。

4

2 に答える 2

1

例を試してください:

for layer in dxf.layers:
    print layer.name, layer.color

説明:

最後の印刷コマンドの出力は、それdxf.layersLayerTableオブジェクトであることを示しています。ドキュメントでは、LayerTableオブジェクトにプロパティがあることがわかります。

LayerTable.__iter__()
Iterate over all layers, yields Layer objects.

これは、for ループまたは iterable を取るあらゆる構造で反復できることを意味します。エンティティの場合、次のようなことができます。

all_layer_0_entities = [entity for entity in dwg.entities if entity.layer == '0']

ここでも同じ原則が適用されます。オブジェクト dwg.entities が反復され、各反復でエンティティが生成されます。

ドキュメントでより多くの例を使用できることは間違いありません。その一部については、この投稿を参照してください。

于 2013-05-19T11:36:39.910 に答える
1

LayerTable最後の印刷物から、オブジェクトがあることがわかります。のドキュメントにLayerTableは、メソッドと、個々のレイヤーを取得.layernames()するメソッドが必要であると書かれています。.get(layername)

また、オブジェクトを反復処理できる (.__iter__()メソッドがある) と述べているfor layer in dxf.layers:ため、個々のLayerオブジェクトを取得するために使用できます。

EntitySectionobjectについても同じ情報が利用可能で、__iter__()定義された 2 つのエンティティをループするメソッドもあります。ドキュメントには、遭遇する可能性のあるエンティティ タイプが一覧表示され、それらの情報にアクセスする方法に関する詳細なドキュメントが含まれています。

残念ながら、ライブラリには少なくとも 1 つのバグがあります。メソッドはLayerTable.__iter__()正しい型のオブジェクトを返しません。ソース コードをざっと見てみると、他の__iter__()メソッド正しい項目を返すことがわかります。

使用できます

for layername in dxf.layers.layernames():
    layer = dxf.layers.get(layername)

代わりに今のところ、または__iter__()メソッドを直接呼び出します。

for layer in dxf.layers.__iter__():
    # ..

この問題を修正するためにプル リクエストを提出しました。

于 2013-05-19T11:39:57.990 に答える