chpmould 发表于 2010-11-18 19:56:00

判断图层是否存在

<p><font face="Verdana">初学C#,请各位老师帮助指点</font></p>
<p><font face="Verdana">如何判断当前文档中是否已新建了一个层,如果没有侧新建,如果有就不用新建</font></p>
<p>以下是新建层的代码,请高手帮我改为可以判断有就不用新建</p>
<p> </p>
<p>&nbsp;<font face="Verdana">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void CreateNewLayer()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LayerTableRecord ltRec = new LayerTableRecord();  <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ltRec.Name = "MYLAYER";            <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Database db = Application.DocumentManager.MdiActiveDocument.Database;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DBTransMan tm = db.TransactionManager;         <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; using (Transaction ta = tm.StartTransaction())  <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LayerTable lt = (LayerTable)tm.GetObject(db.LayerTableId, OpenMode.ForWrite, false);&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lt.Add(ltRec);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tm.AddNewlyCreatedDBObject(ltRec, true);   <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ta.Commit(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p></p>

雪山飞狐_lzh 发表于 2010-11-18 21:28:00

2010以上用lt.Has判断,以下用下面的函数

      /// <summary>
      /// 在符号表中获取对应键值的记录Id
      /// </summary>
      /// <param name="table">符号表</param>
      /// <param name="key">记录键值</param>
      /// <returns>对应键值的记录Id</returns>
      public static ObjectId GetRecorId<T>(this T table, string key) where T : SymbolTable
      {
            if (table.Has(key))
            {
                if (Application.Version.Major < 18)
                {
                  ObjectId idres = table;
                  if (!idres.IsErased)
                        return idres;
                  
                  foreach (ObjectId id in table)
                  {
                        if (!id.IsErased)
                        {
                            SymbolTableRecord str = id.GetObject<SymbolTableRecord>();
                            if (str.Name == key)
                              return str.ObjectId;
                        }
                  }
                }
                else
                {
                  return table;
                }
            }
            return ObjectId.Null;
      }

chpmould 发表于 2010-11-18 23:03:00

本帖最后由 作者 于 2010-11-18 23:45:51 编辑 <br /><br /> <p>谢谢狐哥指点</p>
<p>我还不理解如何调用此函数.能否再指点一下如何调用,</p>
<p>例如:</p>
<p>1) 我贴的那个就直接CreateNewLayer()就调用了,你帮我写的这个函数需要如何调用;</p>
<p>&nbsp;</p>
<p>2) 另外再请教一个问题,如何将此新建层设为当前层;(就是LISP中<font face="Verdana">(setvar "clayer" "TEST")的效果</font>);</p>
页: [1]
查看完整版本: 判断图层是否存在