Vorschau: Skripting#
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 oder sogar entfernt werden.
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
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 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 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 })
CABD / Bridge: 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 |
Sekundärachsen hinzufügen (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("AXIS")
axis.geometry:set_line({0, 0, 0}, {30, 0, 0})
Achse AXIS
als Draufsicht erzeugen:
local axis = sofistik.Axis.create("AXIS")
axis.plan_view:line(10)
axis.plan_view:clothoid(40, 999, 100)
axis.plan_view:arc(40, 100)
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)
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 )