明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1317|回复: 2

请教 关于设置扩展数据 奇特现象

[复制链接]
发表于 2014-9-1 17:12:18 | 显示全部楼层 |阅读模式
本帖最后由 cheng5276 于 2014-9-1 17:14 编辑

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using System.Drawing;
using Autodesk.AutoCAD.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Forms;
using Application = Autodesk.AutoCAD.ApplicationServices.Application;
using Document = Autodesk.AutoCAD.ApplicationServices.Document;
using Autodesk.AutoCAD.LayerManager;
using Autodesk.AutoCAD.GraphicsSystem;
using Autodesk.AutoCAD.GraphicsInterface;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.DatabaseServices.Filters;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.Windows.ToolPalette;
using Autodesk.AutoCAD.Publishing;
using Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.ApplicationServices;

namespace WPFClassLibrary
{
    public class Class1
    {
        static void AddRegAppTableRecord(string regAppName)
        {

            Document doc = Application.DocumentManager.MdiActiveDocument;

            Editor ed = doc.Editor;

            Database db = doc.Database;

            Transaction trans = doc.TransactionManager.StartTransaction();

            RegAppTable rat = (RegAppTable)trans.GetObject(db.RegAppTableId, OpenMode.ForRead, false);

            if (!rat.Has(regAppName))
            {

                rat.UpgradeOpen();

                RegAppTableRecord ratr = new RegAppTableRecord();

                ratr.Name = regAppName;

                rat.Add(ratr);

                trans.AddNewlyCreatedDBObject(ratr, true);

            }

            trans.Commit();

            trans.Dispose();

        }




static public DBObject Selectobj(string word)
{
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            PromptEntityOptions peo = new PromptEntityOptions("\n请选择实体:");
            PromptEntityResult per = ed.GetEntity(peo);
            DBObject obj=null;
            if (per.Status == PromptStatus.OK)
            {
                Transaction trans = doc.TransactionManager.StartTransaction();

                obj = trans.GetObject(per.ObjectId, OpenMode.ForWrite);

                trans.Commit();

                trans.Dispose();
            }

     return obj;
}

[CommandMethod("SXD")]
static public void SXDa()
{
     SetXData(Selectobj("请选择对象aa:"));
}


static public void SetXData(DBObject obj)
{

         AddRegAppTableRecord("cheng5276");

         ResultBuffer rb = new ResultBuffer();

         rb.Add(new TypedValue(1001, "cheng5276"));

         rb.Add(new TypedValue(1000, "only ascii under AutoCAD 2006"));

         rb.Add(new TypedValue(1000, "max length is 255"));

         obj.XData = rb;

         rb.Dispose();
     }


         [CommandMethod("SXD2")]
        static public void SetXData2()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;

            Editor ed = doc.Editor;

            PromptEntityOptions peo = new PromptEntityOptions("\n请选择实体:");

            PromptEntityResult per = ed.GetEntity(peo);

            if (per.Status == PromptStatus.OK)
            {

                Transaction trans = doc.TransactionManager.StartTransaction();

                DBObject obj = trans.GetObject(per.ObjectId, OpenMode.ForWrite);

                AddRegAppTableRecord("Test");

                ResultBuffer rb = new ResultBuffer();

                rb.Add(new TypedValue(1001, "Test"));

                rb.Add(new TypedValue(1000, "only ascii under AutoCAD 2006"));

                rb.Add(new TypedValue(1000, "max length is 255"));

                obj.XData = rb;

                rb.Dispose();

                trans.Commit();

                trans.Dispose();

            }

        }

    }
}


请教,当我采用GXD2命令选择对象并设置器扩展数据,程序很顺利
但是当我将GXD2拆分成两个函数(分别为选择对象和设置扩展数据时),见SXD的命令及函数,程序就会弹出致命错误了,小弟初学C# CAD 编程,恭请大侠们指点迷津,拜谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-9-1 17:37:23 来自手机 | 显示全部楼层
Selectobj事务提交后自动将相关的对象销毁了
这里你应该返回objectid 在主程序或者setxdata里开事务

评分

参与人数 1明经币 +1 收起 理由
cheng5276 + 1 赞一个!

查看全部评分

 楼主| 发表于 2014-9-3 09:49:35 | 显示全部楼层
谢谢老大的指点,小弟继续研究
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 12:52 , Processed in 0.160090 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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