Version 13 (modified by 5 years ago) (diff) | ,
---|
SALOME SHAPER
- Primer: Postopek izdelave primitivov
- Primer: Izdelava izvleka v prostor (Extrude)
- Primer: Izdelava izvleka v prostor (Extrude) z dodajanjem robov v skici
- Primer: Uporaba relacij med linijami
- Primer: 3D odsekoma linearni zlepek (ang. polyline)
- Primer: Uvoz STEP modela in izluščevanje topoloških elementov
SALOME je odprtokodno okolje, ki vsebuje več integriranih modulov, ter je namenjeno reševanju kompleksnih numeričnih problemov ter izvajanju simulacij. Ti numerični problemi bazirajo na začetnem CAD modelu. SALOME vsebuje tudi orodja, ki omogočajo delo s CAD modeli oz. z značilkami CAD modelov ter tako spremembo CAD modelov (poenostavitev) in pridobitev različnih podatkov iz CAD modelov.
V nadaljevanju so prikazani primeri uporabe na podlagi vnosa Python ukazov v SALOME Python konzolo.
Povezave:
- Povezave za prenos SALOME programa
- Predstavitev SHAPER modula
- SHAPER dokumentacija
- SHAPER dokumentacija (moduli, opis funkcij itd.)
- SHAPER primeri na Youtube
- SHAPER interaktivni tutorial
Predstavitev SHAPER modula na primerih
Primer: Postopek izdelave primitivov
V SALOME Python konzolo vnesemo naslednje ukaze:
# Uvozimo potrebne knjižnice from salome.shaper import model # Inicializiramo model model.begin() myPartSet = model.moduleDocument() # Kreiramo part Part = model.addPart(myPartSet) Part_doc = Part.document() # Dodamo kocko dimenzij 10x10x10 Box = model.addBox(Part_doc, 10, 10, 10)
Spodaj so prikazani primeri "add" ukazov za dodajanje točk in drugih primitivov, ki se jih lahko najde tudi na tej povezavi:
# Točka s koordinatami x=-50, y=70, z=20 Point = model.addPoint(Part_doc, -50, 70, 20) # Kocka oz. kvader z ogliščem v izhodiščni točki T(0,0,0), # dimenzija v X osi = 40, v Y osi = 45, v Z osi = 60 model.addBox(Part_doc, 40, 45, 60) # Stožec, z zunanji radij=50, notranji radij=0 (z vrednostjo večje od 0 se difinira prisekan stožec), višina=100 model.addCone(Part_doc, 50, 0, 90) # Valj, polmer=60, višina=70 model.addCylinder(Part_doc, 60, 70) # Krogla, polmer=60 model.addSphere(Part_doc, 60) # Torus, razdalja od sdreišča cevi torusa= , polmer cevi torusa= model.addTorus(Part_doc, 20, 10)
Primer: Izdelava izvleka v prostor (Extrude)
V SALOME Python konzolo vnesemo naslednje ukaze:
# Uvozimo knjižnice from salome.shaper import model from salome.shaper import geom # Inicializiramo model model.begin() mypartset = model.moduleDocument() # Dodamo novi part mypart = model.addPart(mypartset).document() # Dodamo objekt - skico za našo osnovo kvadra mySketch = model.addSketch(mypart, model.defaultPlane("XOY")) # Določimo točke p1 = geom.Pnt2d(0, 0) p2 = geom.Pnt2d(0, 25) p3 = geom.Pnt2d(25, 25) p4 = geom.Pnt2d(25, 0) # Izdelava robov iz točk na podlagi točk lines = model.addPolygon(mySketch, p1, p2, p3, p4) # "lines" je seznam oz. niz štirih robov # Prikaži dopolnjen model - prikaži robove model.do() # Dodatno: Izpis točk, ki sestavljajo vsako izmed linij for i in range(len(lines)): l = lines[i] print("Linija #" + str(i) + ":") print("Začetna točka: X:", str(l.startPoint().x()), ", Y: ", str(l.startPoint().y())) print("Končna točka: X:", str(l.endPoint().x()), ", Y: ", str(l.endPoint().y())) # Izdelava izvleka mybox = model.addExtrusion(mypart, mySketch.selectFace(), 50) # Prikaži dopolnjen model model.do()
Primer: Izdelava izvleka v prostor (Extrude) z dodajanjem robov v skici
V SALOME Python konzolo vnesemo naslednje ukaze:
# Uvozimo potrebne knjižnice from salome.shaper import model # Inicializiramo model model.begin() mypartset = model.moduleDocument() # Dodamo novi part mypart = model.addPart(mypartset).document() # Naredimo skico, ki predstavlja osnovo za naš izvlek v prostor sketch_base = model.addSketch(mypart, model.defaultPlane("XOY")) # - Risanje po skici: dodamo štiri linije l1 = sketch_base.addLine(0, 0, 0, 50) # Linijo, ki leži v trenutni ravnini, se definira z dvema točkama na način (x1,y1, x2, y2) l2 = sketch_base.addLine(0, 50, 50, 50) l3 = sketch_base.addLine(50, 50, 50, 0) l4 = sketch_base.addLine(50, 0, 0, 0) # Prikaži dopolnjen model model.do() # Izvlek v prostor mybox = model.addExtrusion(mypart, sketch_base.selectFace(), 50) # Prikaži dopolnjen model model.do.()
Primer: Uporaba relacij med linijami
Ta primer je podoben prejšnjem z razliko da se bo uporabilo relacije med elementi (sovpadanje točk, vzporednost ipd.).
V SALOME Python konzolo vnesemo naslednje ukaze:
# Uvozimo potrebne knjižnice from salome.shaper import model # Inicializiramo model model.begin() mypartset = model.moduleDocument() # Dodamo novi part mypart = model.addPart(mypartset).document() # Naredimo skico, ki predstavlja osnovo za naš izvlek v prostor # V tem primeru bomo naredili "neustrezno" skico, v kateri nam linije ne bodo sovpadale. To se bo kasneje uredilo z relacijami sketch_base = model.addSketch(mypart, model.defaultPlane("XOY")) # - Določimo štiri linije v ravnini l1 = sketch_base.addLine(0, 0, 0, 50) l2 = sketch_base.addLine(0, 123, 50, 50) # neustrezna linija l3 = sketch_base.addLine(50, 50, 50, 0) l4 = sketch_base.addLine(50, 0, 123, 123) # neustrezna linija model.do() # Določevanje relacij med linijami v skici: # - fiksna pozicija točk linij. Linija l1 in l3 so v redu zato jih določimo kot fiksne sketch_base.setFixed(l1.startPoint()) sketch_base.setFixed(l1.endPoint()) sketch_base.setFixed(l3.startPoint()) sketch_base.setFixed(l3.endPoint()) # - stikanje koncev linij sketch_base.setCoincident(l1.endPoint(), l2.startPoint()) sketch_base.setCoincident(l2.endPoint(), l3.startPoint()) sketch_base.setCoincident(l3.endPoint(), l4.startPoint()) sketch_base.setCoincident(l4.endPoint(), l1.startPoint()) # Prikaži dopolnjen model model.do() # Izvlek v prostor mybox = model.addExtrusion(mypart, sketch_base.selectFace(), 50) # Prikaži dopolnjen model model.do()
Namesto sikanja koncev točk linij se lahko ureja druge relacije ter lastnosti. Pri tem je treba paziti, da se skico ne predefinira!
Spodaj je prikaz, kako se lahko določi druge relacije.
# - vzporednost sketch_base.setParallel(l1, l3) sketch_base.setParallel(l2, l4) # - pravokotnost sketch_base.setPerpendicular(l1, l4) - vertikalnost sketch_base.setVertical(l1) # - fiksna pozicija točk linij sketch_base.setFixed(l1.startPoint()) # Določitev širine linije mywidth = sketch_base.setLength(l1, 50) # Določitev dolžine skice mylength = sketch_base.setDistance(l1.startPoint(), l3.endPoint(), 50)
Primer: 3D odsekoma linearni zlepek (ang. polyline)
Primer izdelave 3D linearnega zlepka:
# Uvoz potrebnih knjižnice from salome.shaper import model # Kreiranje modela model.begin() partSet = model.moduleDocument() # Kreiranje parta Part_1 = model.addPart(partSet) Part_1_doc = Part_1.document() # Definiranje tock Point_1 = model.addPoint(Part_1_doc, 10, 10, -10) Point_2 = model.addPoint(Part_1_doc, 70, 70, 50) Point_3 = model.addPoint(Part_1_doc, 100, 120, 100) # Definiranje linearnega zlepka, sestavljene iz treh točk (oz. dveh linij) Polyline_1 = model.addPolyline3D(Part_1_doc, [model.selection("VERTEX", "Point_1"), model.selection("VERTEX", "Point_2"), model.selection("VERTEX", "Point_3")], False) # Prikaži dopolnjen model model.do()
Primer: Uvoz STEP modela in izluščevanje topoloških elementov
Spodaj je primer kode, kako se lahko iz obstoječe STEP datoteke v SHAPER-ju izlušči topološke elemente, v tem primeru vozlišča, lupine in površine. Za namene tega primera se lahko uporabi test.step datoteko, ki je priložena na tej strani (glej "priloge" oz. ang. "attachments").
# Uvoz potrebnih knjižnic from salome.shaper import model from GeomAPI import * # Kreiranje SHAPER session-a model.begin() # Kreiranje objekta: t.i. "dokument", ki predstavlja temelje aplikacije # (root document of SHAPER) partSet = model.moduleDocument() # Dodajanje part-a v model Part_1 = model.addPart(partSet) # Kreiranje objekta za dostop do pod-dokumenta, ki se nanaša na part Part_1_doc = Part_1.document() # Importanje STEP datoteke # Opomba: pot se določa na način npr. /mapa/podmapa1/podmapa2/ime_step_datoteke.step Import_1 = model.addImport(Part_1_doc, "/home/penkod/WORK/training/salome_shaper/test.step") # Posodobi prikaz modela model.do() # Objekt, ki vsebuje lastnosti modela result = Import_1.defaultResult() # Izpis imena parta result.data().name() # --- vozlišča --- # Raziskovalec oblik: vozlišča (VERTEX) vertexExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.VERTEX) # Kreiranje nove skupine za vozlišča group_vertices = Part_1_doc.addFeature("Group") # Določevanje imena skupine group_vertices.data().setName("Vertex Group") # Iteriranje skozi vozlišča, dokler jih raziskovalec še najde nVertices = 0 while vertexExplorer.more(): # Trenutno vozlišče cv = vertexExplorer.current().vertex() # Prva koordinata trenutnega vozlišča x = cv.point().x() # Druga koordinata trenutnega vozlišča y = cv.point().y() # Tretja koordinata trenutnega vozlišča z = cv.point().z() # Izpis koordinat trenutne točke print("point XYZ: " + str(x) + ", " + str(y) + ", " + str(z) ) # Dodajanje vozlišča v skupino group_vertices.selectionList("group_list").append(result, vertexExplorer.current()) # Dodatno: Način dodajanja vozlišča direktno na part # model.addPoint(Part_1_doc, x,y,z) # Iteriranje na naslednje vozlišče vertexExplorer.next() # Prištevanje +1 k celotnemu seštevku vozlišč nVertices += 1 # Izpis seštevka najdenih vozlišč print("Number of vertices: ", str(nVertices)) # Posodobi prikaz modela model.do() # --- lupine --- # Raziskovalec oblik: lupine (SHELL) shellExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.SHELL) # Kreiranje nove skupine za lupine group_shells = Part_1_doc.addFeature("Group") # Določevanje imena skupine group_shells.data().setName("Shell Group") # Iteriranje skozi lupine, dokler jih raziskovalec še najde nShells = 0 while shellExplorer.more(): # Trenutna lupina sh = shellExplorer.current().shell() # Dodajanje lupine v skupino group_shells.selectionList("group_list").append(result, shellExplorer.current()) # Iteriranje na naslednjo lupino shellExplorer.next() # Prištevanje +1 k celotnemu seštevku lupin nShells += 1 # Izpis seštevka najdenih lupin print("Number of shells: ", str(nShells)) # Posodobi prikaz modela model.do() # --- površine --- # Raziskovalec oblik: površine (FACE) faceExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.FACE) # Kreiranje nove skupine za površine group_faces = Part_1_doc.addFeature("Group") # Določevanje imena skupine group_faces.data().setName("Faces Group") # Iteriranje skozi površine, dokler jih raziskovalec še najde nFaces = 0 while faceExplorer.more(): # Trenutno najdena površina face = faceExplorer.current().face() # Dodajanje površine v skupino group_faces.selectionList("group_list").append(result, faceExplorer.current()) # Iteriranje na naslednjo površino faceExplorer.next() # Prištevanje +1 k celotnemu seštevku površin nFaces += 1 # Izpis seštevka najdenih površin print("Number of faces: ", str(nFaces)) # Posodobi prikaz modela model.do()
Attachments (25)
-
test.step (19.3 KB) - added by 5 years ago.
Test STEP file used in the examples.
-
shaper_example_addBox_PythonShell.png (30.7 KB) - added by 5 years ago.
SHAPER addBox example: code entry in python shell.
-
shaper_example_addBox_result.png (5.5 KB) - added by 5 years ago.
SHAPER addBox result.
-
shaper_example_addBox_objectBrowser.png (15.1 KB) - added by 5 years ago.
SHAPER addBox example object browser at finish.
-
SALOME_SHAPER_empty_case.png (84.5 KB) - added by 5 years ago.
Updated again.
-
SHAPER_primitives_addPoint.png (5.6 KB) - added by 5 years ago.
Primitives: addPoint.
-
SHAPER_primitives_addBox.png (8.1 KB) - added by 5 years ago.
Primitives: addBox.
-
SHAPER_primitives_addCone.png (43.0 KB) - added by 5 years ago.
Primitives: addCone.
-
SHAPER_primitives_addTorus.png (62.7 KB) - added by 5 years ago.
Primitives: addTorus
-
SHAPER_primitives_addSphere.png (50.0 KB) - added by 5 years ago.
Primitives: addSphere.
-
SHAPER_primitives_addCylinder.png (10.2 KB) - added by 5 years ago.
Primitives: addCylinder.
-
SHAPER_example_extrude_1.png (7.5 KB) - added by 5 years ago.
SHAPER: extrude example1.
-
SHAPER_example_extrude_2.png (6.1 KB) - added by 5 years ago.
SHAPER: extrude example 2.
-
SHAPER_example_box_50x50.png (7.8 KB) - added by 5 years ago.
Better image.
-
SHAPER_example_3D_polyline.png (9.2 KB) - added by 5 years ago.
SHAPER: 3D polyline.
- SHAPER_UI_mouse_interaction_style_button.png (733 bytes) - added by 5 years ago.
- SHAPER_UI_fit_all_button.png (801 bytes) - added by 5 years ago.
- SHAPER_UI_3D_view_operations_buttons.png (800 bytes) - added by 5 years ago.
- SHAPER_UI_reset_view_button.png (1.0 KB) - added by 5 years ago.
-
SHAPER_example_cut.png (35.7 KB) - added by 5 years ago.
Result of example describing boolean cut method with Shaper module.
-
SHAPER_example_common.png (31.7 KB) - added by 5 years ago.
Image for SHAPER addCommon example.
-
SHAPER_example_fuse.png (24.2 KB) - added by 5 years ago.
Image for addFuse example.
-
SHAPER_example_makeFillet.png (58.5 KB) - added by 5 years ago.
Image showing the result of makeFillet.py example.
-
SHAPER_example_makeFillet_Z_aligned_edges.png (9.4 KB) - added by 5 years ago.
Image showing the result of makeFillet_Z_aligned_edges.py example.
-
SHAPER_STEP_import_with_QFileDialog.png (83.1 KB) - added by 5 years ago.
Image for SHAPER PyQt5 QFileDialog example for importing STEP file.
Download all attachments as: .zip