2013-10-04 42 views
0

我有問題可以更改acadblock的顏色。但我可以改變線條和弧線等的顏色。但是當我嘗試改變塊顏色時,它不會改變。任何機構可以告訴我該怎麼辦?如何更改autocad中使用互操作COM的塊引用的顏色

這裏我提到我的代碼:提前

 AcadApplication acadApp; 
     AcadDocument curDoc; 
     AcadSelectionSet selset; 
     AcadLine lin; 
     AcadBlockReference blkRef; 
     short[] ftype = new short[1]; 
     object[] fdata = new object[1]; 
     ftype[0] = 0; 
     fdata[0] = "Line,INSERT"; 

     acadApp = (AcadApplication)Marshal.GetActiveObject("Autocad.Application.18"); 
     curDoc = acadApp.ActiveDocument; 
     selset = curDoc.SelectionSets.Add("Selset2"); 
     selset.Select(AcSelect.acSelectionSetAll, null, null, ftype, fdata); 
     foreach (AcadEntity item in selset) 
     { 
      if (item.ObjectName == "AcDbLine") 
      { 
       item.color = ACAD_COLOR.acYellow; //here working fine 

      } 
      else if (item.ObjectName == "AcDbBlockReference") 
      { 
       item.color = ACAD_COLOR.acMagenta; //here does not working 

      } 
     } 
     selset.Delete(); 

謝謝..

回答

1

您需要創建和分配使用AcadApplication爲彩色對象工廠的顏色。

const string dwgPath = @"C:\Test.dwg"; 
var acadDoc = acadDocs.Open(dwgPath); 

foreach (AcadEntity ent in acadDoc.ModelSpace) 
{ 
    var block = ent as AcadBlockReference; 
    if (block == null) continue; 
    { 
     if (!block.Name.Equals("BlockName", StringComparison.CurrentCultureIgnoreCase)) continue; 

     var newColor = acadApp.GetInterfaceObject("AutoCAD.AcCmColor.18") as AcadAcCmColor; 
     if (newColor != null) 
     { 
      newColor.ColorIndex = AcColor.acMagenta; 
      block.TrueColor = newColor; 
     } 
    } 
} 

請注意,註冊的AcCmColor類必須與您加載的AutoCAD互操作庫匹配。

+0

謝謝mr.Locke ..它只工作一些塊和一些其他塊不工作。如果之前我創建塊的繪圖顏色設置爲byBlock意味着創建塊可以改變顏色,它的工作正常。否則它不工作... – Sivaperuman