Как получить, если эскиз чертежа редактируется? (Autodesk Inventor C ++ API) - PullRequest
0 голосов
/ 15 октября 2019

Мне нужно добавить эскиз чертежа в Inventor и отредактировать его. Однако, если другой эскиз уже редактируется, моя программа завершает работу, и даже попытка / отлов не помогает. Я не могу найти свойство эскиза, показывающее, редактируется оно или нет. Моя основная часть кода здесь:

// All of these three functions pass try/catch perfectly. Program never terminates
Inventor::Application^ App = (Inventor::Application^)Marshal::GetActiveObject("Inventor.Application");
DrawingDocument^ Doc = (DrawingDocument^)App->ActiveDocument;
Sheet^ Sh = Doc->ActiveSheet;

DrawingSketch^ Sk;

try
{
    Sh->Sketches->Add();
    Sk = Sh->Sketches[Sh->Sketches->Count];
    Sk->Edit(); // Crushes the program completely if another sketch is being edited
}
catch (...)
{
    return;
}

Я попытался перебрать все эскизы и закрыть их все. Это ведет себя так, как я не могу понять.

try
{
    // Note: in Inventor indexes definitely start from 1
    for (int i = 1; i <= Sh->Sketches->Count; i++)
    {
        Sk = Sh->Sketches[i];
        Sk->ExitEdit();
    }
}
catch (...)
{
    return;
}

Например, когда эскиз 2 открыт, первый цикл (i = 1), который пытается закрыть эскиз 1, каким-то образом закрывает эскиз 2. И вторая итерация (i = 2), которая теперь не может закрыть эскиз 2, поскольку он уже закрыт, вызывает 'catch' и далее 'return'.

1 Ответ

1 голос
/ 17 октября 2019

Я не знаком с C ++, но вот пример VBA, как обнаружить эскиз чертежа в режиме редактирования

Dim oDrawing As DrawingDocument
Set oDrawing = ThisApplication.ActiveDocument

Dim oSheet As Sheet
Set oSheet = oDrawing.ActiveSheet

Dim editedObject As Variant
Set editedObject = ThisApplication.ActiveEditObject

If editedObject.Type = ObjectTypeEnum.kDrawingSketchObject Then
    Dim activeEditSketch As DrawingSketch
    Set activeEditSketch = editedObject
    activeEditSketch.ExitEdit
End If

Dim oSketch As DrawingSketch
Set oSketch = oSheet.Sketches.Add()

Надеюсь, вы можете преобразовать этот код в C ++

...