yshf 发表于 2014-8-3 08:04:25

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

各位专家,以下程序先生成由一个圆和标记为"Height”、"DotMake"的两个属性文字组成的块,然后再选取点插入这个属性块,但是只有圆显示出来,属性文字没有显示出来,请问这是为什么?using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Colors;
namespace Ctest
{
    public class Class1
    {
      
      public void test()
      {
            ObjectId TkId = CreateB2();
            Document acDoc = Application.DocumentManager.MdiActiveDocument;
            PromptPointResult pPtRes;
            PromptPointOptions pPtOpts = new PromptPointOptions("\n请指定块的插入点<按ESC键结束>: ");
            pPtOpts.UseBasePoint = false;
            bool Pdbz = true;
            int i = 1;
            while (Pdbz == true)
            {
                pPtRes = acDoc.Editor.GetPoint(pPtOpts);
                Point3d ptCrd = pPtRes.Value;
                if (pPtRes.Status == PromptStatus.OK)
                {
                  InsertB2(TkId, i.ToString(), (1000 * i).ToString(), ptCrd);
                  i = i + 1;
                }
                else
                {
                  Pdbz = false;
                }
            }
      }

      //生成B2"图块
      public ObjectId CreateB2()
      {
            ObjectId newBtrId = new ObjectId();
            Database db = HostApplicationServices.WorkingDatabase;
            Transaction trans = db.TransactionManager.StartTransaction();
            Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
            try
            {
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
                if ((bt.Has("B2")))
                {
                  newBtrId = bt["B2"];
                }
                else
                {
                  Point3d center = new Point3d(0.0, 0.0, 0.0);
                  Circle circle = new Circle(center, Vector3d.ZAxis, 0.5);
                  circle.ColorIndex = 1;
                  AttributeDefinition text1 = new AttributeDefinition(new Point3d(0.5, 0.0, 0.0), "", "Height", "", db.Textstyle);
                  text1.ColorIndex = 1;
                  text1.Height = 1.0;
                  text1.HorizontalMode = TextHorizontalMode.TextLeft;
                  text1.VerticalMode = TextVerticalMode.TextBottom;
                  AttributeDefinition text2 = new AttributeDefinition(new Point3d(0.5, 0.0, 0.0), "", "DotMake", "", db.Textstyle);
                  text2.ColorIndex = 3;
                  text2.Height = 1.0;
                  text2.HorizontalMode = TextHorizontalMode.TextLeft;
                  text2.VerticalMode = TextVerticalMode.TextTop;
                  BlockTableRecord newBtr = new BlockTableRecord();
                  newBtr.Name = "B2";
                  newBtrId = bt.Add(newBtr);
                  trans.AddNewlyCreatedDBObject(newBtr, true);
                  newBtr.AppendEntity(circle);
                  newBtr.AppendEntity(text1);
                  newBtr.AppendEntity(text2);
                  trans.AddNewlyCreatedDBObject(circle, true);
                  trans.AddNewlyCreatedDBObject(text1, true);
                  trans.AddNewlyCreatedDBObject(text2, true);
                }
                trans.Commit();
            }
            catch
            {
                ed.WriteMessage("生成B2图块出错!");
            }
            finally
            {
                trans.Dispose();
            }
            return newBtrId;
      }

      //插入名为"B2"块参照到模型空间
      public ObjectId InsertB2(ObjectId XBId, string Xstr1, string Xstr2, Point3d pos)
      {
            Database db = HostApplicationServices.WorkingDatabase;
            Transaction trans = db.TransactionManager.StartTransaction();
            try
            {
                BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt, OpenMode.ForWrite);
                BlockReference br = new BlockReference(pos, XBId);
                AttributeReference attRef = new AttributeReference();
                BlockTableRecord empBtr = (BlockTableRecord)trans.GetObject(bt["B2"], OpenMode.ForRead);
                foreach (ObjectId id in empBtr)
                {
                  Entity ent = (Entity)trans.GetObject(id, OpenMode.ForRead, false);
                  if (ent is AttributeDefinition)
                  {
                        AttributeDefinition attDef = ((AttributeDefinition)(ent));
                        attRef.SetPropertiesFrom(attDef);
                        attRef.Position = new Point3d(0.5 + br.Position.X, 0.0 + br.Position.Y, 0.0 + br.Position.Z);
                        if ((string)attRef.Tag == "Height")
                        {
                            attRef.TextString = Xstr1;
                            attRef.HorizontalMode = TextHorizontalMode.TextLeft;
                            attRef.VerticalMode = TextVerticalMode.TextBottom;
                        }
                        else
                        {
                            attRef.TextString = Xstr2;
                            attRef.HorizontalMode = TextHorizontalMode.TextLeft;
                            attRef.VerticalMode = TextVerticalMode.TextTop;
                        }
                  }
                }
                btr.AppendEntity(br);
                br.AttributeCollection.AppendAttribute(attRef);
                trans.AddNewlyCreatedDBObject(attRef, true);
                trans.AddNewlyCreatedDBObject(br, true);
                trans.Commit();
                return br.ObjectId;
            }
            finally
            {
                trans.Dispose();
            }
      }
    }
}

雪山飞狐_lzh 发表于 2014-8-3 09:32:01

你看下原点处有没一个属性,,
注意
1.你的属性加入数据库在循环外,只针对最后一个
2.除默认样式外 其他样式要设置对齐点 且在设置样式后设置点
页: [1]
查看完整版本: [求助]为什么属性不能显示出来?