Scripting#
Command |
SOF_TEST_SCRIPT_OPEN |
Tooltip |
Öffnet eine Palette für die auf Lua basierende Skripting-API. |
Sidebar |
Werkzeuge |
Für viele Anwendungsfälle ist die Parametrik des bewährten Parametrik im Brückenbau (CABD-Konzept) ausreichend.
Darüber hinaus bietet SOFiPLUS für Grenzfälle eine auf Lua basierende Skripting-API.
Warnung
Diese Funktion ist eine Vorabversion. Sie kann sich jederzeit ändern.
Strukturpunkt erzeugen#
Die verfügbaren Eigenschaften sind:
number |
ElementNummer [1 …] |
position |
XYZ Position des Punktes. |
support_pzz |
Legerbedingung: Verfügbar sind pxx, pyy, pzz, px, py, pz, mb |
Punkt an Position (0,0,0) erzeugen:
local spt = sofistik.Point.new({0, 0, 0})
spt.number = 1
Position zu einem späteren Zeitpunkt ändern:
spt.position = {10, 0, 0}
Lager zuweisen:
spt.support_pzz = true
Variablen und Schleifen, um mehrere Punkte zu erzeugen:
local x = 10.0
local count = 20
for y=1,count do
local spt = sofistik.Point.new({ x, y, y*0.1 })
end
Strukturlinie erzeugen#
Die verfügbaren Eigenschaften sind:
number |
ElementNummer [1 …] |
group |
Primäre Gruppennummer. |
type |
Stabtyp: CENTRIC, REFERENCE, TRUSS, CABLE, SECTION, NONE |
section |
Querschnittsnummer. |
section_at_start |
Querschnittsnummer am Anfang. |
section_at_end |
Querschnittsnummer am Ende. |
geometry |
Geometrie des Objekts ändern. |
length |
Länge der Kurve. |
start_point |
|
end_point |
Linie zwischen zwei Punkten erzeugen:
local sln = sofistik.Line.new()
sln.number = 1
area.group = 99
sln.geometry:set_line({0, 0, 0}, {1, 0, 0})
Strukturlinie als Polylinie erstellen, d.h. mehrere Punkte verbinden, beginnend bei (0,0,0):
local sln = sofistik.Line.new()
sln.geometry
:move_to({0, 0, 0})
:line_to({1, 0, 0})
:line_to({1, 1, 0})
:line_to({2, 3, 0})
Gibt die Länge der Linie auf der Konsole aus:
print( sln.length )
Querschnitt zuweisen:
sln.section = 5
Unterschiedliche Querschnitte am Anfang und Ende mit linearer Interpolation zuweisen:
sln.section_at_start = 1
sln.section_at_end = 2
Stabtyp wählen:
sln.type = SLN.CENTRIC
Strukturfläche erzeugen#
Die verfügbaren Eigenschaften sind:
number |
ElementNummer [1 …] |
group |
Primäre Gruppennummer. |
thickness |
Elementdicke. |
geometry |
Geometrie des Objekts ändern. |
alignment |
Richtet das Koordinatensystem beispielsweise an einem Strukturpunkt aus. |
Erstellet ein Rechteck mit der Dicke 0.2:
local area = sofistik.Area.new()
area.number = 1
area.group = 99
area.thickness = 0.2
area.geometry:set_quad({0, 0, 0}, {1, 0, 0}, {1,1,0}, {0,1,0})
Erstellt ein Dreieck:
area.geometry:set_tri({0, 0, 0}, {1, 0, 0}, {1,1,0})
Erstellt eine beliebige polygonale Fläche:
local area = sofistik.Area.new()
area.geometry
:move_to({0, 0, 0})
:line_to({1, 0, 0})
:line_to({2, 0.5, 0})
:line_to({1, 1, 0})
:line_to({0, 1, 0})
:close()
Generierte Elemente vertikal ausrichten:
area.align_elements = sofistik.SAR.AlignTop
area.align_elements = sofistik.SAR.AlignCenter
area.align_elements = sofistik.SAR.AlignBottom
Gemeinsame Funktionen an Elementen#
Elementnummern zuweisen.
Nummer zuweisen:
elem.number = 1
Bemerkung
Ist die Nummer bereits einem anderen Element zugeordnet, wird stattdessen die nächste freie Nummer vergeben.
Objekte verschieben.
Verschiebt das Objekt um eine relative Entfernung von 1.0 entlang global X, 2.0 entlang global Y und -3.5 entlang global Z:
spt:move({ 1, 2, -3.5 })
Lokale x-Achse einer Fläche relativ zu einem Punkt ausrichten und um lokal z drehen
sar.alignment.target = spt
sar.angle = 90
CABD / Brücke: Achse erzeugen#
Die verfügbaren Eigenschaften sind:
geometry |
Legt die Geometrie der Achse als 3D-Kurve fest. |
plan_view |
Legt die Geometrie der Achse als Kombination aus geometrischen Objekten in Draufsicht und Ansicht fest. |
placements |
Ändert die Placements, die der Achse zugeordnet sind. |
secondary |
Ermöglicht den Zugriff auf Sekundärachsen (z. B. Offset-Kurven). |
variables |
Variable Verläufe entlang der Achse. Wird von Querschnitten und Offset-Kurven verwendet. |
domain |
Min and max Stationswerte ( |
Achse AXIS
als 3D-Linie entlang global X mit der Länge 30.0 erzeugen:
local axis = sofistik.Axis.create_primary_3d("AXIS")
axis.geometry:set_line({0, 0, 0}, {30, 0, 0})
Achse AXIS
als Draufsicht erzeugen:
local axis = sofistik.Axis.create_plan_view_elevation("AXIS")
axis.plan_view:line(10)
axis.plan_view:clothoid(40, 999, 100)
axis.plan_view:arc(40, 100)
Prüft, ob eine Achse von einer 3D-Kurve abgeleitet ist (create_primary_3d
):
if axis.is_3d then
print("it is a free curve")
end
Lassen Sie uns Placements hinzufügen.
Placements an bestimmten Stationen erzeugen:
axis.placements:create_at_s(0)
axis.placements:create_at_s(10.5)
Lassen Sie uns Strukturlinien zwischen Placements erzeugen.
Placements an bestimmten Stationen erzeugen:
local axis = sofistik.Axis.create("AXIS")
axis.geometry:set_line({0, 0, 0}, {30, 0, 0})
local plc1 = axis.placements:create_at_s(0)
local plc2 = axis.placements:create_at_s(10.5)
local sln = sofistik.Line.new(gax, plc1, plc2)
sln.section = 1
Lassen Sie uns einen Versatz der Sekundärachsen um konstante Abstände entlang Y und Z (lokal zur Primärachse) hinzufügen.
Bemerkung
Der Name einer Sekundärachse muss ein einzelner Großbuchstabe aus dem Bereich A-Z sein.
axis.secondary:create_offset("L", -4.0, 0.0)
axis.secondary:create_offset("R", 4.0, 0.0)
Fügt einen Versatz der Sekundärachse mit dem Abstand in lokalem Y
hinzu, der durch eine Variable H
definiert wird.
Bemerkung
Verfügbar ab Version 2023.
axis.variables:create("H")
axis.secondary:create_offset("R", "H", 0.0)
CABD / Brücke : Vertices von Elementen verbinden#
SOFiPLUS- und AutoCAD-Objekte bieten verschiedene interessante Vertices mit Namen an. Diese Vertices können verknüpft werden.
Beispielsweise kann ein Endpunkt einer Strukturlinie mit einem Vertex eines Strukturflächenpolygons oder einem Endpunkt einer anderen Strukturlinie oder auch mit einem Placement auf einer Achse verknüpft werden.
In allen Fällen kann (optional) ein relativer Offset angegeben werden.
Ein Anwendungsfall ist, die Kabel einer Schrägseilbrücke mit den Placements auf einer Achse zu verknüpfen und so die Modifikation der Geometrie zu vereinfachen.
Achtung
Vermeiden Sie zirkuläre Abhängigkeiten.
SOFiPLUS beendet die Verarbeitung der assoziativen Verknüpfungen, wenn eine zirkuläre Abhängigkeit auftritt. Es kann schwierig sein, sie zu verarbeiten.
Die Quellparameter werden zuerst angegeben, die Zielparameter zuletzt:
link_endpoint_to_endpoint(sln, "sln.startpoint", sar, "vertex.0")
Link zum Placement:
link_endpoint_to_placement_on_axis(axis, plc, sln, "sln.startpoint")
Link zum Placement mit Offset:
link_endpoint_to_placement_on_axis(axis, plc, sln, "sln.endpoint", {1,0,0})
Lasten#
In der Version 2024 wurde eine grundlegende Unterstützung für freie Lasten hinzugefügt.
Es gibt einige Funktionen, die noch nicht unterstützt werden:
Elementgebundene Lasten
Relative und absolute Offsets bei Linienlasten
Trapezlasten
Punktlast erzeugen:
load = sofistik.PointLoad.new()
load.start = {10,0,0}
load.type = sofistik.LoadType.PG
load.value = 10.0
Linienlast erzeugen:
load = sofistik.LineLoad.new()
load.start = {10,0,0}
load.end = {20,0,0}
load.type = sofistik.LoadType.PG
load.value = 10.0
Flächenlast erzeugen:
area = ... -- This needs to be a closed segmented curve
load = sofistik.AreaLoad.new()
load.copy_geometry_from(crv)
load.type = sofistik.LoadType.PG
load.value = 10.0
AutoCAD Befehle, Objekte und Geometrie#
Sie können jederzeit in Ihrem Skript beliebige AutoCAD-Befehle ausführen.
Bemerkung
Wenn ein AutoCAD-Befehl nicht ordnungsgemäß beendet wird, wird die Skriptausführung gestoppt.
Zoom Grenzen:
acad.command[['_.zoom _e]]
AutoCAD Linie erzeugen:
acad.command[[_line 0,0,0 0,5,0\n\n]]
Bemerkung
Beachten Sie, dass \n
eine neue Zeile anzeigt und das Drücken von RETURN
im interaktiven Modus simuliert.
Die meisten Objekte teilen diese Eigenschaften:
layer |
AutoCAD Layername |
print( sln.layer )
Kurvenähnliche Objekte teilen diese Eigenschaften:
length |
Länge der Kurve. |
start_point |
|
end_point |
print( sln.length )