Scripts#

scripting_largeScripts

Command

SOF_TEST_SCRIPT_OPEN

Tooltip

Ouvre une palette pour l'API de script basée sur Lua.

Sidebar

Outils

Ouvre une palette pour l'API de script basée sur Lua.

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

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)

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 )