Support Forum

[Frage] Geländepunkte mit Visual Scripting erzeugen

Schlagworte:
  • Geländepunkte

Gibt es eine Möglichkeit mit VS Geländepunkte zu erstellen? Es gibt das Node GetVertices oder 3DPoint. Beide erstellen 3D-Punkte. Das sind aber nur Datensätze die man nur innerhalb eines Skripts verarbeiten kann. Modelldaten in Form von Geländepunkten entstehen dadurch nicht. Kann man eventuell mit dem Node ExecPythonScript Geländepunkte schreiben?

Gruß Felix
Allplan 2024-0-1

Zitiert von: f_hoeser
Gibt es eine Möglichkeit mit VS Geländepunkte zu erstellen? Es gibt das Node GetVertices oder 3DPoint. Beide erstellen 3D-Punkte. Das sind aber nur Datensätze die man nur innerhalb eines Skripts verarbeiten kann. Modelldaten in Form von Geländepunkten entstehen dadurch nicht. Kann man eventuell mit dem Node ExecPythonScript Geländepunkte schreiben?

Hallo Felix

die Funktionalität eines Geländepunktes ist zwar in dem Python API von Allplan exponiert, aber noch nicht in VisualScripting implementiert. D.h. es gibt (noch!) keine Nodes dafür. Wenn du es aber dringend brauchst, kannst du es über ExecPythonScript auch erzeugen. Man braucht aber zumindest grundlegende Programmierkenntnisse dafür.

Der Geländepunkt ist in Allplan Python API über die Klasse NemAll_Python_BasisElements.Symbol3DElement() exponiert.

Um so ein Geländepunkt zu erzeugen, braucht man 3 Argumente:

  • Common properties -> Klasse, die allgemeine Eigenschaften beschreibt: Strichstärke, Strichart, Farbe
  • Symbol 3D Properties -> Klasse, die spezifische Eigenschaften des Geländepunktes beschreibt, wie z.B. Symbol, mit dem der Punkt im Modell dargestellt wird
  • Geometry object -> beschreibung der Geometrie. Geometrie eines Geländepunkts wird einfach durch 3DPoint beschrieben. Den bekommst du eben von den von dir erwähnten Nodes 3DPoint.

Hier mal ein Beispielcode, den du in ExecPythonScript einfügen kannst:

import NemAll_Python_BasisElements as AllplanBasisElements
import NemAll_Python_BaseElements as AllplanBaseElements

def function_to_execute(point_3d):
    common_props = AllplanBaseElements.CommonProperties()
    common_props.GetGlobalProperties()
    symbol_3d_props = AllplanBasisElements.Symbol3DProperties() 
    symbol_3d_element = AllplanBasisElements.Symbol3DElement(common_props,symbol_3d_props,point_3d)
    return symbol_3d_element

Wie du siehst, brauch die Funktion ein Argument von einem 3DPoint. Den musst du an den Node ExecPythonScript übergeben (sh. Anhang)

Wie gesagt, das ist nur eine Zwischenlösung für dein Problem. Wir arbeiten daran, alle Klassen, die in API verfügbar sind, auch als Nodes zur Verfügung zu stellen.

Anhänge (1)

Typ: image/png
90-mal heruntergeladen
Größe: 17,52 KiB

Ich habe mal ein Node Symbol3DElement erstellt, mit dem man 3D-Punkte in 3D-Symbolpunkte umwandeln kann.
Dabei wird folgende Einstellung für die Symbol-Punkte verwendet:
-Symbol Kreis (ID=2)
-Größe 3 mm
-Maßstabsabhängig = Ja

Das beiliegende zip einfach in folgendes zu erstellende Verzeichnis entpacken:
Std\VisualScripts\Basis\Objects

Das im Screenshot zu sehende Script "ReadPoints" gehört in's Verzeichnis Std\Library\VisualScripting.

@Allplan
Ihr dürft den Node gerne in die Visual-Scripting-Bibliothek einbauen.

Anhänge (3)

Typ: application/zip
666-mal heruntergeladen
Größe: 2,26 KiB
Typ: application/zip
706-mal heruntergeladen
Größe: 7,74 KiB
Typ: image/png
169-mal heruntergeladen
Größe: 86,76 KiB