2013-05-19 3 views
0

나는 완전히 어리 석다. 나는 파이썬 초보자이며 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 개의 엔티티가 있음을 알고 있습니다. 다음과 같은 추가 정보를 얻으려면 어떻게해야합니까? 레이어 이름, 엔티티는 무엇입니까?

  • 엔티티에 실제로 액세스하려면 어떻게해야합니까 (예 : 두 줄이 있다는 것을 알고 있습니다)? 선을 어떻게 얻을 수 있습니까?

  • 엔티티 (예 : 선)가 캔버스에 표시되도록 코드를 작성하고 싶습니다.

이 라이브러리는 사용할 준비가되어 있어야하지만, 파이썬에 대한 지식이 많은 사람들에게는 나보다 나을 것 같습니다. 예를 들어

답변

1

시도 :

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

설명 : 마지막 인쇄 명령의

출력은 dxf.layersLayerTable 객체임을 나타냅니다. documentation에서 당신은 LayerTable 객체에 속성이 있음을 볼 수 있습니다

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

이 그것이 루프 또는 무엇이든 반복 가능 소요 건설을위한에서 반복 될 수 있다는 것을 의미한다. 기관의 경우에는이 같은 것을 수행 할 수 있습니다

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

다음은 같은 원리를 적용, 객체 dwg.entities은 각 반복의 실체를 산출 반복되고있다.

설명서에 더 많은 예제가 사용될 수 있습니다. 그 중 일부는 this post을 참조하십시오.

1

마지막으로 프린트 한 내용은 LayerTable입니다. documentation for LayerTable에는 .layernames() 메소드가 있어야하며 개별 레이어로 이동하는 방법은 .get(layername)이어야한다고 나와 있습니다.

.__iter__() 메서드가있는 개체를 반복 할 수 있으므로 for layer in dxf.layers:을 사용하여 Layer objects 개체를 얻을 수도 있습니다.

동일한 정보를 EntitySection object에 사용할 수 있으며, 정의 된 두 엔티티를 반복하는 __iter__() 메서드도 있습니다. 그런 다음 설명서에는 사용자가 만날 수있는 entity types과 정보에 액세스하는 방법에 대한 추가 설명서가 나와 있습니다.

아쉽게도 라이브러리에 버그가 하나 이상 있습니다. LayerTable.__iter__() 메서드는 올바른 형식의 개체를 반환하지 않습니다. source code의 간단한 모습은 다른 __iter__() 방법 do이 올바른 항목을 반환한다는 것을 보여줍니다.

이제 대신

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

를 사용하거나 직접 __iter__() 메서드를 호출 할 수 있습니다 : 나는 문제를 해결하기 위해 pull request을 제기 한

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

.

+0

to @elyase : dxf.layers의 레이어에 대해 시도했습니다 : print layer.name, layer.color'는 다음과 같습니다. ... ... TypeError : iter()는 'list'유형이 아닌 반복자를 반환했습니다 – solarisman

+0

@solarisman : 흥미 롭다. 그것은 도서관의 버그처럼 들린다. 가능하다면 dxf.layers .__ iter __() :'대신에 for 레이어를 사용하십시오.하지만 가능한 경우 프로젝트에보고하십시오. –

+0

@solarisman : [소스 코드] (https://bitbucket.org/mozman/dxfgrabber/src/f09dd32b8dada172b32525a953d0aa0beafc745f/dxfgrabber/layers.py?at=default)에서 약간 보았습니다. 사소한 실수를 더 많이 볼 수 있습니다. '.__ iter __()'메쏘드가 가장 확실하게 깨졌습니다. 'return self._layers.values ​​()'대신'return iter (self._layers.values ​​())'를 사용해야합니다. –

관련 문제