Печать соответствующего имени слоя в файле dwg
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace layerlist { public class Class1 { // This method can have any name [CommandMethod("DL")] public void TestDisplayLayers() { { Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; Editor ed = doc.Editor; Transaction tr = doc.Database.TransactionManager.StartTransaction(); var curSpace = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite); List<string> info = LayersToList(db); PromptPointResult ppr; PromptPointOptions ppo = new PromptPointOptions(""); ppo.Message = "\n Select the place for print output:"; //get the coordinates from user ppr = ed.GetPoint(ppo); if (ppr.Status != PromptStatus.OK) return; Point3d startPoint = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem); //Point3d startPoint1 = startPoint.Subtract(); Vector3d disp = new Vector3d(0.0, -2.0 * db.Textsize, 0.0); Vector3d disp2 = new Vector3d(0.0, -2.0 * db.Textsize, 0.0); TextStyleTable ts = (TextStyleTable)tr.GetObject(db.TextStyleTableId, OpenMode.ForRead); ObjectId mtStyleid = db.Textstyle; if (ts.Has("NAL-TEXT")) { mtStyleid = ts["NAL-FORMAT"]; } foreach (string lname in info) { MText mtext = new MText(); mtext.Location = startPoint; mtext.Width = 75.207; mtext.Height = 1.488; mtext.TextStyleId = mtStyleid; mtext.Contents = "\n" + lname; curSpace.AppendEntity(mtext); tr.AddNewlyCreatedDBObject(mtext, true); db.TransactionManager.QueueForGraphicsFlush(); startPoint += disp; } tr.Commit(); } } public List<string> LayersToList(Database db) { List<string> lstlay = new List<string>(); LayerTableRecord layer; using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction()) { LayerTable lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; foreach (ObjectId layerId in lt) { layer = tr.GetObject(layerId, OpenMode.ForWrite) as LayerTableRecord; lstlay.Add(layer.Name); } } return lstlay; } } }
Что я уже пробовал:
Это мой код, который возвращает мне имя слоя dwg-файла, но вместо этого я хочу печатать только слои, которые начинались с NL, например NL-log и т. д.
Richard Deeming
Поэтому проверьте, совпадает ли имя слоя, прежде чем добавлять его в список.
Или проверьте, совпадает ли имя слоя, прежде чем обрабатывать его в пределах foreach
петля.lname.StartsWith("NL")
В чем проблема?