明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1335|回复: 1

请大虾帮忙看看属性块的属性设置问题

[复制链接]
发表于 2012-5-29 14:02:01 | 显示全部楼层 |阅读模式
  private void button3_Click_1(object sender, EventArgs e)
        {
            Database db = HostApplicationServices.WorkingDatabase;
            ObjectId blkid;
            //外框长度
            int ol = 0;
            //外框高度
            int ow = 0;
            //内框长度
            int il = 0;
            //内框高度
            int iw = 0;
            //内外框距
            int oi = 0;
            //装订边距
            int CON_ZD = 25;
            //反签区边框
            int CON_FL = 120;
            int CON_FW = 24;
            //创建块定义
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
                BlockTableRecord btr = new BlockTableRecord();
                btr.Name = "CNPTDwgFrameBlock";               
                if (comboBox1.Text == "A1")
                {
                    ol = 1189;
                    ow = 841;
                }
                //下外框
                Line line1 = new Line(new Point3d(), new Point3d(ol, 0, 0));
                //需要先定义图层?
                //line1.Layer = "AM_BOR";
                btr.AppendEntity(line1);
                //左外框
                Line line2 = new Line(new Point3d(), new Point3d(0, ow, 0));
                btr.AppendEntity(line2);
                //上外框
                Line line3 = new Line(new Point3d(0, ow, 0), new Point3d(ol, ow, 0));
                btr.AppendEntity(line3);
                //右外框
                Line line4 = new Line(new Point3d(ol, 0, 0), new Point3d(ol, ow, 0));
                btr.AppendEntity(line4);               
                if (comboBox1.Text == "A1")
                {
                    oi = 10;
                    il = 1189 - oi - CON_ZD;
                    iw = 841 - oi * 2;
                }
                //下内框
                Line line5 = new Line(new Point3d(CON_ZD, oi, 0), new Point3d(CON_ZD + il, oi, 0));
                btr.AppendEntity(line5);
                //左内框
                Line line6 = new Line(new Point3d(CON_ZD, oi, 0), new Point3d(CON_ZD, oi + iw, 0));
                btr.AppendEntity(line6);
                //上内框
                Line line7 = new Line(new Point3d(CON_ZD, oi + iw, 0), new Point3d(CON_ZD + il, oi + iw, 0));
                btr.AppendEntity(line7);
                //右内框
                Line line8 = new Line(new Point3d(CON_ZD + il, oi, 0), new Point3d(CON_ZD + il, oi + iw, 0));
                btr.AppendEntity(line8);
                //反签区               
                //下边框
                Line line9 = new Line(new Point3d(CON_ZD, oi + iw - CON_FW, 0), new Point3d(CON_ZD + CON_FL, oi + iw - CON_FW, 0));
                btr.AppendEntity(line9);
                //右边框
                Line line10 = new Line(new Point3d(CON_ZD + CON_FL, oi + iw - CON_FW, 0), new Point3d(CON_ZD + CON_FL, oi + iw, 0));
                btr.AppendEntity(line10);
                //反签区内容
                AttributeDefinition ad = new AttributeDefinition();               
                ad.Constant = false;               
                ad.Tag = "The Sign Area";
                ad.Prompt = "反签区";
                ad.TextString = "反签区Value";
                ad.Position = new Point3d(CON_ZD + CON_FL, oi + iw, 0);
                ad.Height = 22;
                ad.Rotation = 180;
                btr.AppendEntity(ad);
                //添加块表记录到块表
                blkid = bt.Add(btr);
                trans.AddNewlyCreatedDBObject(btr, true);
                trans.Commit();
            }
            // 创建块参照
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord mbtr = trans.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForWrite) as BlockTableRecord;
                BlockTableRecord btr = trans.GetObject(blkid, OpenMode.ForRead) as BlockTableRecord;
                // 通过块定义添加块参照
                BlockReference br = new BlockReference(new Point3d(0, 0, 0), blkid);
                /**/
               
                /**/
                //把块参照添加到块表记录
                Object blkrefid = mbtr.AppendEntity(br);
                /**/
                foreach (ObjectId id in btr)
                {
                    if (id.ObjectClass.Equals(RXClass.GetClass(typeof(AttributeDefinition))))
                    {
                        AttributeDefinition ad = trans.GetObject(id, OpenMode.ForRead) as AttributeDefinition;
                        AttributeReference ar = new AttributeReference(ad.Position, ad.TextString, ad.Tag, new ObjectId());                        
                        br.AttributeCollection.AppendAttribute(ar);
                       
                    }
                }
                /**/
                // 通过事务添加块参照到数据库
                trans.AddNewlyCreatedDBObject(br, true);
                /**/
               
                /**/
                trans.Commit();
            }
            //自动缩放至显示全部图形
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            doc.SendStringToExecute("'_zoom _e\n", false, false, true);
            //关闭对话窗口
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
            this.Close();
        }

//问题:属性块的内容虽然显示出来了,但是属性块的文字没有按照我设定的高度和角度显示。
正确的


错误的

本帖子中包含更多资源

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

x
 楼主| 发表于 2012-6-24 11:36:24 | 显示全部楼层
问题已解决,请看我的另一个帖子《请教关于C#开发ACAD2010生成的属性块显示延迟的问题》
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:31 , Processed in 0.183267 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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