明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1284|回复: 1

[求助]为什么属性不能显示出来?

[复制链接]
发表于 2014-8-3 08:04:25 | 显示全部楼层 |阅读模式
各位专家,以下程序先生成由一个圆和标记为"Height”、"DotMake"的两个属性文字组成的块,然后再选取点插入这个属性块,但是只有圆显示出来,属性文字没有显示出来,请问这是为什么?
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using Autodesk.AutoCAD.ApplicationServices;
  7. using Autodesk.AutoCAD.DatabaseServices;
  8. using Autodesk.AutoCAD.EditorInput;
  9. using Autodesk.AutoCAD.Geometry;
  10. using Autodesk.AutoCAD.Runtime;
  11. using Autodesk.AutoCAD.Colors;
  12. namespace Ctest
  13. {
  14.     public class Class1
  15.     {
  16.         [CommandMethod("test")]
  17.         public void test()
  18.         {
  19.             ObjectId TkId = CreateB2();
  20.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  21.             PromptPointResult pPtRes;
  22.             PromptPointOptions pPtOpts = new PromptPointOptions("\n请指定块的插入点<按ESC键结束>: ");
  23.             pPtOpts.UseBasePoint = false;
  24.             bool Pdbz = true;
  25.             int i = 1;
  26.             while (Pdbz == true)
  27.             {
  28.                 pPtRes = acDoc.Editor.GetPoint(pPtOpts);
  29.                 Point3d ptCrd = pPtRes.Value;
  30.                 if (pPtRes.Status == PromptStatus.OK)
  31.                 {
  32.                     InsertB2(TkId, i.ToString(), (1000 * i).ToString(), ptCrd);
  33.                     i = i + 1;
  34.                 }
  35.                 else
  36.                 {
  37.                     Pdbz = false;
  38.                 }
  39.             }
  40.         }

  41.         //生成B2"图块
  42.         public ObjectId CreateB2()
  43.         {
  44.             ObjectId newBtrId = new ObjectId();
  45.             Database db = HostApplicationServices.WorkingDatabase;
  46.             Transaction trans = db.TransactionManager.StartTransaction();
  47.             Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
  48.             try
  49.             {
  50.                 BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
  51.                 if ((bt.Has("B2")))
  52.                 {
  53.                     newBtrId = bt["B2"];
  54.                 }
  55.                 else
  56.                 {
  57.                     Point3d center = new Point3d(0.0, 0.0, 0.0);
  58.                     Circle circle = new Circle(center, Vector3d.ZAxis, 0.5);
  59.                     circle.ColorIndex = 1;
  60.                     AttributeDefinition text1 = new AttributeDefinition(new Point3d(0.5, 0.0, 0.0), "", "Height", "", db.Textstyle);
  61.                     text1.ColorIndex = 1;
  62.                     text1.Height = 1.0;
  63.                     text1.HorizontalMode = TextHorizontalMode.TextLeft;
  64.                     text1.VerticalMode = TextVerticalMode.TextBottom;
  65.                     AttributeDefinition text2 = new AttributeDefinition(new Point3d(0.5, 0.0, 0.0), "", "DotMake", "", db.Textstyle);
  66.                     text2.ColorIndex = 3;
  67.                     text2.Height = 1.0;
  68.                     text2.HorizontalMode = TextHorizontalMode.TextLeft;
  69.                     text2.VerticalMode = TextVerticalMode.TextTop;
  70.                     BlockTableRecord newBtr = new BlockTableRecord();
  71.                     newBtr.Name = "B2";
  72.                     newBtrId = bt.Add(newBtr);
  73.                     trans.AddNewlyCreatedDBObject(newBtr, true);
  74.                     newBtr.AppendEntity(circle);
  75.                     newBtr.AppendEntity(text1);
  76.                     newBtr.AppendEntity(text2);
  77.                     trans.AddNewlyCreatedDBObject(circle, true);
  78.                     trans.AddNewlyCreatedDBObject(text1, true);
  79.                     trans.AddNewlyCreatedDBObject(text2, true);
  80.                 }
  81.                 trans.Commit();
  82.             }
  83.             catch
  84.             {
  85.                 ed.WriteMessage("生成B2图块出错!");
  86.             }
  87.             finally
  88.             {
  89.                 trans.Dispose();
  90.             }
  91.             return newBtrId;
  92.         }

  93.         //插入名为"B2"块参照到模型空间
  94.         public ObjectId InsertB2(ObjectId XBId, string Xstr1, string Xstr2, Point3d pos)
  95.         {
  96.             Database db = HostApplicationServices.WorkingDatabase;
  97.             Transaction trans = db.TransactionManager.StartTransaction();
  98.             try
  99.             {
  100.                 BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
  101.                 BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  102.                 BlockReference br = new BlockReference(pos, XBId);
  103.                 AttributeReference attRef = new AttributeReference();
  104.                 BlockTableRecord empBtr = (BlockTableRecord)trans.GetObject(bt["B2"], OpenMode.ForRead);
  105.                 foreach (ObjectId id in empBtr)
  106.                 {
  107.                     Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);
  108.                     if (ent is AttributeDefinition)
  109.                     {
  110.                         AttributeDefinition attDef = ((AttributeDefinition)(ent));
  111.                         attRef.SetPropertiesFrom(attDef);
  112.                         attRef.Position = new Point3d(0.5 + br.Position.X, 0.0 + br.Position.Y, 0.0 + br.Position.Z);
  113.                         if ((string)attRef.Tag == "Height")
  114.                         {
  115.                             attRef.TextString = Xstr1;
  116.                             attRef.HorizontalMode = TextHorizontalMode.TextLeft;
  117.                             attRef.VerticalMode = TextVerticalMode.TextBottom;
  118.                         }
  119.                         else
  120.                         {
  121.                             attRef.TextString = Xstr2;
  122.                             attRef.HorizontalMode = TextHorizontalMode.TextLeft;
  123.                             attRef.VerticalMode = TextVerticalMode.TextTop;
  124.                         }
  125.                     }
  126.                 }
  127.                 btr.AppendEntity(br);
  128.                 br.AttributeCollection.AppendAttribute(attRef);
  129.                 trans.AddNewlyCreatedDBObject(attRef, true);
  130.                 trans.AddNewlyCreatedDBObject(br, true);
  131.                 trans.Commit();
  132.                 return br.ObjectId;
  133.             }
  134.             finally
  135.             {
  136.                 trans.Dispose();
  137.             }
  138.         }
  139.     }
  140. }
发表于 2014-8-3 09:32:01 | 显示全部楼层
你看下原点处有没一个属性,,
注意
1.你的属性加入数据库在循环外,只针对最后一个
2.除默认样式外 其他样式要设置对齐点 且在设置样式后设置点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 13:37 , Processed in 0.152328 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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