.Net AutoCAD Mechanical OperateTransaction.Commit не работает - PullRequest
0 голосов
/ 19 марта 2019

Я создаю новый слой и хочу, чтобы пользователь выбрал объект, который будет принадлежать новому слою

Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;

 using (Transaction OperateTransaction = acCurDb.TransactionManager.StartTransaction())
{
    using (LayerTable LayerList = OperateTransaction.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable)
    {
        LayerTableRecord NewLayer = new LayerTableRecord();
        NewLayer.Color = Autodesk.AutoCAD.Colors.Color.FromColor(Color.FromArgb(RandomNum.Next(255), RandomNum.Next(255), RandomNum.Next(255)));
        NewLayer.Name = NewLayerName;

        OperateTransaction.AddNewlyCreatedDBObject(NewLayer, true);
    }

    OperateTransaction.Commit();
}


PromptSelectionResult acSSPrompt = Application.DocumentManager.MdiActiveDocument.Editor.GetSelection();

 if (acSSPrompt.Status == PromptStatus.OK)
 {
     //... Assign object to new layer
 }

В AutoCAD 2013 и AutoCAD 2013 это работает, когда пользователь выбирает объект, он может видеть новый слой в AutoCAD, но в AutoCAD Mechanical 2016 он не работает, если моя программа .Net не закрывается.

1 Ответ

0 голосов
/ 15 мая 2019

Я думаю, что вы забыли добавить слой к слою Table:

using (LayerTable LayerList = OperateTransaction.GetObject(acCurDb.LayerTableId, OpenMode.ForWrite) as LayerTable)
{
    LayerTableRecord NewLayer = new LayerTableRecord();
    NewLayer.Color = Autodesk.AutoCAD.Colors.Color.FromColor(Color.FromArgb(RandomNum.Next(255), RandomNum.Next(255), RandomNum.Next(255)));
    NewLayer.Name = NewLayerName;

    //add this
    LayerList.Add(NewLayer)

    OperateTransaction.AddNewlyCreatedDBObject(NewLayer, true);
}
...