明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1201|回复: 7

[基础] 请教高手:vs2010开发cad批量改图层名称程序,怎样实现

[复制链接]
发表于 2013-10-25 14:29 | 显示全部楼层 |阅读模式
本人正在学习c#开发AutoCAD,请教高手:vs2010开发cad批量改图层名称程序,怎样实现,谢谢赐教!
 楼主| 发表于 2013-10-26 13:22 | 显示全部楼层
// 请教大师,下面的程序没有通过,帮忙看看怎样解决,谢谢!



using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using DotNetARX;
    [CommandMethod("renameL")]

    public static void RenameLayer2()
    {

        Document doc = Application.DocumentManager.MdiActiveDocument;

        Database db = doc.Database;

        using (Transaction trans = db.TransactionManager.StartTransaction())
        {

            LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);

            foreach (ObjectId id in lt)
            {

                LayerTableRecord ltr = id.GetObject(OpenMode.ForRead) as LayerTableRecord;

                if (ltr.Name !="0")
                {

                    ltr.Name = ltr.Name + "NEW";
                    trans.Commit();
                }
               
            }

        }

    }
 楼主| 发表于 2013-10-26 13:33 | 显示全部楼层

//此程序也不行,

[CommandMethod("renameL")]

    public static void RenameLayer2()
    {

        Document doc = Application.DocumentManager.MdiActiveDocument;

        Database db = doc.Database;

        using (Transaction trans = db.TransactionManager.StartTransaction())
        {

            LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);

            foreach (ObjectId id in lt)
            {

                LayerTableRecord ltr = id.GetObject(OpenMode.ForRead) as LayerTableRecord;


               

                if (ltr.Name !="0")
                {

                    ltr.Name = ltr.Name + "NEW";

                    lt.Add(ltr);

                    trans.AddNewlyCreatedDBObject(ltr, true);
                    
                }
                trans.Commit();
               
            }

        }

    }
 楼主| 发表于 2013-10-28 09:18 | 显示全部楼层
版主有空帮忙看看可以吗?先谢谢了!
发表于 2013-10-28 13:00 | 显示全部楼层
LayerTableRecord ltr = id.GetObject(OpenMode.ForRead) as LayerTableRecord;
------------------------
LayerTableRecord ltr = id.GetObject(OpenMode.ForWrite) as LayerTableRecord;
发表于 2013-10-28 13:02 | 显示全部楼层
using (Transaction trans = db.TransactionManager.StartTransaction())
        {

            LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);

            foreach (ObjectId id in lt)
            {

                LayerTableRecord ltr = id.GetObject(OpenMode.ForWrite) as LayerTableRecord;//写打开

                if (ltr.Name !="0")
                {

                    ltr.Name = ltr.Name + "NEW";
                  
                }
               
            }
  trans.Commit();//事务只能提交一次
        }
发表于 2013-10-28 13:03 | 显示全部楼层
trans.AddNewlyCreatedDBObject(ltr, true);
-----------------------
已在库里面的对象不能再添加
 楼主| 发表于 2013-10-29 07:37 | 显示全部楼层
谢谢 sieben ,学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-17 10:19 , Processed in 0.198036 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表