Changes between Version 10 and Version 11 of OpenCascade


Ignore:
Timestamp:
Oct 11, 2011, 11:31:58 AM (9 years ago)
Author:
skulovec
Comment:

Opis slik

Legend:

Unmodified
Added
Removed
Modified
  • OpenCascade

    v10 v11  
    1717[[Image(slika15-1.png, width=480px,align=center)]]
    1818[[BR]]
    19 Other CAD systems: Ostali modelirniki CAD
    20 Input   : Vstop v OC
    21 GUI Framework (JAD,QAD,MFC): Programski okvir GUI (JAD, QAD,MFC)
    22 Developmnet Tools (WOK, Wizards, Draw): Razvojna orodja (WOK, Wizards, Draw)
    23 Standardized Data Exchange: Standardizirana izmenjava podatkov
    24 Native Data Exchange: Priprava podatkov iz okolja
    25 Modeling Data: Modeliranje podatkov
    26 Modeling Algorithm: Algoritmi za modeliranje
    27 Mesh: Mreženje prostora za prikazovanje
    28 Foundation Classes (handles, portability): Osnovne transformacije (glavna knjižnica, matematična orodja, manipuliranje s podatki)
    29 Visualization: Predstavitev – vizualizacija
    30 Open, Components, Services: Odprti dostop, komponente – osnovne, vzdrževanje
     19Slika 1. Modularna struktura tehnologije Open CASCADE
     20[[BR]]
     21
     22Other CAD systems: Ostali modelirniki CAD[[BR]]
     23Input   : Vstop v OC[[BR]]
     24GUI Framework (JAD,QAD,MFC): Programski okvir GUI (JAD, QAD,MFC)[[BR]]
     25Developmnet Tools (WOK, Wizards, Draw): Razvojna orodja (WOK, Wizards, Draw)[[BR]]
     26Standardized Data Exchange: Standardizirana izmenjava podatkov[[BR]]
     27Native Data Exchange: Priprava podatkov iz okolja[[BR]]
     28Modeling Data: Modeliranje podatkov[[BR]]
     29Modeling Algorithm: Algoritmi za modeliranje[[BR]]
     30Mesh: Mreženje prostora za prikazovanje Foundation Classes (handles, portability):[[BR]]
     31Osnovne transformacije (glavna knjižnica, matematična orodja, manipuliranje s podatki)[[BR]]
     32Visualization: Predstavitev – vizualizacija[[BR]]
     33Open, Components, Services: Odprti dostop, komponente – osnovne, vzdrževanje [[BR]]
    3134
    3235Na sliki 1 je prikazana struktura in modularna zgradba OC. Predstavljena je sestava in pozicija posameznega modula v OC. V nadaljevanju bomo predstavili značilnosti vseh pomembnih vsebin posameznih modulov.
     
    100103[[Image(slika15-2.png, width=480px,align=center)]]
    101104[[BR]]
     105Slika 2. Zmogljivosti grafike Open CASCADE – modeliranje
     106[[BR]]
    102107
    103108WOK (Workshop Organization Kit) je podprogramski sklop, ki omogoča odpošiljanje enega ali več nizov strukturnih elementov programske kode velikih razvojnih projektov. Tak projekt je lahko sklop razvojnih podprojektov, ki jih nato razvijalci uporabijo za nadaljnji razvoj s standardnimi orodji in v sistemu organizacije različnih razvojnih timov v distribuiranih delovnih področjih. WOK omogoča prost dostop do standardnih nalog razvojnega procesa z raznimi orodji, kot so: urejevalniki (editorji), prevajalniki, povezovalniki (linkerji), iskalniki napak (debugerji) itd.
     
    105110[[BR]]
    106111[[Image(slika15-3.png, width=480px,align=center)]]
     112[[BR]]
     113Slika 3. Zmogljivosti grafike Open CASCADE – mreženje
    107114[[BR]]
    108115
     
    121128[[Image(slika15-4.png, width=300px,align=center)]]
    122129[[BR]]
     130Slika 4. Dimenzijski popis 3D-modela
     131[[BR]]
    123132
    124133== Algoritem izdelave enostavnega 3D-modela ==
     
    129138[[BR]]
    130139[[Image(slika15-5.png, width=480px,align=center)]]
     140[[BR]]
     141Slika 5. Sklop točk v ravnini XY
    131142[[BR]]
    132143
     
    142153[[Image(slika15-6.png, width=480px,align=center)]]
    143154[[BR]]
     155Slika 6. Definiranje točk v ravnini (glej sliko 5)
     156[[BR]]
    144157
    145158Če se odločimo uporabiti za kreiranje objekta Geom_CartesianPoint, pa je sintaksa izdelave posamezne točke drugačna. Vsi objekti, zgrajeni s kazalcem handle, morajo uporabljati standarden C++ operator new. Podatki se zbirajo po principu, ki je prikazan na
     
    148161[[Image(slika15-7.png, width=480px,align=center)]]
    149162[[BR]]
     163Slika 7. Uporaba ukaza handle za izdelavo točke
     164[[BR]]
    150165
    151166Če želimo v nadaljevanju programa prebrati podatke (npr. koordinate) o katerikoli izbrani točki v kartezičnem koordinatnem sistemu, lahko to opravimo na način, prikazan na sliki 8.
     
    153168[[Image(slika15-8.png, width=480px,align=center)]]
    154169[[BR]]
     170Slika 8. Prebiranje koordinat za posamezno točko
     171[[BR]]
    155172
    156173=== Povezovanje točk s krivuljami ===
     
    160177[[Image(slika15-9.png, width=480px,align=center)]]
    161178[[BR]]
     179Slika 9. Prikaz posameznih krivulj med posameznimi točkami
     180[[BR]]
    162181
    163182Za risanje krivulj, prikazanih na sliki 9 moramo v programsko kodo vključiti trodimenzionalne geometrijske objekte, ki se nahajajo v paketu OC Geom. Za vse vrste krivulj (npr. daljica je krivulja) uporabimo specifičen ukaz. V našem primeru za izdelavo segmenta (ravna linija – daljica) uporabimo objekt GC_MakeSegment. Segment se izdela tako, da določimo dve robni točki P1 in P2 in za povezavo med njima določimo ravno linijo. Za objekt po sliki 9 moramo povezati oba konca segmentov s krivuljo, ki je določena s tremi točkami. Izbor zaporednih ukazov za posamezne geometrijske elemente, to je dveh segmentov in loka, je prikazan na sliki 10. Obe funkciji za izdelavo krivulj uporabljata ukaz handle Geom_TrimmedCurve.
     
    165184[[Image(slika15-10.png, width=480px,align=center)]]
    166185[[BR]]
     186Slika 10. Izdelava posameznih elementov, v splošnem krivulj med izbranima točkama
     187[[BR]]
    167188
    168189[[BR]]
    169190[[Image(slika15-11.png, width=480px,align=center)]]
     191[[BR]]
     192Slika 11. Ukaz za preverjanje možnosti izdelave krivulj med dvema točkama
    170193[[BR]]
    171194
     
    177200Če želimo poenostaviti modeliranje, je potrebno narisane krivulje združiti v eno samo. Združevanje izvedemo s podatkovno topološko strukturo OC, tako da uporabimo sklop ukazov paketa TopoDS. Ukazi TopoDS vsebujejo definicijo med geometrijskimi entitetami, ki so lahko združene. Objekti, ki jih določimo s pomočjo sklopa ukazov TopoDS, so prikazani v spodnji tabeli.
    178201
    179 || Oblika || Open CASCADE objekti || Opis ||
     202||=Oblika= || =Open CASCADE objekti= || =Opis= ||
    180203|| Vertex || TopoDS_Vertex || Brezdimenzionalna oblika, ki ustreza geometriji točke ||
    181204|| Edge   || TopoDS_Edge   || Enodimenzionalna oblika, ki ustreza krivuljam in je omejena na robovih ||
     
    189212[[Image(slika15-12.png, width=480px,align=center)]]
    190213[[BR]]
     214Slika 12. Prikaz izdelave elementov robov (Edge)
     215[[BR]]
    191216
    192217Posamezne izrisane krivulje združimo glede na ukazje po tabeli 1 tako, da dobimo tri robove, ki so med seboj povezani (slika 12), zato jih omenjeni ukazi tudi označijo ter atribute zapišejo v bazo podatkov.
     
    195220[[Image(slika15-13.png, width=480px,align=center)]]
    196221[[BR]]
     222Slika 13. Opredelitev topološkega elementa (rob, ang. Edge) iz krivulj
     223[[BR]]
    197224
    198225V OC je poleg izdelave robov s preddoločenimi krivuljami mogoča tudi izdelava robov neposredno s pomočjo določitve posameznih točk. Omenjeni način pa velja samo za izdelavo ravnih krivulj med dvema poljubnima točkama.
    199226[[BR]]
    200227[[Image(slika15-14.png, width=480px,align=center)]]
     228[[BR]]
     229Slika 14. Ukaz za določanje robov neposredno iz izbranih točk
    201230[[BR]]
    202231
     
    212241[[Image(slika15-15.png, width=480px,align=center)]]
    213242[[BR]]
     243Slika 15. Ukaz, s katerim iz opredeljenega števila robov določimo mrežo, ki je topološko opredeljena
     244[[BR]]
    214245
    2152462)      Mreženje skupine robov, ki je zaprto
     
    219250[[Image(slika15-16.png, width=480px,align=center)]]
    220251[[BR]]
     252Slika 16. Izdelava zrcalne slike prvotno definiranega lika.  Označimo rob in določimo os zrcaljenja.
     253[BR]]
    221254
    222255Pred procesom zrcaljenja pa moramo opredeliti širši prostor, v katerem bomo nato uporabili 3D-transformacije. V ta namen vključimo modul za trodimenzionalno geometrijsko transformacijo (gp_Trsf). Omenjeni modul vsebuje značilne funkcije transformacij, kot so translacija, rotacija, skaliranje, zrcaljene itd., in omogoča različne kombinacije med njimi. V našem primeru se osredotočimo na zrcaljene okrog osi X globalnega koordinatnega sistema XYZ (glej sliko 4).
     
    228261[[Image(slika15-17.png, width=480px,align=center)]]
    229262[[BR]]
     263Slika 17. Opredelitev potrebnega števila spremenljivk, ki omogoča določitev osi X
     264[[BR]]
    230265
    2312662)      opredelitev osi X v prostoru z neposrednim ukazom
     
    233268[[Image(slika15-18.png, width=480px,align=center)]]
    234269[[BR]]
    235 
     270Slika 18. Ukaz za neposredno določitev osi X, ki pa je osnovana na vnaprej določenem oz. aktualnem koordinatnem sistemu
     271[[BR]]
    236272Če želimo izvajati zrcaljenje okoli prej opredeljene osi X, v nadaljevanju uporabimo zrcalno metodo SetMirror.
    237273[[BR]]
    238274[[Image(slika15-19.png, width=480px,align=center)]]
    239275[[BR]]
    240 
     276Slika 19. Opredelitev zrcalne osi in njene spremenljivke
     277[[BR]]
    241278Sedaj imamo vse parametre, ki jih potrebujemo za izvedbo zrcaljenja mreže robov okrog osi X. Za samo zrcaljenje pa uporabimo ukaz, ki vsebuje argument zrcaljene geometrije in podatke o osi, okrog katere izvedemo zrcaljenje.
    242279[[BR]]
    243280[[Imag(slika15-20.png, width=480px,align=center)]]
    244281[[BR]]
    245 
     282Slika 20. Ukaz za procesiranje zrcaljenja po prej določeni osi X, okoli katere se zrcaljenje izvede
     283[[BR]]
    246284Funkcija BrepBuilderAPI_Transform ne spreminja narave zrcaljene oblike, zato smo dobili poleg zrcalne slike mreže tudi samo mrežo robov. Da vrnemo mrežo robov nazaj, moramo uporabiti reverzno funkcijo oziroma ukaz BrepBuilderAPI_Transform::Shape, ki vrne objekt TopoDS_Shape v prvotno lego.
    247285[[BR]]
    248286[[Image(slika15-21.png, width=480px,align=center)]]
    249287[[BR]]
     288Slika 21. Ukaz za reverzno funkcijo, ki mrežo robov povrne v zrcalno geometrijo Shape
     289[[BR]]
    250290
    251291Sedaj imamo dve mreži robov. Ena je osnovna, druga pa zrcaljena v enem delu. Da lahko začnemo sestavljati novo mrežo robov, moramo najprej stare povezave, določene s staro topologijo, prestaviti v skupino krivulj. Za tako operacijo uporabimo sklop ukazov TopoDS. Z ukazom TopoDS::Wire tako vrnemo mrežo robov v skupino krivulj.
     
    253293[[Image(slika15-22.png, width=480px,align=center)]]
    254294[[BR]]
    255 
     295Slika 22. Ukaz za formiranje topološkega zapisa mreže robov, ki ga izvedemo iz nedoločeno povezane mreže robov
     296[[BR]]
    256297[[BR]]
    257298[[Image(slika15-23.png, width=480px,align=center)]]
    258299[[BR]]
    259 
     300Slika 23. Združitev prvotne in zrcalne mreže
     301[[BR]]
    260302Sedaj imamo skupino krivulj, ki jo moramo povezati v mrežo robov. Ker so robovi med seboj povezani, dobimo zaključeno oziroma zaprto mrežo robov ali enostavno zanko. Za tako operacijo uporabimo ukaz BrepBuilderAPI_MakeWire. Najprej določimo naziv za mrežo, nato pa pod tem imenom vpisujemo zaporedno od prvega roba do zadnjega in tako ustvarimo zaprto mrežo oziroma zanko.
    261303
     
    265307
    266308Tabela: Povezava med gradniki in elementi
    267 || Oblika || Generira ||
     309|| =Oblika= || =Generira= ||
    268310|| Vertex || Edge  ||
    269311|| Edge  || Face  ||
     
    275317[[Image(slika15-24.png, width=300px,align=center)]]
    276318[[BR]]
    277 
     319Slika 24. Prikaz 3D geometrije izvedene s funkcijo izvleka
     320[[BR]]
    278321V računalniški terminologiji se velikokrat za enake fizikalne predstavitve ali procese uporablja več različnih izrazov. Tudi v našem primeru je pri uporabi pojma Shell (Loop) potrebno razumeti, da je to v bistvu zanka. Zanka je zaključena mreža robov, ki v geometriji dejansko predstavlja lik. Pogoj za to je, da vsi robovi in točke ležijo v isti ravnini. V opisanem programu OC se pojavljata pojma, ki sta opredeljena kot mreža robov (odprta zanka) ali zaprta mreža robov (zaprta zanka). Opozorilo o različnih terminih smo dodali zato, da bo dodaten študij programa OC lažji in ne zavajujoč.
    279322Na začetku predvidene operacije imamo samo zanko robov, zato moramo najprej opredeliti površino osnovnega lika. Za opredelitev površine uporabimo poseben ukaz BrepBuilderAPI_MakeFace. Kot smo že povedali, je površina sestavljena iz zaključene mreže robov, to je zanke. Če vse točke in celotna zanka robov ležijo na isti ravnini, se lahko ukaz za izvlek uporabi neposredno.
     
    281324[[Image(slika15-25.png, width=480px,align=center)]]
    282325[[BR]]
    283 
     326Slika 25. Ukaz, ki opredeli zanko robov kot površino. Na ta način dobimo iz enega topološkega elementa drugi višji topološki element
     327[[BR]]
    284328Podprogrami BrepBuilderAPI omogočajo izdelavo topoloških primitivov konstrukcij, kot so škatle, stožci, valji, krogle itd. V tej skupini podprogramov je tudi ukaz za izdelavo prizme BrepPrimAPI_MakePrism. Za uporabo tega ukaza potrebujemo naslednja parametra: 1) osnovni lik, ki je določen s površino in 2) smerni vektor, v smer katerega se izdela izvlek osnovne oblike. Smerni vektor za izdelavo prizme v smeri površinske normale na določeno višino prizme je določen z ukazom myHeight:
    285329[[BR]]
    286330[[Image(slika15-26.png, width=480px,align=center)]]
    287331[[BR]]
    288 
     332Slika 26. Ukaz za določitev vektorja izvleka, ki je v tem primeru pravokoten, glede na osnovno površino
     333[[BR]]
    289334Na osnovi obeh parametrov lahko s sklepnim ukazom izvedemo model prizme. Zato uporabimo ukaz BrepPrimAPI_MakePrism, ki določi vse topološke podatke za prizmo, ki tako postane trdno telo.
    290335[[BR]]
    291336[[Image(slika15-27.png, width=480px,align=center)]]
    292337[[BR]]
    293 
     338Slika 27. Določitev naslednjega topološkega elementa, trdno telo, to je naš 3-D model
     339[[BR]]
    294340=== Zaokroževanje robov ===
    295341
     
    298344[[Image(slika15-28.png, width=300px,align=center)]]
    299345[[BR]]
    300 
     346Slika 28. 3D model z zaokroženimi robovi
     347[[BR]]
    301348Za izvajanje zaokroževanj (Fillets) robov na poljubnih 3D-modelih lahko uporabimo sklop ukazov BrepFilletAPI_MakeFillet. Različne ukaze uporabljamo na naslednji način:
    302349v sklopu ukazov BrepFilletAPI_MakeFillet (kot neke vrste konstruktor) določimo 3D-model, kateremu želimo zaokrožiti robove;
     
    306353[[Image(slika15-29.png, width=480px,align=center)]]
    307354[[BR]]
    308 
     355Slika 29. Ukaz za aktiviranje zaokroževanja
     356[[BR]]
    309357Prav pri zaokrožitvah se velikokrat pojavi zahteva po dopolnjevanju ali spreminjanju podatkov. Zato moramo uporabiti funkcijo prikazovanja podatkov na zaslonu neposredno. Z namenom, da imamo podatke predstavljene na zaslonu in jih nato po potrebi spreminjamo, uporabimo ukaz TopExp_Explorer, ki pregleda zapisane podatke o izbranem modelu in nam vrne klicane parametre:
    310358[[BR]]
    311359[[Image(slika15-30.png, width=480px,align=center)]]
    312360[[BR]]
    313 
     361Slika 30. Izpisovanje podatkov o zaokroženih robovih
     362[[BR]]
    314363Raziskovalec (Explorer) je vgrajen v zanko in uporablja tri glavne metode:
    315364More – poizvedba o podmodelih (sub-shapes), ki jih mora še raziskati;
     
    319368[[Image(slika15-31.png, width=480px,align=center)]]
    320369[[BR]]
    321 
     370Slika 31. Za iskanje robov v 3-D modelu uporabljamo while zanko
     371[[BR]]
    322372S pomočjo raziskovalne zanke (explorer loop) lahko odkrijemo vse robove na izbranem modelu. Če želimo posamezni rob pridodati v nabor zaokroženih robov, to izvedemo z ukazom za dodajanje Add v ukaznem sestavu BrepFilletAPI_MakeFillet. Poleg podatka o zaokroženem robu moramo določiti še polmer zaokrožitve robov:
    323373[[BR]]
    324374[[Image(slika15-32.png, width=480px,align=center)]]
    325375[[BR]]
    326 
     376Slika 32. Ukaz za določitev polmera zaokrožitve za skupino robov
     377[[BR]]
    327378[[BR]]
    328379[[Image(slika15-33.png, width=300px,align=center)]]
    329380[[BR]]
    330 
     381Slika 33. 3D model z izpisanimi vrednostmi zaokrožitev na robovih (vse zaokrožitve na modelu so myThickness/12)
     382[[BR]]
    331383Po zaporednem določanju robov in polmerov zaokrožitev nato z zadnjim ukazom postavimo zahtevo za eksekutivno izvedbo oblike za vse izbrane robove. Na ta način zapišemo vse zaokrožene oziroma spremenjene površine v bazo podatkov za obravnavano trdno telo.
    332384[[BR]]
    333385[[Image(slika15-34.png, width=480px,align=center)]]
    334386[[BR]]
    335 
     387Slika 34. Vpis spremenjenih (zaokroženih) površin v bazo podatkov za obravnavano trdno telo v jeziku C++
     388[[BR]]
    336389Z uporabo zadnjega ukaza imamo v bazi podatkov vse podatke in zapisano topologijo. S primerom smo poskušali predstaviti generiranje relativno enostavne oblike, ki pa v končni obliki postane zelo kompleksen model. Razumljivo je, da tako enostavnih oblik v naravi praviloma ni. Prav v tem pa se izkaže prednost OC. Če namreč pri komercialno uporabnih modelirnikih določene zahtevnejše oblike ne moremo zanesljivo določiti v vseh detajlih, pa z uporabo OC lahko dobimo bistveno natančnejši popis oblike tudi pri najzahtevnejših prostih površinah. V knjigi je predstavljen zelo zožen nabor ukazov. V knjižnici je bistveno več ukazov, ki si jih uporabnik lahko dodatno ogleda in uporablja.
    337390
     
    342395[[Image(slika15-35.png, width=480px,align=center)]]
    343396[[BR]]
    344 
     397Slika 35. Mrežna struktura CAD in vozliščni element
     398[[BR]]
    345399Primer, ki ga obravnavamo, je predstavljen zato, da lahko potrdimo možnost celotnega procesa razvoja, inženirske analize, konstrukcije, izdelave, transporta, montaže in finalne uporabe. Pri tem je bil razvit poseben program, ki omogoča spremljanje vseh faz procesa zato, ker je v celoti določena geometrija in so sprotno obvladljivi vsi podatki, potrebni za kakršnekoli analize in določanja oblike. Zaradi povečane hitrosti procesiranja je bila prednost takega pristopa izkazana že v treh ponovljenih izvedbah.
    346400Na sliki 35 je prikazan mrežni model CAD, izdelan s programskim jezikom C++ in CAD-jedrom OC. Mrežni model je izdelan iz poljubne vhodne mrežne strukture, ki je sestavljena iz petnajstih vozlišč. Za vsako vozlišče bomo glede na orientacijo posameznega vozlišča izdelali cilindrični vozliščni element, na katerega se varijo oziroma po potrebi vijačijo I-profili, ki jih modeliramo v poenostavljeni obliki.
     
    348402[[Image(slika15-36.png, width=300px,align=center)]]
    349403[[BR]]
    350 
     404Slika 36. 3D model vozliščnega elementa
     405[[BR]]
    351406V nadaljevanju bomo predstavili zaporedje glavnih funkcij oz. operacij v OC ter izpeljane ukaze za izdelavo tako zastavljenega modela oziroma konstrukcije. Postopek za modeliranje posameznega elementa z izvlekom je predstavljen v prejšnjem poglavju, zato se pri izdelavi CAD-modela vozlišča osredotočimo predvsem na novo uporabljene funkcije.
    352407
     
    363418[[Image(slika15-37.png, width=480px,align=center)]]
    364419[[BR]]
    365 
     420Slika 37. Priprava oziroma rezervacija raznih spremenljivk vozliščnega elementa
     421[[BR]]
    366422=== Izdelava profilnih elementov v vozlišču (točke, robovi, mreže, zanka,   površina) ===
    367423
     
    370426[[Image(slika15-38.png, width=480px,align=center)]]
    371427[[BR]]
    372 
     428Slika 38. Definiranje točk vozliščnega profila v prostoru
     429[[BR]]
    373430V nadaljevanju določimo robove vozliščnega elementa, ki so odvisni od dimenzij I-profila.
    374431[[BR]]
    375432[[Image(slika15-39.png, width=480px,align=center)]]
    376433[[BR]]
    377 
     434Slika 39. Ukaz za izdelavo robov iz posameznih točk
     435[[BR]]
    378436Predstavljene točke moramo združiti v linijske robne elemente, ki jih v nadaljevanju uporabimo za tvorjenje mreže robov, nato v zaprte mreže robov oz. zanke, površine in na koncu po izvajanju izvleka opredelimo še pravi 3D-model.
    379437Iz robov myEdge1 … myEdge12 v nadaljevanju tvorimo mrežo myWire1 … myWire3. Ker lahko v eno mrežo vključimo največ štiri robove, je potrebno izdelati tri mreže, ki jih združimo (Add) in ustvarimo eno mrežo z imenom myWire, kakor je prikazano na sliki 40.
     
    381439[[Image(slika15-40.png, width=480px,align=center)]]
    382440[[BR]]
    383 
     441Slika 40. Ukaz za izdelavo posameznih in skupne mreže robov
     442[[BR]]
    384443Zaprto mrežo robov ali zanko v nadaljevanju uporabimo za določitev površine myFace. Ko je površina osnovne ploskve (ali bolje osnovni lik) določena, lahko izvedemo njen izvlek s pomočjo smernega vektorja vector, ki ga izračunamo glede na začetno in končno točko dolžine realnega I-profila. Tako dobimo 3D-model I-profila, ki ga opredelimo z ukazom myShape.
    385444[[BR]]
    386445[[Image(slika15-41.png, width=480px,align=center)]]
    387446[[BR]]
     447Slika 41. Ukaz za izvlek osnovne površine, ki ima določeno dolžino vector, za opredelitev 3-D modela realnega I-profila
     448[[BR]]
    388449
    389450=== Rezanje profilnih elementov ===
     
    393454[[Image(slika15-42.png, width=480px,align=center)]]
    394455[[BR]]
    395 
     456Slika 42. Določitev glavnih podatkov za izdelavo valja vozliščnega elementa
     457[[BR]]
    396458[[BR]]
    397459[[Image(slika15-43.png, width=480px,align=center)]]
    398460[[BR]]
    399 
     461Slika 43. Izdelava 3-D modela valja vozliščnega elementa
     462[[BR]]
    400463
    401464V prvem delu (slika 43) kode določimo pozicijo, smer in premer valja, ki ga generiramo kot del vozliščnega elementa. Nato pa v nadaljevanju odrežemo že generirane I-profile od po sliki 43 generiranega valja vozliščnega elementa. Ukaz za Booleanovo operacijo je predstavljen na sliki 44.
     
    403466[[Image(slika15-44.png, width=480px,align=center)]]
    404467[[BR]]
     468Slika 44. Booleanova operacija , ki določi razlike med valjem in vozliščnimi profili
     469[[BR]]
    405470
    406471Posebej moramo opozoriti, da vozliščni I-profil myShapeI ne poteka natančno do mrežnega vozlišča, ampak samo do prirobnice, ki jo predstavlja sedaj generirani valj vozliščnega elementa. Zaradi tega moramo I-profil odrezati na razdalji zunanjega roba cilindričnega vozlišča z ukazom cylinderCut. Operacijo odrezovanja izvedemo s pomočjo Booleanove operacije razlike. Od izbranega elementa I-profila odštejemo vozliščno geometrijo s funkcijo BrepAlgo_Cut. Takoj za izvedeno operacijo nato preostanek oziroma odrezani I-profil shranimo v sestav aResI, ki smo ga opredelili na samem začetku. To izvedemo z uporabo ukaza AddAIS_Shape, ki pa nam omogoči tudi prikazovanje rezultata v želeni barvi.
     
    412477[[Image(slika15-45.png, width=480px,align=center)]]
    413478[[BR]]
    414 
     479Slika 45. Izdelava zgornjega dela valja vozliščnega elementa
     480[[BR]]
    415481=== Določitev vozliščnih parametrov (smer, razdalja, sestavni deli) ===
    416482
     
    421487[[Image(slika15-46.png, width=480px,align=center)]]
    422488[[BR]]
    423 
     489Slika 46. C++ koda izdela vmesni del valja vozlišča
     490[[BR]]
    424491Drugi del sestava vozliščnega elementa vozliščnega cilindra je osrednji (ožji) del. Določimo ga tako, da najprej določimo premer srednjega dela cilindra, ki ga popisuje spremenljivka radius z dimenzijo 21,2 mm. Višina valja je 109 mm in jo lahko programsko vpišemo kot spremenljivko height. Tako določenemu in poimenovanemu srednjemu delu vozliščnega elementa nato s pomočjo Booleanove operacije razlike izvrtamo skoznjo izvrtino premera 31,2 mm (pazite, to je polmer 15,6 mm!). Zgornji del srednjega dela vozliščnega elementa priključimo spodnji površini zgornjega vozliščnega elementa takrat, kadar sta centrični glede na isto srednjico. Poudarimo naj, da spodnja površina velikega valja (prvi, ki smo ga generirali) leži na zgornji površini srednjega dela, to je drugega valja.
    425492[[BR]]
    426493[[Image(slika15-47.png, width=480px,align=center)]]
    427494[[BR]]
    428 
     495Slika 47. Zaporedje ukazov za modeliranje tretjega valja, ki j oblikovno enak prvemu delu
     496[[BR]]
    429497[[BR]]
    430498[[Image(slika15-48.png, width=480px,align=center)]]
    431499[[BR]]
    432 
     500Slika 48. C++ koda z uporabo OC funkcij izdela STEP/IGES format CAD modela
     501[[BR]]
    433502[[BR]]
    434503[[Image(slika15-49.png, width=480px,align=center)]]
    435504[[BR]]
    436 
     505Slika 49. STEP (levo) in IGES (desno) modela vozlišča generirana v Open CASCADE in uvožena v ProEngineer Wildfire 3.0
     506[[BR]]
    437507Na sliki 49 imamo predstavljen model CAD našega vozliščnega elementa z vsemi priključenimi I-profili, ki je uvožen v formatu STEP/IGES v ProE Wildfire 3.0. Na ta način dokazujemo splošno uporabnost takega nevtralnega formata.
    438508
     
    443513[[Image(slika15-50.png, width=480px,align=center)]]
    444514[[BR]]
    445 
     515Slika 50. Poenostavljeni I-profili, ki med sabo povezujejo vozliščne elemente
     516[[BR]]
    446517Slika 50 prikazuje model CAD poenostavljenega I-profila. Predstavljeni elementi I-profilov so odrezani glede na zunanjo površino cilindričnega vozlišča. V nadaljevanju je predstavljen algoritem poteka izdelave modela CAD poenostavljenega I-profila.
    447518
     
    454525[[Image(slika15-51.png, width=480px,align=center)]]
    455526[[BR]]
    456 
     527Slika 51. Ukaz za shranjevanje v spomin posameznih I-profilov, kot elementov CAD modela
     528[[BR]]
    457529Predvideni sestav ima ime aResI, ki ga izberemo in omogoča shranjevanje podatkov za I-profile.
    458530
     
    463535[[Image(slika15-52.png, width=480px,align=center)]]
    464536[[BR]]
    465 
     537Slika 52. Ukazje za določitev začetne in končne točke izbranega profila
     538[[BR]]
    466539
    467540=== Določitev normale za izbrani rob ===
     
    471544[[Image(slika15-53.png, width=480px,align=center)]]
    472545[[BR]]
     546Slika 53. Ukaz za izračun robnih normal
     547[[BR]]
    473548
    474549=== Tvorjenje robnih točk poenostavljenega I-profila (glej sliko 48) ===
     
    478553[[Image(slika15-54.png, width=480px,align=center)]]
    479554[[BR]]
    480 
     555Slika 54. Določitev pozicije točk prereza poenostavljenega I-profila
     556[[BR]]
    481557=== Tvorjenje robov iz robnih točk poenostavljenega I-profila ===
    482558
     
    485561[[Image(slika15-55.png, width=480px,align=center)]]
    486562[[BR]]
    487 
     563Slika 55. Iz znanih točk določimo robove in zanko robov za določitev osnovnega lika
     564[[BR]]
    488565=== Tvorjenje mreže robov (zanke) iz robov prereza ===
    489566
     
    492569[[Image(slika15-56.png, width=480px,align=center)]]
    493570[[BR]]
    494 
     571Slika 56. Iz robov C++ koda izdela posamezne in skupno mrežo
     572[[BR]]
    495573=== Določitev površine prereza in modela CAD poenostavljenega I-profila ===
    496574
     
    500578[[Image(slika15-57.png, width=480px,align=center)]]
    501579[[BR]]
    502 
     580Slika 57. Določitev smernega vektorja izvleka profila in izdelava 3-D elementa
     581[[BR]]
    503582=== Izvoz formata STEP /IGES modela CAD poenostavljenega I-profila in uvoz formata STEP/IGES v ProE Wildfire 3.0 ===
    504583
     
    507586[[Image(slika15-58.png, width=480px,align=center)]]
    508587[[BR]]
    509 
     588Slika 58. Ukaz za prenos podatkovne strukture iz OC v nevtralni format STEP/IGES format
     589[[BR]]
    510590[[BR]]
    511591[[Image(slika15-59.png, width=480px,align=center)]]
    512592[[BR]]
    513 
     593Slika 59. STEP (levo) in IGES (desno) modela I profila generirana v Open CASCADE in uvožena v ProEngineer Wildfire 3.0
     594[[BR]]
    514595Za risanje modelov CAD celotne mrežne konstrukcije ali konstrukcije, ki vsebuje več kot en poenostavljeni I-profil, uporabimo robni dopolnjevalec edge iterator, ki ga sistematično vključimo npr. v C++ for zanko. Tako uporabimo zanko za vsak izbrani izhodiščni rob kateregakoli prej določenega profila. V našem primeru velja zančje za poenostavljeni I-profil.
    515596