【问题标题】:Find unit of AutoCAD attribute in C#在 C# 中查找 AutoCAD 属性的单位
【发布时间】:2013-02-20 03:39:30
【问题描述】:

我正在获取模型空间中的所有对象以绘制 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
    }
}

【问题讨论】:

    标签: c# autocad autocad-plugin


    【解决方案1】:

    这会对你有所帮助。

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

    UnitValue 是枚举,支持 20 种单元类型,包括 LightYearArmstrong 等...

    【讨论】:

      【解决方案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.
          }
      }
      

      这依赖于 API 实际上将 UnitTypeAttribute 应用到您期望的位置。

      【讨论】:

      • 这正是我所需要的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2021-11-06
      • 2012-09-13
      • 2022-09-23
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      相关资源
      最近更新 更多