Scripts#
Command |
SOF_TEST_SCRIPT_OPEN |
Tooltip |
Ouvre une palette pour l'API de script basée sur Lua. |
Sidebar |
Outils |
Pour de nombreux cas d’utilisation, les possibilités fournies par la méthode éprouvée et testée Paramétrisation pour la conception de pont (CABD) sont suffisantes.
Pour les cas d’utilisation spécifiques, SOFiPLUS fournit une API de script basée sur le langage Lua.
Avertissement
Cette fonctionnalité est en préversion publique. Elle peut être modifiée à tout moment.
Créer un point structurel#
Les propriétés disponibles sont :
number |
Numéro d’élément [1 …] |
position |
Coordonnées XYZ du point. |
support_pzz |
Appuis. Disponible : pxx, pyy, pzz, px, py, pz, mb |
Créer le point à la position (0,0,0) :
local spt = sofistik.Point.new({0, 0, 0})
spt.number = 1
Modifier la position ultérieurement :
spt.position = {10, 0, 0}
Assigner un appui :
spt.support_pzz = true
Utiliser une variable et une boucle pour créer plusieurs points :
local x = 10.0
local count = 20
for y=1,count do
local spt = sofistik.Point.new({ x, y, y*0.1 })
end
Créer une ligne structurelle#
Les propriétés disponibles sont :
number |
Numéro d’élément [1 …] |
group |
Numéro de groupe primaire. |
Type |
Type de barre : CENTRIQUE, RÉFÉRENCE, TREILLIS, CÂBLE, SECTION, AUCUNE |
Section |
Numéro de section. |
section_at_start |
Numéro de section en début. |
section_at_end |
Numéro de section en fin. |
geometry |
Modifie la géométrie de l’objet. |
length |
Longueur de la courbe. |
start_point |
|
end_point |
Créer une ligne entre deux points :
local sln = sofistik.Line.new()
sln.number = 1
area.group = 99
sln.geometry:set_line({0, 0, 0}, {1, 0, 0})
Créer une ligne structurelle comme une polyligne, c’est-à-dire reliant plusieurs points en commençant à (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})
Imprimer la longueur de la ligne dans la console :
print( sln.length )
Assigner une section :
sln.section = 5
Assigner différentes sections en début et en fin avec une interpolation linéaire :
sln.section_at_start = 1
sln.section_at_end = 2
Sélectionner un type de barre:
sln.type = SLN.CENTRIC
Créer une surface structurelle#
Les propriétés disponibles sont :
number |
Numéro d’élément [1 …] |
group |
Numéro de groupe primaire. |
thickness |
Épaisseur de l’élément. |
geometry |
Modifie la géométrie de l’objet. |
alignement |
Aligner le système de coordonnées sur, par exemple, un point structurel. |
Créer un rectangle avec une épaisseur de 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})
Créer un triangle
area.geometry:set_tri({0, 0, 0}, {1, 0, 0}, {1,1,0})
Créer une zone polygonale arbitraire :
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()
Aligner verticalement les éléments générés
area.align_elements = sofistik.SAR.AlignTop
area.align_elements = sofistik.SAR.AlignCenter
area.align_elements = sofistik.SAR.AlignBottom
Opérations courantes sur les éléments#
Assigner des numéros d’élément.
Assigner un numéro :
elem.number = 1
Note
Si le numéro est déjà assigné à un autre élément, le prochain numéro disponible sera utilisé.
Déplacer des objets.
Déplacer l’objet d’une distance relative de 1.0 suivant X global, 2.0 suivant Y global et -3.5 suivant Z global :
spt:move({ 1, 2, -3.5 })
Aligner de l’axe X local de la surface par rapport à un point, et rotation autour de l’axe Z local
sar.alignment.target = spt
sar.angle = 90
CABD / pont : créer un Axe#
Les propriétés disponibles sont :
geometry |
Définir la géométrie de l’axe comme courbe 3D. |
plan_view |
Définir la géométrie de l’axe comme une combinaison d’une vue en plan et de la vue en élévation des objets géométriques. |
placements |
Modifier les placements assignés à l’axe. |
secondary |
Permet d’accéder aux axes secondaires (exemple: courbes de décalage). |
variables |
Progression des variables le long de l’axe. Utilisé par les sections et les courbes avec décalage. |
domain |
Valeur min. et max. de station ( |
Créer un axe AXIS
en tant que ligne 3D suivant X global avec une longueur de 30.0 :
local axis = sofistik.Axis.create_primary_3d("AXIS")
axis.geometry:set_line({0, 0, 0}, {30, 0, 0})
Créer un axe AXIS
avec une géométrie en plan :
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)
Vérifier si un axe est dérivé d’une courbe 3D (create_primary_3d
):
if axis.is_3d then
print("it is a free curve")
end
Ajouter des placements.
Créer des placements dans une station spécifique :
axis.placements:create_at_s(0)
axis.placements:create_at_s(10.5)
Créer des lignes structurelles entre placements.
Créer des placements dans une station spécifique :
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
Ajouter un décalage d’axe secondaire avec des distances constantes en Y et Z (local par rapport à l’axe primaire).
Note
Le nom d’un axe secondaire doit être un seul caractère majuscule de l’intervalle A-Z.
axis.secondary:create_offset("L", -4.0, 0.0)
axis.secondary:create_offset("R", 4.0, 0.0)
Ajouter un décalage d’axe secondaire avec la distance en Y
local définie par une variable H
.
Note
Disponible à partir de la version 2023.
axis.variables:create("H")
axis.secondary:create_offset("R", "H", 0.0)
CABD / Pont : Lier les sommets des éléments#
Les objets SOFiPLUS et AutoCAD contiennent divers sommets avec un nom qui peuvent être utiles. Ces sommets peuvent être liés entre eux.
Par exemple, un point en fin d’une ligne structurelle peut être lié au sommet d’un polygone de surface structurelle, ou un point en fin d’une autre ligne structurelle ou même à un placement sur un axe.
Dans tous les cas, un décalage relatif peut être spécifié (facultatif).
Un cas d’utilisation serait de relier les câbles d’un pont haubané aux placements sur un axe permettant ainsi de modifier plus facilement la conception géométrique du pont.
Attention
Assurez-vous d’éviter les références circulaires.
SOFiPLUS interrompt le traitement des liens associatifs lorsqu’il rencontre une référence circulaire. Il peut être difficile de les retrouver.
Les paramètres de la source sont spécifiés en premier, ceux de la cible en dernier:
link_endpoint_to_endpoint(sln, "sln.startpoint", sar, "vertex.0")
Lien vers placement:
link_endpoint_to_placement_on_axis(axis, plc, sln, "sln.startpoint")
Lien vers placement avec décalage:
link_endpoint_to_placement_on_axis(axis, plc, sln, "sln.endpoint", {1,0,0})
Chargement#
Dans la version 2024, la prise en charge de base des charges libres a été ajoutée.
Quelques fonctionnalités ne sont pas encore prises en charge :
Charges relatives aux éléments
Décalages relatifs et absolus sur les charges linéaires
Charges variables
Créer une charge ponctuelle:
load = sofistik.PointLoad.new()
load.start = {10,0,0}
load.type = sofistik.LoadType.PG
load.value = 10.0
Créer une charge linéaire:
load = sofistik.LineLoad.new()
load.start = {10,0,0}
load.end = {20,0,0}
load.type = sofistik.LoadType.PG
load.value = 10.0
Créer une charge surfacique:
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
Commandes, objets et géométrie AutoCAD#
À tout moment dans le script, il est possible d’exécuter n’importe quelle commande AutoCAD.
Note
Si une commande AutoCAD ne se termine pas correctement, l’exécution du script sera arrêtée.
Zoom sur l’étendu
acad.command[['_.zoom _e]]
Créer une ligne AutoCAD:
acad.command[[_line 0,0,0 0,5,0\n\n]]
Note
Veuillez noter que \n
indique une nouvelle ligne et représente l’appui de la touche ENTREE
en mode interactif.
La plupart des objets partagent ces propriétés :
layer |
Nom du calque AutoCAD |
print( sln.layer )
Les objets courbes partagent ces propriétés :
length |
Longueur de la courbe. |
start_point |
|
end_point |
print( sln.length )