我们可以从 LayerTable 中获取 LayerTableRecord 与 layerName 直接
大家好,有没有更好的方法来确定层名称是否等于向下发布的代码中的“0”?代码工作没有任何错误,但我在错误列表中收到警告说:(可能错误的空语句)但这条消息不会伤害和程序构建成功。LayerTable tbl=(LayerTable)tr.GetObject(db.LayerTableId,OpenMode.ForRead);。foreach(tbl中的ObjectId项)。
{。
LayerTableRecord Layrec=(LayerTableRecord)tr.GetObject(项目,OpenMode.ForWrite);。
if(Layrec.Name=="0"); // 这个分号用绿色下划线,这与我提到的错误有关。。
{。
Layrec.LineWeight=LineWeight.LineWeight005;。
休息;。
}。
}。
我可以直接从layerTableLayer获取LayerTableRecord而不循环到表中吗?非常感谢提前。
**** Hidden Message *****
参考
编译器警告(3级)CS0642
:
https://msdn.microsoft.com/en-us/library/9x19t380.aspx 非常感谢凯瑞的帮助,
现在罪犯已经知道了。 编码器,现在错误已得到纠正,我花了一点时间看看您实际上正在尝试实现的目标。您的例程可能更经济,目前您正在迭代整个LayerTable,并且只在2个实例中执行操作。附加的代码将迭代较小的列表LayerNames检查该层是否存在并相应地执行操作,这大大降低了处理器的密集程度。对于傻笑,我还添加了一条初始化消息。使用系统;。
使用Autodesk.AutoCAD.Runtime;。
使用Autodesk.AutoCAD.DatabaseServices;。
。
使用AcadApp=Autodesk.AutoCAD.ApplicationServices.Core.Application;。
。
[程序集:命令类(类型(FindLayer.MyCommands))]。
。
命名空间FindLayer{。
使用System.Collections.Generic;。
。
公共类我的命令{。
。
[命令方法("MyGroup","MyCommand","MyCommand dLocal",CommandFlags.Modal)]。
公共无效MyCommand(){。
var doc=AcadApp.DocumentManager.MdiActiveDocument;。
var ed=doc.Editor;。
var db=doc.Database;。
listlayerNames=new List{"Layer1","layer2"};。
。
使用(var tr=db.TransactionManager.StartTransaction ()) {。
尝试{。
var layerTbl=(LayerTable)tr.GetObject(db.LayerTableId,OpenMode.ForRead);。
foreach(layerNames中的字符串layerName){。
如果(layerTbl.Has){。
var layerRecord=(LayerTableRecord)layerTbl. GetObject(OpenMode.ForWrite);。
layerRecord.LineWeight=LineWeight.LineWeight005;。
}。
}。
}。
捕获(System.Exceptionex){。
ed.WriteMessage("\nError:"+ex.Message);。
}。
tr.Commit();。
}。
}。
}。
。
公共类InitMy命令:Autodesk.AutoCAD.Runtime.IExtensionApplication{。
公共空初始化(){。
AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage。
"\n\t\t\t***键入MyCommand将第1层和第2层LineWeight修改为0.05\t***");。
}。
。
公共无效终止(){。
AcadApp.DocumentManager.MdiActiveDocument.Editor.WriteMessage("清理...");。
}。
}。
}。
。
添加Piccy:。
没问题,我只是用力敲击按键,直到代码位排成一行....
页:
[1]