2012-10-24 7 views
1

AutoCAD 도면 용 ModelSpace의 모든 개체를 잡아 내고 있습니다. 이러한 객체는 파이프, 덕트, 덕트 피팅, 선, 메쉬, Solid3D 등 다양한 유형이므로 TypeDescriptor로 반영하여 속성을 결정하는 논리를 작성하고 있습니다. 개체의 모든 속성을 가져 오는 더 똑똑한 방법이 있고 주어진 항목에 대한 측정 단위를 결정하는 방법이 있는지 궁금합니다. 나는 드로잉이 사용하는 단위를 찾는 방법을 안다. 그러나 "길이"라는 속성이 실제로 피트 나 미터와 같은 드로잉의 단위를 사용하는 길이라는 것을 어떻게 알 수 있습니까? 여기 C#에서 AutoCAD 특성 단위 찾기

내가 원하는 모든 항목을 통해 열거 할 내가 가지고있는 코드 :

using (var transaction = database.TransactionManager.StartTransaction()) 
{ 
    BlockTable blockTable = (BlockTable)transaction.GetObject(database.BlockTableId, OpenMode.ForRead); 
    BlockTableRecord blockTableRecord = (BlockTableRecord)transaction.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForRead); 

    foreach (DBObject dbObject in blockTableRecord 
     .Cast<ObjectId>() 
     .Where(id => id.IsValid && !id.IsNull && !id.IsEffectivelyErased && !id.IsErased) 
     .Select(id => transaction.GetObject(id, OpenMode.ForRead)) 
    { 
     //DISCOVER PROPERTIES AND THEIR UNITS HERE 
    } 
} 

답변

2

반사 나에게 합리적인 접근 방법처럼 보인다.

단위가 연결된 속성을 찾으려면 Autodesk.AutoCAD.DatabaseServices.UnitTypeAttribute에 대한 각 속성을 확인할 수 있습니다. 예를 들어, TypeDescriptor을 사용하고 다음과 같을 수 거리에있는 속성을 찾고 있다면 :

이 실제로 당신이 그것을 기대하는 곳 UnitTypeAttribute 적용 갖는 API에 의존
var distanceAttribute = new UnitTypeAttribute(UnitType.Distance); 
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(dbObject)) 
{ 
    if (property.Attributes.Matches(distanceAttribute)) 
    { 
     // Here's a property that is a distance. 
    } 
} 

.

+0

를 지원 열거입니다. 감사! –

2

도움이 될 것입니다.

UnitsValue unitValue=Application.DocumentManager.MdiActiveDocument.Database.Insunits; 

UnitValue 20 개 단위 등 LightYear, Armstrong 포함 유형 ... 내가 필요 정확히 무엇