Changes between Version 17 and Version 18 of salome_shaper


Ignore:
Timestamp:
Nov 6, 2019, 4:27:58 PM (5 years ago)
Author:
dpenko
Comment:

Add code example for creating fillets using SHAPER.

Legend:

Unmodified
Added
Removed
Modified
  • salome_shaper

    v17 v18  
    425425Celotna koda je na voljo [http://trac.lecad.si/vaje/browser/python/SHAPER/boolean/common.py tukaj].
    426426
     427=== Primer: Zaokroževanje robov (ang. fillet) ===
     428
     429
     430V nadaljevanju je prikazan način za zaokrožitev vseh robov na primeru kocke.
     431Celotna koda je na voljo tudi [http://trac.lecad.si/vaje/browser/python/SHAPER/fillets/makeFillet.py tukaj].
     432
     433[[Image(SHAPER_example_makeFillet.png,right,300px)]]
     434
     435{{{
     436#!python
     437
     438"""
     439SALOME SHAPER modul:
     440Primer izdelave zaokrožitve vseh robov na primeru kocke.
     441"""
     442
     443from salome.shaper import model
     444from GeomAPI import *
     445
     446# Kreiranje SHAPER session-a
     447model.begin()
     448# Kreiranje objekta: t.i. "dokument", ki predstavlja temelje aplikacije
     449# (root document of SHAPER)
     450partSet = model.moduleDocument()
     451# Dodajanje part-a v model
     452moj_part = model.addPart(partSet)
     453# Kreiranje objekta za dostop do pod-dokumenta, ki se nanaša na part
     454part_dokument = moj_part.document()
     455# Dodajanje kocke
     456kocka = model.addBox(part_dokument, 10, 10, 10)
     457
     458# Objekt, ki vsebuje lastnosti modela
     459result = kocka.defaultResult()
     460
     461# Raziskovalec oblik: robovi (EDGE)
     462shapeExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.EDGE)
     463
     464# Iteriranje skozi robove, dokler jih "raziskovalec robov" še najde
     465seznam_robov = []
     466while shapeExplorer.more():
     467    # Dodajanje najdenih robov na seznam
     468    izbor = model.selection(result, shapeExplorer.current().edge())
     469    seznam_robov.append(izbor)
     470    # Iteriranje na naslednji najden rob
     471    shapeExplorer.next()
     472
     473# Definiranje radija zaokroževanja
     474radij = 2
     475
     476# Izvedba zaokrožitve po vseh robovih v seznamu
     477zaokrozitev = model.addFillet(part_dokument, seznam_robov, radij)
     478
     479# Zaključevanje in prikaz modela
     480model.do()
     481model.end()
     482}}}
     483
     484
     485=== Primer: Zaokroževanje robov, ki potekajo v smeri Z osi ===
     486
     487V nadaljevanju je prikazan način za zaokrožitev le tistih robov, ki potekajo v smeri Z osi.
     488{{{GeomAPI_ShapeExplorer}}} je tu bistvenega pomena in prikaže, kako se lahko is modela
     489izlušči le tiste elemente, ki ustrezajo določenim pogojem.
     490
     491Celotna koda je na voljo tudi [http://trac.lecad.si/vaje/browser/python/SHAPER/fillets/makeFillet_Z_aligned_edges.py tukaj].
     492
     493[[Image(SHAPER_example_makeFillet_Z_aligned_edges.png,right,300px)]]
     494
     495{{{
     496#!python
     497
     498"""
     499SALOME SHAPER modul:
     500Primer izdelave zaokrožitve robov le robov, usmerjenih v smeri Z osi.
     501"""
     502
     503from salome.shaper import model
     504from GeomAPI import *
     505
     506# Kreiranje SHAPER session-a
     507model.begin()
     508# Kreiranje objekta: t.i. "dokument", ki predstavlja temelje aplikacije
     509# (root document of SHAPER)
     510partSet = model.moduleDocument()
     511# Dodajanje part-a v model
     512moj_part = model.addPart(partSet)
     513# Kreiranje objekta za dostop do pod-dokumenta, ki se nanaša na part
     514part_dokument = moj_part.document()
     515# Dodajanje kocke
     516kocka = model.addBox(part_dokument, 10, 10, 10)
     517
     518# Objekt, ki vsebuje lastnosti modela
     519result = kocka.defaultResult()
     520
     521# Raziskovalec oblik: robovi (EDGE)
     522shapeExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.EDGE)
     523
     524# Iteriranje skozi robove, dokler jih "raziskovalec robov" še najde
     525seznam_robov = []
     526while shapeExplorer.more():
     527    # Objekt, ki vsebuje lastnosti geometrije trenutno najdenega robu
     528    rob = shapeExplorer.current().edge()
     529    # Objekt, ki se navezuje izbor robu na podlagi vmesnika (interface)
     530    izbor = model.selection(result, rob)
     531
     532    # XYZ koordinate prve točke robu
     533    prva_tocka = [rob.firstPoint().x(),
     534                  rob.firstPoint().y(),
     535                  rob.firstPoint().z()]
     536    # XYZ koordinate druge točke robu
     537    druga_tocka = [rob.lastPoint().x(),
     538                   rob.lastPoint().y(),
     539                   rob.lastPoint().z()]
     540
     541    # Primerjanje prve in druge točke robu. Robovi, ki potekajo v smeri Z osi
     542    # imajo enaki X in Y koordinati oz. se razlikujejo le po Z koordinati.
     543    # V primeru da je pogoj izpolnjen, naj program doda rob v naš seznam robov
     544    if prva_tocka[0] == druga_tocka[0] and \
     545       prva_tocka[1] == druga_tocka[1]:
     546
     547        # Dodajanje najdenih robov na seznam
     548        seznam_robov.append(izbor)
     549    # Iteriranje na naslednji najden rob
     550    shapeExplorer.next()
     551
     552# Definiranje radija zaokroževanja
     553radij = 2
     554
     555# Izvedba zaokrožitve po vseh robovih v seznamu
     556zaokrozitev = model.addFillet(part_dokument, seznam_robov, radij)
     557
     558# DODATNO:
     559# Ugotavljanje lastnosti roba na podlagi objekta, ki se navezuje na vmesnik
     560moj_izbrani_rob = seznam_robov[0]
     561# Dobimo par "result" in "subShape"
     562result_rob, subShape_rob = moj_izbrani_rob.resultSubShapePair()
     563# Objekt, ki definira rob
     564moj_rob = subShape_rob.edge()
     565# Izpis koordinat robu
     566print("Prva tocka izbranega robu: x=%.1f, y=%.1f, z=%.1f" % \
     567    (moj_rob.firstPoint().x(), moj_rob.firstPoint().y(), moj_rob.firstPoint().z()))
     568print("Druga tocka izbranega robu: x=%.1f, y=%.1f, z=%.1f" % \
     569    (moj_rob.lastPoint().x(), moj_rob.lastPoint().y(), moj_rob.lastPoint().z()))
     570
     571# Zaključevanje in prikaz modela
     572model.do()
     573model.end()
     574}}}
    427575
    428576=== Primer: Uvoz STEP modela in izluščevanje topoloških elementov ===
    429577
    430 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").
     578Spodaj 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.
     579Za namene tega primera se lahko uporabi test.step datoteko, ki je priložena na tej strani (glej "priloge" oz. ang. "attachments").
    431580
    432581{{{