明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10780|回复: 21

[基础] 【共享】acad的net例子,初学者可以看一看

  [复制链接]
发表于 2009-5-30 07:59:00 | 显示全部楼层 |阅读模式

using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.EditorInput ;
using Autodesk.AutoCAD.Runtime ;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices ;

namespace CH02
{
    public class Class1
    {

        //--------------------------------------------------------------
        // 功能:获取用户输入
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //  
        //----------------------------------------------------------------
        [CommandMethod("GetData")]
        public void GetData()
        {
            //获取Editor对象
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            //获取整型数据
            PromptIntegerOptions intOp = new PromptIntegerOptions("请输入多边形的边数:");
            PromptIntegerResult intRes;
            intRes = ed.GetInteger(intOp);
            //判断用户输入
            if (intRes.Status == PromptStatus.OK)
            {
                int nSides = intRes.Value;
                ed.WriteMessage("多边形的边数为:" + nSides);
            } if (intRes.Status == PromptStatus.Cancel)
            {
                ed.WriteMessage("用户按了取消ESC键/n" );
            }

        }

        //--------------------------------------------------------------
        // 功能:要求用户输入点
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //  
        //----------------------------------------------------------------
   [CommandMethod("PickPoint")]
        static public void PickPoint()
   {
                //获取Editor对象
               Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
       PromptPointOptions promptPtOp = new PromptPointOptions("选择一个点:");
                //指定的基点,如果指定了该点,则在选择的时候绘制一条橡皮线。
                promptPtOp.BasePoint = new Autodesk.AutoCAD.Geometry.Point3d(0, 0, 0);
       PromptPointResult resPt;
       resPt = ed.GetPoint(promptPtOp);
       if (resPt.Status == PromptStatus.OK)
       {

                    ed.WriteMessage("选择的点为:" + resPt.Value.ToString());
       }
            }


            //--------------------------------------------------------------
            // 功能:获取选择集
            // 作者:
            // 日期:2007-7-20
            // 说明:
            //  
            //----------------------------------------------------------------
   [CommandMethod("SelectEnt")]
        static public void SelectEnt()
   {
                //获取Editor对象
               Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
               PromptSelectionOptions selectionOp = new PromptSelectionOptions();
               PromptSelectionResult ssRes = ed.GetSelection(selectionOp);
               if (ssRes.Status == PromptStatus.OK)
               {
                   SelectionSet SS = ssRes.Value;
                   int nCount = SS.Count;
                   ed.WriteMessage("选择了{0}个实体"  , nCount);
               }     
            }

            //--------------------------------------------------------------
            // 功能:获取选择集(带过滤)
            // 作者:
            // 日期:2007-7-20
            // 说明:
            //  
            //----------------------------------------------------------------
          [CommandMethod("SelectEnt2")]
        static public void SelectEnt2()
   {
                //获取Editor对象
               Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;

                // 定义选择集选项
               PromptSelectionOptions selectionOp = new PromptSelectionOptions();
                 //创建选择集过滤器,只选择块对象
                TypedValue[] filList = new TypedValue[1];
                filList[0] = new TypedValue((int)DxfCode.Start, "INSERT");
               SelectionFilter filter = new SelectionFilter(filList);

               PromptSelectionResult ssRes = ed.GetSelection(selectionOp, filter);
               if (ssRes.Status == PromptStatus.OK)
               {
                   SelectionSet SS = ssRes.Value;
                   int nCount = SS.Count;
                   ed.WriteMessage("选择了{0}个块"  , nCount);
               }     

            }

       }
 
  }
 

评分

参与人数 1威望 +2 明经币 +10 金钱 +20 贡献 +10 激情 +10 收起 理由
雪山飞狐_lzh + 2 + 10 + 20 + 10 + 10 【精华】表扬一下

查看全部评分

 楼主| 发表于 2009-5-30 08:00:00 | 显示全部楼层

using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;

namespace CH03
{
    public class Class1
    {

        //--------------------------------------------------------------
        // 功能:创建一个新层
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------

        [CommandMethod("CreateLayer")]
        public void CreateLayer()
        {
            ObjectId layerId;
            Database db = HostApplicationServices.WorkingDatabase;
            //开始一个事务
            Transaction trans = db.TransactionManager.StartTransaction();
            try
            {
                //首先取得层表
                LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForWrite);
                //检查MyLayer层是否存在
                if (lt.Has("MyLayer"))
                {
                    layerId = lt["MyLayer"];
                }
                else
                {
                    //如果MyLayer层不存在,就创建它
                    LayerTableRecord ltr = new LayerTableRecord();
                    ltr.Name = "MyLayer"; //设置层的名字
                    layerId = lt.Add(ltr);
                    trans.AddNewlyCreatedDBObject(ltr, true);
                }
                //提交事务
                trans.Commit();
            }
            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {
                //放弃事务
                trans.Abort();
            }
            finally
            {
                // 显式地释放
                trans.Dispose();
            }
        }

        //--------------------------------------------------------------
        // 功能:创建一个圆
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("CreateCircle")]
        public void  CreateCircle()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            // 使用 "using" ,结束是自动调用事务的 "Dispose"
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取块表和模型空间
                BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForRead));
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                //创建一个圆并添加到块表记录(模型空间)
                Point3d center = new Point3d(10, 10, 0);
                Circle circle = new Circle(center, Vector3d.ZAxis, 10.0);
                circle.ColorIndex = 1;

                btr.AppendEntity(circle);
                trans.AddNewlyCreatedDBObject(circle, true);
                trans.Commit();
            }

        }

        //--------------------------------------------------------------
        // 功能:创建一个块定义(块表记录)
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //  
        //----------------------------------------------------------------
        public ObjectId CreateBlkDef()
        {
            //定义函数的返回值ObjectId
            ObjectId blkObjId = new ObjectId();
            Database db = HostApplicationServices.WorkingDatabase;

            // 使用 "using"关键字指定事务的边界
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取块表
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
                //通过块名myBlkName判断块表中是否包含块表记录
                if ((bt.Has("myBlkName")))
                {
                    blkObjId = bt["myBlkName"];//如果已经存在,通过块名获取块对应的ObjectId
                }
                else
                {
                    //创建一个圆
                    Point3d center = new Point3d(10, 10, 0);
                    Circle circle = new Circle(center, Vector3d.ZAxis, 2);
                    circle.ColorIndex = 1;     
                    //创建文本Text:
                    MText text = new MText();
                    text.Contents = " ";
                    text.Location = center;
                    text.ColorIndex = 2;

                    //创建新的块表记录 myBlkName
                    BlockTableRecord newBtr = new BlockTableRecord();
                    newBtr.Name = "myBlkName";
                    newBtr.Origin = center;
                    //保存块表记录到块表
                    blkObjId = bt.Add(newBtr); // 返回块对应的ObjectId
                    trans.AddNewlyCreatedDBObject(newBtr, true); //Let the transaction know about any object/entity you add to the database!
                  
                    //保存新创建的实体到块表记录
                    newBtr.AppendEntity(circle);
                    newBtr.AppendEntity(text);
                    // 通知事务新创建了对象
                    trans.AddNewlyCreatedDBObject(circle, true);
                    trans.AddNewlyCreatedDBObject(text, true);
                }
                trans.Commit(); //提交事务
            }
            return blkObjId;
        }


        //--------------------------------------------------------------
        // 功能:创建一个块引用
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("CreateBlk")]
        public void CreateBlkRef()
        {
           
            
            //获取块的插入点
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptPointOptions ptOps = new PromptPointOptions("选择块的插入点");
            PromptPointResult ptRes;
            ptRes = ed.GetPoint(ptOps);
            Point3d ptInsert;
            if (ptRes.Status == PromptStatus.OK)
            {
                ptInsert = ptRes.Value ;
            }
            else
            {
                ptInsert = new Point3d(0, 0, 0);
            }

            Database db = HostApplicationServices.WorkingDatabase;
            // 使用 "using"关键字指定事务的边界
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取块表和模型空间
                BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
               
                //创建块引用
                BlockReference blkRef = new BlockReference(ptInsert,CreateBlkDef());// 指定插入点和所引用的块表记录
                blkRef.Rotation = 1.57;//指定旋转角,按弧度

                //保存新创建的块引用到模型空间   
                btr.AppendEntity(blkRef);
                trans.AddNewlyCreatedDBObject(blkRef, true);    // 通知事务新创建了对象

                trans.Commit(); //提交事务
            }
 
        }

        //--------------------------------------------------------------
        // 功能:读取对象的属性
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("OpenEnt")]
        public void OpenEnt()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象");
            PromptEntityResult entRes;
            entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出");
                return;
            }
            ObjectId objId = entRes.ObjectId;
            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                Entity ent = (Entity)trans.GetObject(objId, OpenMode.ForWrite);
                ent.ColorIndex = 1;
                trans.Commit();
            }

        }
    }
}

 楼主| 发表于 2009-5-30 08:02:00 | 显示全部楼层

using System;
using System.Collections.Generic;
using System.Text;

using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
namespace CH04
{
    public class Class1
    {


        //--------------------------------------------------------------
        // 功能:通过ObjectId打开对象
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("OpenEnt")]
        public void OpenEnt()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("通过ObjectId打开对象\n");
            PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象\n");
            PromptEntityResult entRes;
            entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出");
                return;
            }
            ObjectId objId = entRes.ObjectId;
            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity ;
                ent.ColorIndex = 1;
                trans.Commit();
            }
 
        }

        //--------------------------------------------------------------
        // 功能:类型识别和转换
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("GetType")]
        public void GetType()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("数据库对象的类型识别和转换\n");

            PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象");
            PromptEntityResult entRes;
            entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出");
                return;
            }
            ObjectId objId = entRes.ObjectId;
            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity;
                ed.WriteMessage("ent.GetRXClass().Name :" + ent.GetRXClass().Name + "\n");

                if (ent is Line)
                {
                    Line aLine = ent as Line;
                    aLine.ColorIndex = 1;
                }
                else if (ent.GetType() == typeof(Circle))
                {
                    Circle cir = (Circle)ent;
                    cir.ColorIndex = 2;
                }

                trans.Commit();
            }
        }
        //--------------------------------------------------------------
        // 功能:实体对象的属性
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("EntPro")]
        public void EntPro()
        {
           
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("实体对象的属性\n");

            PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象\n");
            PromptEntityResult entRes;
            entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出\n");
                return;
            }
            ObjectId objId = entRes.ObjectId;
            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity;
                ed.WriteMessage("获取或设置实体的线型\n");
                ed.WriteMessage("实体的原先的线型为 :" + ent.Linetype + "\n");
                // 获取线型表记录
                LinetypeTable lineTypeTbl = trans.GetObject(db.LinetypeTableId, OpenMode.ForRead) as LinetypeTable;
                // 确保DOT线型名已经加载到当前数据库
                LinetypeTableRecord lineTypeTblRec = trans.GetObject(lineTypeTbl["DOT"], OpenMode.ForRead) as LinetypeTableRecord;
                // 设置实体的线型
                ent.LinetypeId = lineTypeTblRec.ObjectId;

                // 设置实体的线型比例
                ed.WriteMessage("设置实体的线型比例为2.0\n");
                ent.LinetypeScale = 2.0;

                //设置实体的可见性
                ent.Visible = true;

                 //设置实体所在的层
                ed.WriteMessage("实体的原先所在的层为 :" + ent.Layer + "\n");
                ent.Layer = "layer0";
                trans.Commit();
            }
        }
    }
}

 楼主| 发表于 2009-5-30 08:03:00 | 显示全部楼层

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;

namespace CH05
{
    public class Class1
    {

         //--------------------------------------------------------------
        // 功能:添加扩展数据XDATA
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("AddXData")]
        public void AddXData()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("添加扩充数据XDATA\n");
            PromptEntityOptions entOps = new PromptEntityOptions("选择要打开的对象\n");
            PromptEntityResult entRes;
            entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出");
                return;
            }
            ObjectId objId = entRes.ObjectId;
            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                Entity ent = trans.GetObject(objId, OpenMode.ForWrite) as Entity ;
                ent.ColorIndex = 1;

                RegAppTable appTbl = trans.GetObject(db.RegAppTableId, OpenMode.ForWrite) as RegAppTable ;
                if (!appTbl.Has("MyAppName"))
                {
                    RegAppTableRecord appTblRcd = new RegAppTableRecord();
                    appTblRcd.Name = "MyAppName";
                    appTbl.Add(appTblRcd);
                    trans.AddNewlyCreatedDBObject(appTblRcd, true);
                }
                ResultBuffer resBuf = new ResultBuffer();//new TypedValue(1001, "MyAppName"), new TypedValue(1000, "开发部门"));

                resBuf.Add(new TypedValue(1001, "MyAppName"));//注册程序名称
                resBuf.Add(new TypedValue(1000 , " 张三"));//姓名
                resBuf.Add(new TypedValue(1000 , " 工程部"));//部门
                resBuf.Add(new TypedValue(1040, 2000.0));//薪水
                ent.XData =  resBuf;
                trans.Commit();
            }
 
        }


        //--------------------------------------------------------------
        // 功能:获取扩展数据XDATA
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //------------------------------------------------------------
        [CommandMethod("GETXDATA")]
        public void GETXDATA()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("获取扩充数据XDATA\n");

            PromptEntityOptions entOps = new PromptEntityOptions("选择带扩展数据的对象");
            PromptEntityResult entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出");
                return;
            }
            Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {

                Entity ent = (Entity)trans.GetObject(entRes.ObjectId, OpenMode.ForRead);
                ResultBuffer resBuf = ent.XData;
                if (resBuf != null)
                {
                    //
                    IEnumerator iter = resBuf.GetEnumerator();
                    while (iter.MoveNext())
                    {
                        TypedValue tmpVal = (TypedValue)iter.Current;
                        ed.WriteMessage(tmpVal.TypeCode.ToString() + ":");
                        ed.WriteMessage(tmpVal.Value.ToString() + "\n");
                    }
                }
            }
        }

        //--------------------------------------------------------------
        // 功能:在命名对象词典中添加数据
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //------------------------------------------------------------
        [CommandMethod("AddInNOD")]
        public void AddInNOD()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("在命名对象词典中添加数据\n");
            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取命名对象词典(NOD)
                DBDictionary NOD =trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite) as DBDictionary ;
                // 声明一个新的词典
                DBDictionary copyrightDict;
                // 判断是否存在COPYRIGHT词典,没有则创建
                try
                {
                    // 获取COPYRIGHT词典
                    copyrightDict = (DBDictionary)trans.GetObject(NOD.GetAt("COPYRIGHT"), OpenMode.ForRead);
                }
                catch
                {
                    //在NOD下创建COPYRIGHT词典
                    copyrightDict = new DBDictionary();
                    NOD.SetAt("COPYRIGHT", copyrightDict);
                    trans.AddNewlyCreatedDBObject(copyrightDict, true);
                }

                // 在copyrightDict中,获取或创建 "author" 词典
                DBDictionary authorDict;
                try
                {
                    authorDict = (DBDictionary)trans.GetObject(copyrightDict.GetAt("Author"), OpenMode.ForWrite);
                }
                catch
                {
                    authorDict = new DBDictionary();
                    //"author" doesn't exist, create one
                    copyrightDict.UpgradeOpen();
                    copyrightDict.SetAt("Author", authorDict);
                    trans.AddNewlyCreatedDBObject(authorDict, true);
                }

                // 通过Xrecord和ResultBuffer添加扩展数据
                Xrecord authorRec;
                try
                {
                    authorRec = (Xrecord)trans.GetObject(authorDict.GetAt("AuthorInfo"), OpenMode.ForWrite);
                }
                catch
                {
                    authorRec = new Xrecord();
                    authorRec.Data = new ResultBuffer(new TypedValue((int)DxfCode.Text, "张三"));
                    authorDict.SetAt("AuthorInfo", authorRec);
                    trans.AddNewlyCreatedDBObject(authorRec, true);
                }
                trans.Commit();
            }
        }

        //--------------------------------------------------------------
        // 功能:获取命名对象词典中的数据
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //------------------------------------------------------------
        [CommandMethod("GetInNOD")]
        public void GetInNod()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("获取命名对象词典中数据\n");

            Database db = HostApplicationServices.WorkingDatabase;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                // 获取NOD
                DBDictionary NOD = (DBDictionary)trans.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead, false);
                // 获取COPYRIGHT词典
                DBDictionary copyrightDict = (DBDictionary)trans.GetObject(NOD.GetAt("COPYRIGHT"), OpenMode.ForRead);
                // 获取Author词典
                DBDictionary AuthorDict = (DBDictionary)trans.GetObject(copyrightDict.GetAt("Author"), OpenMode.ForRead);
                // 获取AuthorInfo扩展记录Xrecord
                Xrecord authorXRec = (Xrecord)trans.GetObject(AuthorDict.GetAt("AuthorInfo"), OpenMode.ForRead);
                ResultBuffer resBuf = authorXRec.Data;
                TypedValue val = resBuf.AsArray()[0];
                ed.WriteMessage("该图纸由{0}设计\n", val.Value);
            }
        }

        //--------------------------------------------------------------
        // 功能:添加数据到数据库对象的扩展词典中
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //------------------------------------------------------------
        [CommandMethod("AddExtDict")]
        public void AddExtDict()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("创建对象扩展词典\n");

            PromptEntityOptions entOps = new PromptEntityOptions("选择要添加扩展数据的块\n");
            PromptEntityResult entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出");
                return;
            }
            Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                DBObject obj = trans.GetObject(entRes.ObjectId, OpenMode.ForWrite) as DBObject;
                BlockReference blkRef;
                if (obj is BlockReference)
                {
                    blkRef = obj as BlockReference;
                }
                else
                {
                    return;
                }

                // 创建对象的扩展词典
                blkRef.CreateExtensionDictionary();
                DBDictionary extensionDict = (DBDictionary)trans.GetObject(blkRef.ExtensionDictionary, OpenMode.ForWrite, false);
              
                // 通过Xrecord准备附加属性数据
                Xrecord xRec = new Xrecord();
                xRec.Data = new ResultBuffer(
                  new TypedValue((int)DxfCode.Text, "张三"),// 姓名
                  new TypedValue((int)DxfCode.Real, 1200.0),//薪水
                  new TypedValue((int)DxfCode.Text, "技术部"));// 部门        
               // 在扩展词典中添加扩展记录
                extensionDict.SetAt("EmployeeInfomation", xRec);
                trans.AddNewlyCreatedDBObject(xRec, true);

                trans.Commit();
            }

        }


        //--------------------------------------------------------------
        // 功能:获取数据库对象的扩展词典中的数据
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //------------------------------------------------------------
        [CommandMethod("GetExtDict")]
        public void GetExtDict()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("获取对象扩展词典信息\n");

            PromptEntityOptions entOps = new PromptEntityOptions("选择添加了扩展数据的块\n");
            PromptEntityResult entRes = ed.GetEntity(entOps);
            if (entRes.Status != PromptStatus.OK)
            {
                ed.WriteMessage("选择对象失败,退出");
                return;
            }
            Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                DBObject obj = trans.GetObject(entRes.ObjectId, OpenMode.ForWrite) as DBObject;
                BlockReference blkRef;
                if (obj is BlockReference)
                {
                    blkRef = obj as BlockReference;
                }
                else
                {
                    ed.WriteMessage("选择对象不是块,退出\n");
                    return;
                }

                // 创建对象的扩展词典
                DBDictionary extensionDict = (DBDictionary)trans.GetObject(blkRef.ExtensionDictionary, OpenMode.ForWrite, false);
                // 获取AuthorInfo扩展记录Xrecord
                Xrecord EmpXRec = (Xrecord)trans.GetObject(extensionDict.GetAt("EmployeeInfomation"), OpenMode.ForRead);
                ResultBuffer resBuf = EmpXRec.Data;
                TypedValue val = resBuf.AsArray()[0];
                ed.WriteMessage("是员工姓名:{0}\n", val.Value);
                val = resBuf.AsArray()[1];
                ed.WriteMessage("该员工的薪水:{0}\n", val.Value);
                val = resBuf.AsArray()[2];
                ed.WriteMessage("该员工属于:{0}\n", val.Value);
 
                trans.Commit();
            }

        }
    }
}

发表于 2009-6-3 21:58:00 | 显示全部楼层

唉,。。。。怎么这样多英文啊,,比LSP难多啦

发表于 2009-6-3 22:02:00 | 显示全部楼层
       //--------------------------------------------------------------
        // 功能:创建一个圆
        // 作者:
        // 日期:2007-7-20
        // 说明:
        //
        //----------------------------------------------------------------
        [CommandMethod("CreateCircle")]
        public void  CreateCircle()
        {
            Database db = HostApplicationServices.WorkingDatabase;
            // 使用 "using" ,结束是自动调用事务的 "Dispose"
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                //获取块表和模型空间
                BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForRead));
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);

                //创建一个圆并添加到块表记录(模型空间)
                Point3d center = new Point3d(10, 10, 0);
                Circle circle = new Circle(center, Vector3d.ZAxis, 10.0);
                circle.ColorIndex = 1;

                btr.AppendEntity(circle);
                trans.AddNewlyCreatedDBObject(circle, true);
                trans.Commit();
            }

        }

新建一个层都这么多代码啊,还全是英文来的,唉还是VLISP办法快些,少些

发表于 2009-6-6 13:09:00 | 显示全部楼层
谢谢,正想学习一下
发表于 2009-6-7 21:12:00 | 显示全部楼层
不错,对入门及了解cad与.net的相互关系很有用。
发表于 2009-10-21 13:54:00 | 显示全部楼层

很好 论坛需要你这样的同志  再来点吧

发表于 2009-10-22 12:32:00 | 显示全部楼层
liminnet发表于2009-6-3 22:02:00       //--------------------------------------------------------------        // 功能:创建一个圆   

唉,现在要把话返过来啦,还是C#好的,代码符合语言书写规律,一目了然,不难学

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:21 , Processed in 0.228018 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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