在c#中使用AutoCad块

时间:2014-03-12 07:10:23

标签: c# autocad

有没有办法在使用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位置的原因。

1 个答案:

答案 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;
    }
}