Scripting#

scripting_largeScripting

Command

SOF_TEST_SCRIPT_OPEN

Tooltip

Öffnet eine Palette für die auf Lua basierende Skripting-API.

Sidebar

Werkzeuge

Öffnet eine Palette für die auf Lua basierende Skripting-API.

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 (axis.domain.min, axis.domain.max)

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)

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 )