fanny_6 发表于 2014-3-4 22:59:20

请问如何获取对象的唯一标识的ID号

请问如何获取对象的唯一标识的ID号。想把对象关联到数据库,作为主键

Andyhon 发表于 2014-3-5 08:38:13



Dxf 5

sieben 发表于 2014-3-5 08:43:01

Handle   句柄

fanny_6 发表于 2014-3-5 09:47:03

可以了,非常感谢,可以获取唯一值了。
还想麻烦大侠解决一个问题,如何在程序中指定Handle值,获取对象。

sieben 发表于 2014-3-5 10:08:55

handle可以换,不可以指定

fanny_6 发表于 2014-3-5 10:12:00

不好意思,可能我没说清楚
比如我现在获得的一条直线对象的handle是8C,如何通过8c这个值,获取直线这个对象,对这个对象进行操作

sieben 发表于 2014-3-5 10:51:17

public Autodesk.AutoCAD.DatabaseServices.ObjectId GetObjectId(bool createIfNotFound, Autodesk.AutoCAD.DatabaseServices.Handle objHandle, int identifier)
    Autodesk.AutoCAD.DatabaseServices.Database 的成员

sieben 发表于 2014-3-5 10:54:02

      /// <summary>
    /// 从句柄转换成ObjectId
    /// Version : 2010.03.29 Sieben
    /// </summary>
    /// <param name="handle">句柄,可以是Handle,string,int,long数据类型</param>
    /// <returns>成功返回句柄所对应的ObjectId,否则返回ObjectId.Null</returns>
    public static ObjectId HandleToObjectId(object handle)
    {
      try
      {
      if (handle == null) return ObjectId.Null;
      ObjectId tId2 = ObjectId.Null;
      if (handle is Handle)
          return sc.db.GetObjectId(false, (Handle)handle, 0);
      else if (handle is string)
      {
          string tStr = handle.ToString().Trim();

          if (tStr == "")
            return ObjectId.Null;
          else if (tStr == "0")
            return ObjectId.Null;
          else
          {
            long lNum = Convert.ToInt64(tStr, 16);
            if (lNum == 0L)
            return ObjectId.Null;
            else
            return sc.db.GetObjectId(false, new Handle(lNum), 0);
          }
      }
      else if (handle is int || handle is long)
      {
          long lNum = (long)handle;
          if (lNum == 0L)
            return ObjectId.Null;
          else
            return sc.db.GetObjectId(false, new Handle(lNum), 0);
      }
      else
          return ObjectId.Null;
      }
      catch
      {
      return ObjectId.Null;
      }
    }

fanny_6 发表于 2014-3-5 14:40:47

谢谢,我试试看!
页: [1]
查看完整版本: 请问如何获取对象的唯一标识的ID号