Changes between Version 4 and Version 5 of salome


Ignore:
Timestamp:
Nov 14, 2017, 3:52:07 PM (6 years ago)
Author:
brankm
Comment:

Dodan tutorial za izdelavo panela.

Legend:

Unmodified
Added
Removed
Modified
  • salome

    v4 v5  
    119119salome.sg.updateObjBrowser(True)
    120120}}}
    121 [[BR]][[BR]][[BR]][[BR]]
     121[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    122122'''Korak 4''': Izdelava povrsine.
    123123
     
    135135
    136136Drevesno strukturo posodobimo, ce zelimo prikazati nove geometrijske elemente v modelnem oknu.
    137 [[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
     137[[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]][[BR]]
    138138'''Korak 5''': Izvlek povrsine
    139139
     
    151151
    152152Celoten postopek izdelave izvleka je v priponki (''salomePrismExample.py'').
     153
     154=== Primer izdelave panela v fuzijskem reaktorju ITER
     155
     156V tem primeru bo prikazana izdelava krivulj v 3D prostoru in izvlek krivulj, s katerim generiramo povrsino v prostoru. Koncni cilj je izdelava panela, prikazanega na sliki. V datoteki data.txt imamo podane koordinate tock (x, y in z), iz katerih bomo generirali krivujo. To krivuljo bomo nato izvlekli v prostor s pomocjo daljic, ki so prav tako definirana s tockami (xe, ye in ze). Podatki so podani v formatu
     157[[Image(prismSalomePrismExample.png, 300, right)]]
     158{{{
     159x1 y1 z1 xe1 ye1 ze1
     160x2 y2 z2 xe2 ye2 ze2
     161x3 y3 z3
     162...
     163xn yn zn
     164}}}
     165
     1661. Uvoz modulov
     167
     168Najprej je potrebno v python uvoziti vse knjiznice, ki jih bomo uporabili v Salome okolju. Nato pa je potrebno definirati novo studijo.
     169
     170{{{
     171#!python
     172# Uvoz knjiznic
     173import salome
     174import numpy as np
     175import GEOM
     176from salome.geom import geomBuilder
     177geompy = geomBuilder.New(salome.myStudy)
     178}}}
     179
     1802. Uvoz podatkov v Python
     181
     182Podatke v stolpcih v tekstovnem formatu lahko preberemo na vec nacinov, v tem primeru smo uporabili funkcijo `loadtxt()` iz knjiznice `numpy`. Podatke za krivuljo shranimo v spremenljivko tipa `np.array()` z imenoma ''coord_x'' in ''coord_y''. Nato te tocke zrcalimo preko ravnine y-z, da dobimo krivuljo se za levo stran panela, in jih shranimo v spremenljivki `coord_x_mirror` in `coord_y_mirror`.
     183
     184{{{
     185#!python
     186# Load data
     187data = np.loadtxt('/pathtofile/data.txt')
     188# convert coordinates to mm
     189coord_x = data[:,0]*(1000)
     190coord_y = data[:,1]*(1000)
     191# mirror x coordinates over yz - plane
     192coord_x_mirror = coord_x[::-1]*(-1)
     193coord_y_mirror = coord_y[::-1]
     194}}}
     195
     196Nato generiramo B-zlepek krivuljo s pomocjo metode `geompy.MakeInterpol()`, ki sprejme seznam tock, na katerih izvede interpolacijo. rezultat je polinom, ki predstavlja podano krivuljo. Nato izracunano krivuljo dodamo v studijo.
     197{{{
     198#!python
     199# Create B-Spline curve on the set of points with
     200# geompy.MakeInterpol() and add curve to Salome study.
     201b_spline = geompy.MakeInterpol(points_x)
     202b_splineID = geompy.addToStudy(b_spline,"b_spline_ft")
     203b_spline_mirror = geompy.MakeInterpol(points_y)
     204b_splineID_mirror = geompy.addToStudy(b_spline_mirror,"b_spline_ft_mirrored")
     205}}}
     206
     207Sedaj je potrebno kreirati se daljico, s katero bomo povezali obe krivulji (na sliki oznacena z rumeno barvo).
     208
     209{{{
     210#!python
     211# Create line between both curves.
     212ml_point1 = geompy.MakeVertex(-coord_x[0],coord_y[0],0)
     213ml_point2 = geompy.MakeVertex(coord_x[0],coord_y[0],0)
     214middle_line = geompy.MakeLineTwoPnt(ml_point1,ml_point2)
     215middle_lineID = geompy.addToStudy(middle_line,"middle_line")
     216}}}
     217
     218Nato je potrebno vse tri komponente zdruziti v skupen objekt, ki ga bomo izvlekli v prostor. To storimo z metodo `geompy.MakeWire()`, ki sprejme seznam krivulj, robov in daljic, ki jih zelimo zdruziti v en objekt.
     219
     220{{{
     221#!python
     222# Create wire out of all three components
     223wire = geompy.MakeWire([b_spline_mirror,middle_line,b_spline])
     224wireID = geompy.addToStudy(wire,"wire_bottom")
     225}}}
     226
     227Nato izdelamo se krivuljo za izvlek, ki je prikazana na sliki. Ponovno uvozimo tocke in jih shranimo v spremenljivke tipa `np.array()`.
     228
     229{{{
     230#!python
     231# Load data for extrusion
     232dataExtrusion = np.loadtxt('/pathtofile/dataExtrusion.txt')
     233# Read data for extrusion
     234coord_xe = dataExtrusion[:,0]
     235coord_ye = dataExtrusion[:,1]
     236coord_ze = dataExtrusion[:,2]
     237}}}
     238
     239Koordinate ponovno pretvorimo v tocke tipa `geompy` z ukazom `geompy.MakeVertex()` ter nato generiramo polyline.
     240
     241{{{
     242#!python
     243# Convert data to geompy point and store it in a list.
     244points_e = []
     245for point_e in range(len(coord_xe)):
     246    point_e = geompy.MakeVertex(coord_xe[point_e],coord_ye[point_e],coord_ze[point_e])
     247    points_e.append(point_e)
     248# Create polyline for extrusion and add it to study.
     249polylineVert = geompy.MakePolyline(points_e)
     250polylineVertID = geompy.addToStudy(polylineVert,"b_spline_ft_vert")
     251}}}
     252
     253Na koncu ustvarimo izvlek iz obeh danih krivulj. Izvlek dodamo v studijo in posodobimo drevesno strukturo.
     254
     255{{{
     256#!python
     257# Create panel shape
     258panel_FW = geompy.MakePipe(polylineVert, wire)
     259geompy.addToStudy(panel_FW,'Panel')
     260salome.sg.updateObjBrowser(True)
     261}}}