Version 16 (modified by 5 years ago) (diff) | ,
---|
SALOME SHAPER
-
Osnovna orodja za pregledovanje 3D modela v SHAPER oknu
-
Predstavitev SHAPER modula na primerih
- 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: Boolova algebra: odštevanje (ang. cut)
- Primer: Uvoz STEP modela in izluščevanje topoloških elementov
-
Predstavitev SHAPER modula na primerih
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.
Povezave:
- Povezave za prenos SALOME programa
- Predstavitev SHAPER modula
- SHAPER dokumentacija
- SHAPER dokumentacija (moduli, opis funkcij itd.)
- SHAPER primeri na Youtube
- SHAPER interaktivni tutorial
Osnovna orodja za pregledovanje 3D modela v SHAPER oknu
- Aktiviranje načina interakcije z miško (Prvi način omogoča interakcijo z objekti npr. točkami, drugi pa spreminjanje pogleda 3D modela).
- Sprememba pogleda za prikaz na celotnega območje oz. 3D modela.
- Spreminjanje pogleda od strani.
- Resetiranje pogleda na prvotni pogled.
Predstavitev SHAPER modula na primerih
V nadaljevanju so prikazani primeri uporabe na podlagi vnosa Python ukazov v SALOME Python konzolo.
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 središča cevi torusa=20 , polmer cevi torusa=10 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šnjemu 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: Boolova algebra: odštevanje (ang. cut)
Spodaj je prikazan primer boolove algebre na primeru kocke in krogle. Pri tem je kot za dodatek prikazano tudi, kako se lahko spreminja barvo in prosojnost modela, da dobimo enak rezultat kot je prikazano na sliki.
V SALOME Python konzolo vnesemo naslednje ukaze:
from salome.shaper import model model.begin() # Dodajanje novega dokumenta partSet = model.moduleDocument() moj_part = model.addPart(partSet) # Dodajanje novega part-a part_dokument = moj_part.document() # Dodajanje kocke: moja_kocka = model.addBox(part_dokument, 10, 10, 10) # - Določevanje refenc do kocke ter imena kocke (spremembe se lahko opazi tudi v # Object Browserju (GUI) moja_kocka.setName("Kocka") moja_kocka.result().setName("Kocka") # Dodajanje nove točke # To točko se bo uporabilo za definiranje pozicijo središča krogle moja_tocka = model.addPoint(part_dokument, 0, 0, 10) # - Določevanje referenc to točke ter imena točke moja_tocka.setName("Tocka") moja_tocka.result().setName("Tocka") # Dodajanje krogle s središčem v točki (vozlišče -> ang. vertex) moja_krogla = model.addSphere(part_dokument, model.selection("VERTEX", "Tocka"), 5) # - Določevanje referenc to krogle ter imena krogle moja_krogla.setName("Krogla") moja_krogla.result().setName("Krogla") # Izdelava izreza oz. odštevanja (ang. cut) moj_izrez = model.addCut(part_dokument, [model.selection("SOLID", "Kocka")], [model.selection("SOLID", "Krogla")]) # - Določevanje primernih referenc to krogle ter imena krogle # (SHAPER samodejno določi ime oz. referenco tega izreza -> "Kocka") moj_izrez.setName("Izrez") moj_izrez.result().setName("Izrez") # Dodatno: UREJANJE PRIKAZA MODELA # Določimo barvo - modro # Opomba: Barvo ne bo prikazalo takoj. V Object Broserju je potrebno model # skriti ter zopet prikazati ter se bo tako posodobila barva modela. # Drugi način je uporaba part_dokument.setAcive(False/True), kot je prikazano # proti koncu kode tega primera moj_izrez.result().setColor(255,255,0) # Prejšnja krogla nam ni več na voljo. Naredimo novo # Dodajanje krogle s središčem v točki (vozlišče -> ang. vertex) moja_krogla2 = model.addSphere(part_dokument, model.selection("VERTEX", "Tocka"), 5) # - Določevanje referenc to krogle ter imena krogle moja_krogla2.setName("Krogla2") moja_krogla2.result().setName("Krogla2") moja_krogla2.result().setColor(255,255,0) moja_krogla2.result().setTransparency(0.7) # Posodobitev barv in transparentnosti v oknu za ogled modela part_dokument.setActive(False) part_dokument.setActive(True) # Zaključevanje in prikaz modela model.do() model.end()
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