2014-03-12 58 views
0

有沒有什麼辦法可以獲取指定的AcadAttribute在C#中現有圖形中的指定標題塊中的位置?c#中的AutoCad塊的工作

編輯:我的代碼是像波紋管,

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) 
    } 
} 

我想在邁亞特屬性的存在是爲了準確地插入圖像,這就是爲什麼我需要的AcadAttribute的位置的原因。

+0

任何努力這麼遠? –

+0

我有屬性作爲一個AcadAttribute,我已經檢查了它的所有屬性,但沒有一個返回該位置。 –

+0

發佈你到目前爲止的內容。看看你正在採取什麼方法將是有益的。出於好奇,你通過Interop做這件事的任何理由? –

回答

3

AutoDesk的神祕API已經讓你感覺有些不適應。你必須記住,在處理塊時,既有定義又有參考。該定義是您在創建塊時定義的內容。你告訴它什麼實體描述它,包括任何屬性。將該塊插入到圖形中時,它是一個BlockReference,它從實體繼承。在你的情況,你通過塊行走時有興趣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; 
    } 
} 
+0

謝謝洛克,它可以是我的解決方案,但它有一點問題。 doc.ModelSpace只包含活動文檔的塊引用,而不包含活動文檔中定義的塊。換句話說,ent對象只是設置爲活動文檔。 –