我正在使用ModelSpace中的所有对象来获取AutoCAD绘图。这些对象有各种类型,如Pipe,Duct,DuctFitting,Line,Mesh,Solid3D等,所以我编写逻辑来通过反映TypeDescriptor来确定它们的属性。我想知道是否有更聪明的方法来获取对象的所有属性,以及是否有办法确定给定项目的度量单位。我知道如何查看图纸使用的单位,但是如何判断一个名为“长度”的属性实际上是使用图形中的单位(如英尺或米)的长度?
以下是我需要列举的所有项目的代码:
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
}
}
答案 0 :(得分:3)
这会对你有帮助。
UnitsValue unitValue=Application.DocumentManager.MdiActiveDocument.Database.Insunits;
UnitValue
是枚举,支持20种单位类型,包括LightYear
,Armstrong
等...
答案 1 :(得分:2)
反思对我来说似乎是一种合理的方法。
要查找与其关联的单位的属性,您可以检查Autodesk.AutoCAD.DatabaseServices.UnitTypeAttribute
的每个属性。例如,如果您正在使用TypeDescriptor
并且正在查找距离可能如下的属性:
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.
}
}
这取决于实际应用了UnitTypeAttribute
的API。