C# 如何使用interop COM在autocad中更改块参照的颜色
我无法更改acadblock的颜色。但我可以改变线条和圆弧等的颜色,但当我尝试改变块颜色时,它不会改变。有人能告诉我怎么做吗 这里我提到了我的代码:C# 如何使用interop COM在autocad中更改块参照的颜色,c#,autocad,C#,Autocad,我无法更改acadblock的颜色。但我可以改变线条和圆弧等的颜色,但当我尝试改变块颜色时,它不会改变。有人能告诉我怎么做吗 这里我提到了我的代码: AcadApplication acadApp; AcadDocument curDoc; AcadSelectionSet selset; AcadLine lin; AcadBlockReference blkRef; short[] ftype =
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();
提前感谢。您需要使用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 interop库相匹配。谢谢Locke先生。。它只工作部分块,而另一些块不工作。如果在我创建块图形之前,将“颜色”设置为“byBlock”意味着“创建块”可以更改颜色,并且工作正常。否则它就不起作用了。。。