= SALOME = [[PageOutline]] == Namestitev Za namestitev SALOME-a shranite Windows paket SALOME-8.3.0-WIN64.exe ki se nahaja na spodnji povezavi: http://www.salome-platform.org/downloads/current-version Odpakirajte Windows paket SALOME-8.3.0-WIN64.exe kot administrator (desni klik --> Run as Administrator) v C:\Program Files. Program SALOME se zažene s skriptom run_salome.bat ki se nahaja v C:\Program Files\SALOME-8.3.0-WIN64\WORK. == Struktura programa v programskem jeziku Python Uporabljali bomo [htdocs:doc8.3.0/index.html navodila za Salome 8.3]. Za programiranje v geometrijskem modulu si poglejte [htdocs:doc8.3.0/gui/GEOM/python_interface.html Geometry module Python Interface]. V glavi programa je potrebno inicializirati knjižnico salome, ki nam omogoči preprosto manipulacijo predstavljenega objekta (glava dokumenta): {{{ #!python import salome salome.salome_init() }}} Nato je potrebno uvoziti python-ov modul **GEOM**, ki vsebuje funkcije, s katerimi izdelujemo geometrijske modele. {{{ #!python import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) }}} === Osnovni program - Izdelava skatle Funkcija [http://docs.salome-platform.org/5/geom/user/geompy_doc/group__l3__3d__primitives.html#ga0ec4f2fdbec2bfbbda8d2acfe5d73164 geompy.MakeBox()] sprejme koordinate dveh tock, ki lezita na diagonali. {{{ #!python import salome import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) box = geompy.MakeBox(10.0,10.0,10.0, 20, 20, 20) # Dodamo novo spremenljivko v studijo geompy.addToStudy(box, 'Skatla') salome.sg.updateObjBrowser(True) }}} === Osnovni program - Primer izdelave izvleka v prostor (Extrusion) Postopek modeliranja v komercialnih modelirnikih (SolidWorks, Creo, Catia, NX, ProEngineer, Inventor,...) je sledeči: * izbira ravnine, na katero se nariše skica * izris oblike skice (kvadrat) * definiranje skice (dimenzije, geometrijske relacije, pozicija v prostoru) * izbira ustrezne značilke za izdelavo 3D objekta (Izvlek- Extrude) * določitev parametrov izvleka (smer, dolžina izvleka) * model je zmodeliran V okolju Salome poteka izris objekta nekoliko drugače. Razložen je preprosti postopek izdelave kocke, ki poteka v večih korakih. Pri izdelavi je potrebno manualno določiti vse parametre, ki jih komercialni modelirnik običajno določi namesto nas. '''Korak 1''': Uvoz knjiznic Z uvozom knjiznic je omogocena uporaba vseh funkcij, ki jih potrebujemo za izdelavo kocke. {{{ #!python import salome salome.salome_init() import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) gg = salome.ImportComponentGUI("GEOM") }}} '''Korak 2''': Izdelava tock V prostoru je potrebno definirati tocke. Definiramo jih s funkcijo [http://docs.salome-platform.org/5/geom/user/geompy_doc/group__l3__basic__go.html#gaff61924656b186b1bbed2d8acbaeaea2 geompy.MakeVertex()]. [[Image(pointsSalomePrismExample.png, 300, right)]] {{{ #!python p1 = geompy.MakeVertex( 0., 0., 0.) p2 = geompy.MakeVertex( 100., 0., 0.) p3 = geompy.MakeVertex( 100., 100., 0.) p4 = geompy.MakeVertex( 0., 100., 0.) }}} Za prikaz objektov v modulu Geometry v okolju Salome uporabimo naslednje ukaze {{{ #!python # Dodamo nove tocke v studijo geompy.addToStudy(p1,"point1") geompy.addToStudy(p2,"point2") geompy.addToStudy(p3,"point3") geompy.addToStudy(p4,"point4") salome.sg.updateObjBrowser(True) }}} '''Korak 3''': Izdelava krivulje, ki povezuje vse tocke Z ukazom [http://docs.salome-platform.org/5/geom/user/geompy_doc/group__l4__curves.html#ga599e70c2624244a5b6ef742568d1b925 geompy.MakePolyline()] izdelamo krivuljo, ki je sestavljena iz stirih daljic. [[Image(polylineSalomePrismExample.png, 300, right)]] {{{ #!python polyline = geompy.MakePolyline([p1, p2, p3, p4, p1]) # Dodamo novo krivuljo v studijo geompy.addToStudy(polyline,"polyline") # Posodobimo drevesno strukturo salome.sg.updateObjBrowser(True) }}} [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] '''Korak 4''': Izdelava povrsine. Sedaj je potrebno izdelati povrsino, ki bo omejena s prej izdelano krivuljo. To storimo z ukazom [http://docs.salome-platform.org/5/geom/user/geompy_doc/group__l3__advanced.html#ga808d5981a10de3c662ab9781c959b738 geompy.MakeFace()]. Ta funkcija sprejme zaprto krivuljo (**polyline**). Nato je spremenljivko potrebno dodati v studijo modula '''GEOM''' z ukazom [http://docs.salome-platform.org/7/gui/GEOM/geompy_doc/group__l1__publish__data.html#gab203ccf5cab3daaf83bdf5d640e0c9f6 addToStudy()]. [[Image(faceSalomePrismExample.png, 300, right)]] {{{ #!python face = geompy.MakeFace(polyline, True) # Dodamo novo povrsino v studijo geompy.addToStudy(face, "face") # Posodobimo drevesno strukturo salome.sg.updateObjBrowser(True) }}} Drevesno strukturo posodobimo, ce zelimo prikazati nove geometrijske elemente v modelnem oknu. [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] '''Korak 5''': Izvlek povrsine Izvlek povrsine izvedemo z ukazom [http://docs.salome-platform.org/5/geom/user/geompy_doc/group__l3__complex.html#ga9cec1d70a613916e8bb47e7b45edc3c4 geompy.MakePrism()]. Omenjeni ukaz sprejme tri argumente(povrsina, tocka1, tocka2), pri cemer sta tocka1 in tocka2 tocki, ki definirata vektor. [[Image(prismSalomePrismExample.png, 300, right)]] {{{ #!python p5 = geompy.MakeVertex(0.,0.,100.) prism1 = geompy.MakePrism(face, p1, p5) # Dodamo nov izvlek v studijo geompy.addToStudy(prism1, "prism1") # Posodobimo drevesno strukturo salome.sg.updateObjBrowser(True) }}} Celoten postopek izdelave izvleka je v priponki (''salomePrismExample.py''). [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]] === Primer izdelave panela v fuzijskem reaktorju ITER V tem primeru bo prikazana izdelava krivulj v 3D prostoru in izvlek krivulj, s katerim generiramo površino v prostoru. Končni cilj je izdelava panela, prikazanega na sliki. V datoteki data.txt imamo podane koordinate točk (x, y in z), iz katerih bomo generirali krivujo. To krivuljo bomo nato izvlekli v prostor s pomočjo daljic, ki so prav tako definirana s točkami (xe, ye in ze). Podatki so podani v formatu [[Image(modelSalomePanelExample.png, 300, right)]] {{{ x1 y1 z1 xe1 ye1 ze1 x2 y2 z2 xe2 ye2 ze2 x3 y3 z3 ... xn yn zn }}} '''Korak 1''': Uvoz modulov Najprej je potrebno v python uvoziti vse knjižnice, ki jih bomo uporabili v Salome okolju. Nato pa je potrebno definirati novo študijo. {{{ #!python # Uvoz knjiznic import salome import numpy as np import GEOM from salome.geom import geomBuilder geompy = geomBuilder.New(salome.myStudy) }}} [[BR]][[BR]][[BR]][[BR]][[BR]] '''Korak 2''': Uvoz podatkov v Python Podatke v stolpcih v tekstovnem formatu lahko preberemo na vec načinov, v tem primeru smo uporabili funkcijo `loadtxt()` iz knjižnice `numpy`. Podatke za krivuljo shranimo v spremenljivko tipa `np.array()` z imenoma ''coord_x'' in ''coord_y''. Nato te točke zrcalimo preko ravnine y-z, da dobimo krivuljo še za levo stran panela, in jih shranimo v spremenljivki `coord_x_mirror` in `coord_y_mirror`. [[Image(b_splineSalomePanelExample.png, 700, right)]] {{{ #!python # Load data data = np.loadtxt('/pathtofile/data.txt') # convert coordinates to mm coord_x = data[:,0]*(1000) coord_y = data[:,1]*(1000) # mirror x coordinates over yz - plane coord_x_mirror = coord_x[::-1]*(-1) coord_y_mirror = coord_y[::-1] }}} '''Korak 3''': Izdelava krivulj Nato generiramo B-zlepek krivuljo s pomočjo metode `geompy.MakeInterpol()`, ki sprejme seznam točk, na katerih izvede interpolacijo. Rezultat je polinom, ki predstavlja podano krivuljo. Nato izračunano krivuljo dodamo v študijo. {{{ #!python # Create B-Spline curve on the set of points with # geompy.MakeInterpol() and add curve to Salome study. b_spline = geompy.MakeInterpol(points_x) b_splineID = geompy.addToStudy(b_spline,"b_spline_ft") b_spline_mirror = geompy.MakeInterpol(points_y) b_splineID_mirror = geompy.addToStudy(b_spline_mirror,"b_spline_ft_mirrored") }}} Sedaj je potrebno kreirati še daljico, s katero bomo povezali obe krivulji (na sliki označena z rumeno barvo). {{{ #!python # Create line between both curves. ml_point1 = geompy.MakeVertex(-coord_x[0],coord_y[0],0) ml_point2 = geompy.MakeVertex(coord_x[0],coord_y[0],0) middle_line = geompy.MakeLineTwoPnt(ml_point1,ml_point2) middle_lineID = geompy.addToStudy(middle_line,"middle_line") }}} Nato je potrebno vse tri komponente združiti v skupen objekt, ki ga bomo izvlekli v prostor. To storimo z metodo `geompy.MakeWire()`, ki sprejme seznam krivulj, robov in daljic, ki jih želimo združiti v en objekt. {{{ #!python # Create wire out of all three components wire = geompy.MakeWire([b_spline_mirror,middle_line,b_spline]) wireID = geompy.addToStudy(wire,"wire_bottom") }}} '''Korak 4''': Izdelava krivulje za izvlek Nato izdelamo še krivuljo za izvlek, ki je prikazana na sliki. Ponovno uvozimo točke in jih shranimo v spremenljivke tipa `np.array()`. [[Image(polylineSalomePanelExample.png, 300, right)]] {{{ #!python # Load data for extrusion dataExtrusion = np.loadtxt('/pathtofile/dataExtrusion.txt') # Read data for extrusion coord_xe = dataExtrusion[:,0] coord_ye = dataExtrusion[:,1] coord_ze = dataExtrusion[:,2] }}} Koordinate ponovno pretvorimo v točke tipa `geompy` z ukazom `geompy.MakeVertex()` ter nato generiramo polyline. {{{ #!python # Convert data to geompy point and store it in a list. points_e = [] for point_e in range(len(coord_xe)): point_e = geompy.MakeVertex(coord_xe[point_e],coord_ye[point_e],coord_ze[point_e]) points_e.append(point_e) # Create polyline for extrusion and add it to study. polylineVert = geompy.MakePolyline(points_e) polylineVertID = geompy.addToStudy(polylineVert,"b_spline_ft_vert") }}} '''Korak 5''': Izvlek iz krivulj Na koncu ustvarimo izvlek iz obeh danih krivulj. Izvlek dodamo v študijo in posodobimo drevesno strukturo. {{{ #!python # Create panel shape panel_FW = geompy.MakePipe(polylineVert, wire) geompy.addToStudy(panel_FW,'Panel') salome.sg.updateObjBrowser(True) }}}