Переименовывание объектов
Возможно переименовывать объекты, чтобы сохранить структуру имен или избежать конфликтов с именами объектов из других вставленных или прикрепленных внешними ссылками чертежах. Свойство Name используется для получения текущего имени или изменения имени именованного объекта. Вы можете переименовать любой именованный объект, за исключением тех, которые зарезервированы AutoCAD, например, слой 0 или тип линии CONTINUOUS. Имена могут содержать до 255 символов. Помимо букв и цифр, имена могут содержать пробелы (хотя AutoCAD удаляет пробелы, которые появляются непосредственно перед и после имени) и любые специальные символы, не используемые Microsoft® Windows® или AutoCADдля других целей. Специальные символы, которые нельзя использовать:
- символы меньше и больше (< >);
- косые и обратные косые черты (/ \);
- кавычки (");
- двоеточие (:);
- точка с запятой (;);
- вопросительный знак (?);
- запятая (,);
- звездочка (*);
- вертикальная черта (|);
- знак равенства (=);
- одинарные кавычки ('). Также нельзя использовать специальные символы, созданные с помощью шрифтов Unicode (эмоджи и т.д.). В коде ниже создается копия слоя "0" и переименовывается в "MyLayer"
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
[CommandMethod("RenameLayer")]
public static void RenameLayer()
{
// Get the current document and database
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Returns the layer table for the current database
LayerTable acLyrTbl;
acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId,
OpenMode.ForWrite) as LayerTable;
// Clone layer 0 (copy it and its properties) as a new layer
LayerTableRecord acLyrTblRec;
acLyrTblRec = acTrans.GetObject(acLyrTbl["0"],
OpenMode.ForRead).Clone() as LayerTableRecord;
// Change the name of the cloned layer
acLyrTblRec.Name = "MyLayer";
// Add the cloned layer to the Layer table and transaction
acLyrTbl.Add(acLyrTblRec);
acTrans.AddNewlyCreatedDBObject(acLyrTblRec, true);
// Save changes and dispose of the transaction
acTrans.Commit();
}
}
Примечание: в nanoCAD наблюдается разное поведение функций при попытке задать неподдерживаемы символы, где-то это возможно, где-то возникнет фатальная ошибка. Лучший вариант -- осуществлять фильтрация у себя на стороне кола приложения, а не полагаться на API приложения.