有没有办法在使用C#的现有图形中的指定标题栏中获取指定AcadAttribute的位置?
编辑:我的代码类似于贝娄,
AcadBlock myBlock = myAcadDoc.Database.Blocks.Items(block_Name);
AcadAttribute myAtt;
foreach(AcadEntity entity in myBlock)
{
myAtt = entity as AcadAttribute;
if(myAtt == null) continue;
if(myAtt.TagString == "Specified_String")
{
//Now i want to insert an image exactly where the myAtt attribute is exists
myAcadDoc.Database.ModelSpace.AddRoster("My image path", myAtt.Position /*myAtt does not have Position property*/, 50.0, 0)
}
}
我想在myAtt属性存在的地方准确插入图像,这就是我需要AcadAttribute位置的原因。
答案 0 :(得分:3)
AutoDesk的神秘API让你绊倒了一点。您必须记住,在使用块时,既有定义又有引用。定义是您在创建块时定义的。你告诉它实体描述它,包括任何属性。将该块插入到图形中时,它是一个BlockReference,它继承自Entity。在您的情况下,您在遍历块时对AttributeReference感兴趣,因为您关心它相对于模型空间的位置,而不仅仅是它定义的块。
foreach (AcadEntity ent in doc.ModelSpace)
{
var block = ent as AcadBlockReference;
if (block == null || block.Name != block_Name)
continue;
foreach (AcadAttributeReference att in block.GetAttributes())
{
if (att.TagString != "Specified_String")
continue;
doc.ModelSpace.AddRaster(
@"C:\Users\Public\Pictures\Sample Pictures\Jellyfish.jpg",
att.InsertionPoint, 1, 0);
break;
}
}