Przykładowy skrypt interfejsu API: generowanie punktów COGO

Umożliwia utworzenie nowych węzłów w dodatku Autodesk Dynamo for Civil 3D w celu tworzenia punktów, dodawania punktów do grupy punktów i tworzenia powierzchni na podstawie grupy punktów.

Przykładowy skrypt Dynamo: CoGoPoints.dyn

Przykładowy projekt: CoGoPoints.dwg

  1. Utwórz nowy projekt C# o nazwie CoGoPoints Class Library(.Net Framework) z użyciem .NET Framework 4.7.
  2. Dodaj pliki: Point.cs, PointGroup.cs i Surface.cs do projektu.
  3. Dodaj odniesienia do tych plików, takie jak AeccDbMgd.dll itd., ze ścieżki instalatora programu Civil 3D.
  4. Skompiluj rozwiązanie, a następnie wygeneruj plik CoGoPoints.dll.
  5. Uruchom program Civil 3D i otwórz plik CoGoPoints.dwg.
  6. Kliknij kartę Zarządzaj panel Visual Programming (Programowanie wizualne) Dynamo .
  7. Wybierz kolejno Plik Importuj bibliotekę i wybierz plik CoGoPoints.dll.

    Węzły, które są tworzone podczas importu pliku CoGoPoints.dll, są przedstawione na poniższej ilustracji.

  8. Otwórz i uruchom skrypt CoGoPoints.dyn.

    Punkty COGO są tworzone na rysunku i dodawane do grupy punktów, natomiast powierzchnia jest tworzona na podstawie grupy punktów.

W dodatku Dynamo dostępne są dwie klasy pozwalające utworzyć nowe węzły i dodać mechanizm śledzenia do nowych węzłów.
  1. Autodesk.AutoCAD.DynamoNodes.ObjectBase: zapewnia hermetyzację klasy Autodesk.AutoCAD.DatabaseServices.DBObject
  2. Autodesk.AutoCAD.DynamoNodes.Object: wyprowadzona z klasy Autodesk.AutoCAD.DynamoNodes.ObjectBase w celu rozszerzenia właściwości lub funkcji zgodnie z klasą Autodesk.AutoCAD.DatabaseServices.Object

Dodatek Dynamo oferuje dwa sposoby realizacji mechanizmu śledzenia. Jeden z nich polega na użyciu istniejącej metody (CommonConstruct) podczas tworzenia nowych węzłów. Innym sposobem jest napisanie kodu śledzenia przy użyciu szablonu.

Aby zrealizować mechanizm śledzenia nowych węzłów, klasy muszą być wyprowadzone z klasy Autodesk.AutoCAD.DynamoNodes.ObjectBase lub Autodesk.AutoCAD.DynamoNodes.Object. Śledzony węzeł musi mieć wyjście utworzonej klasy węzła, aby śledzenie było prawidłowe.

Używanie metody śledzenia (CommonConstruct)

Funkcja CommonConstruct jest tworzona zarówno w klasie Autodesk.AutoCAD.DynamoNodes.ObjectBase, jak i Autodesk.AutoCAD.DynamoNodes.Object.

Autodesk.AutoCAD.DynamoNodes.ObjectBase Autodesk.AutoCAD.DynamoNodes.Object

Możesz utworzyć klasy do dziedziczenia klasy Autodesk.AutoCAD.DynamoNodes.ObjectBase lub Autodesk.AutoCAD.DynamoNodes.Object. Powyższe metody można wywołać po utworzeniu nowych węzłów zgodnie z odziedziczoną relacją. Przykładowo zwróćmy uwagę na następujący węzeł PointGroup.CreateFromPoints.

Węzeł tworzy grupę punktów w programie Civil 3D na podstawie listy punktów.

Klasa Autodesk.Civil.DatabaseServices.PointGroup definiuje grupę punktów w programie Civil 3D na podstawie klasy Autodesk.AutoCAD.DatabaseServices.Object. Konieczne jest utworzenie nowej klasy o nazwie PointGroup, wyprowadzonej z klasy Autodesk.AutoCAD.DynamoNodes.Objectbase, aby hermetyzować w niej typ grupy punktów programu Civil 3D. Atrybut DynamoServices.RegisterForTrace może zostać dodany do klasy PointGroup, aby zrealizować mechanizm śledzenia. Nie jest to wymagane, ponieważ dodatek Dynamo obsługuje go domyślnie, ale jest to dobra konwencja kodowania.

Węzeł CreateFromPoints może teraz zostać zdefiniowany w klasie PointGroup. Ze względu na odziedziczoną relację funkcja CommonConstruct w klasie Autodesk.AutoCAD.DynamoNodes.ObjectBase może zostać wywołana.

Metoda TNode jest typem węzła i jest wymagana do dziedziczenia klasy Autodesk.AutoCAD.DynamoNodes.ObjectBase.

W tym przykładzie:
TNode = CogoPoints.PointGroup
TObject jest typem obiektu programu AutoCAD wymaganym do dziedziczenia klasy Autodesk.AutoCAD.DatabaseServices.DBObject.
W tym przykładzie:
TObject = Autodesk.Civil.DatabaseServices.PointGroup
Funkcja objectCreator tworzy obiekt. W tym przykładzie jest ona zdefiniowana jako utworzenie nowej grupy punktów.

Funkcja objectUpdater aktualizuje obiekt. W tym przykładzie jest ona zdefiniowana jako zaktualizowanie istniejącej grupy punktów.

Funkcja CommonConstruct próbuje odnaleźć istniejące obiekty ze śledzonego uchwytu. Po ich znalezieniu aktualizuje się za pomocą wywołania objectUpdater z wartością isExisting==true. Jeżeli aktualizacja nie powiedzie się, objectCreator zostanie wywołany w celu utworzenia nowego obiektu, a następnie objectUpdater zostanie wywołany z wartością isExisting==false.

Funkcja CommonConstruct próbuje zaktualizować istniejące obiekty w bazie danych z tą samą wartością śledzonego uchwytu. Jeżeli się to nie powiedzie, utworzy nowy obiekt. Jeśli obiekt nie obsługuje aktualizacji, możesz zwrócić wartość isExisting==false. Oznacza to, że utworzysz nowy obiekt i usuniesz stary. Funkcja CommonConstruct będzie nadal starać się zachować tę samą wartość uchwytu w tym przypadku.

Pełne przykładowe kody są wyświetlane w pliku PointGroup.cs, a metoda CommonConstruct w klasie Autodesk.AutoCAD.DynamoNodes.Object jest taka jak opisano powyżej.

Korzystanie z szablonu kodu śledzenia

Można napisać kod śledzenia przy użyciu następującego szablonu. Jednak klasa dla nowych węzłów nadal musi dziedziczyć klasę Autodesk.AutoCAD.DynamoNodes.Object lub Autodesk.AutoCAD.DynamoNodes.Entity.

Można wypełnić zarówno kod tworzenia jak i aktualizacji, aby zrealizować kod śledzenia w powyższym szablonie.

Informacje o metodzie DocumentContext

Metoda DocumentContext zapewnia uzyskanie blokady dokumentu w celu dostępu w zakresie odczytu/zapisu do bazy danych i utworzenia transakcji do otwarcia obiektów bazy danych. Każdy węzeł, który chce odczytywać lub zapisywać obiekty bazy danych, musi użyć powyższej metody.