Changes between Version 10 and Version 11 of OpenCascade
- Timestamp:
- Oct 11, 2011, 11:31:58 AM (13 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
OpenCascade
v10 v11 17 17 [[Image(slika15-1.png, width=480px,align=center)]] 18 18 [[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 19 Slika 1. Modularna struktura tehnologije Open CASCADE 20 [[BR]] 21 22 Other CAD systems: Ostali modelirniki CAD[[BR]] 23 Input : Vstop v OC[[BR]] 24 GUI Framework (JAD,QAD,MFC): Programski okvir GUI (JAD, QAD,MFC)[[BR]] 25 Developmnet Tools (WOK, Wizards, Draw): Razvojna orodja (WOK, Wizards, Draw)[[BR]] 26 Standardized Data Exchange: Standardizirana izmenjava podatkov[[BR]] 27 Native Data Exchange: Priprava podatkov iz okolja[[BR]] 28 Modeling Data: Modeliranje podatkov[[BR]] 29 Modeling Algorithm: Algoritmi za modeliranje[[BR]] 30 Mesh: Mreženje prostora za prikazovanje Foundation Classes (handles, portability):[[BR]] 31 Osnovne transformacije (glavna knjižnica, matematična orodja, manipuliranje s podatki)[[BR]] 32 Visualization: Predstavitev – vizualizacija[[BR]] 33 Open, Components, Services: Odprti dostop, komponente – osnovne, vzdrževanje [[BR]] 31 34 32 35 Na 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. … … 100 103 [[Image(slika15-2.png, width=480px,align=center)]] 101 104 [[BR]] 105 Slika 2. Zmogljivosti grafike Open CASCADE – modeliranje 106 [[BR]] 102 107 103 108 WOK (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. … … 105 110 [[BR]] 106 111 [[Image(slika15-3.png, width=480px,align=center)]] 112 [[BR]] 113 Slika 3. Zmogljivosti grafike Open CASCADE – mreženje 107 114 [[BR]] 108 115 … … 121 128 [[Image(slika15-4.png, width=300px,align=center)]] 122 129 [[BR]] 130 Slika 4. Dimenzijski popis 3D-modela 131 [[BR]] 123 132 124 133 == Algoritem izdelave enostavnega 3D-modela == … … 129 138 [[BR]] 130 139 [[Image(slika15-5.png, width=480px,align=center)]] 140 [[BR]] 141 Slika 5. Sklop točk v ravnini XY 131 142 [[BR]] 132 143 … … 142 153 [[Image(slika15-6.png, width=480px,align=center)]] 143 154 [[BR]] 155 Slika 6. Definiranje točk v ravnini (glej sliko 5) 156 [[BR]] 144 157 145 158 Č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 … … 148 161 [[Image(slika15-7.png, width=480px,align=center)]] 149 162 [[BR]] 163 Slika 7. Uporaba ukaza handle za izdelavo točke 164 [[BR]] 150 165 151 166 Č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. … … 153 168 [[Image(slika15-8.png, width=480px,align=center)]] 154 169 [[BR]] 170 Slika 8. Prebiranje koordinat za posamezno točko 171 [[BR]] 155 172 156 173 === Povezovanje točk s krivuljami === … … 160 177 [[Image(slika15-9.png, width=480px,align=center)]] 161 178 [[BR]] 179 Slika 9. Prikaz posameznih krivulj med posameznimi točkami 180 [[BR]] 162 181 163 182 Za 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. … … 165 184 [[Image(slika15-10.png, width=480px,align=center)]] 166 185 [[BR]] 186 Slika 10. Izdelava posameznih elementov, v splošnem krivulj med izbranima točkama 187 [[BR]] 167 188 168 189 [[BR]] 169 190 [[Image(slika15-11.png, width=480px,align=center)]] 191 [[BR]] 192 Slika 11. Ukaz za preverjanje možnosti izdelave krivulj med dvema točkama 170 193 [[BR]] 171 194 … … 177 200 Č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. 178 201 179 || Oblika || Open CASCADE objekti || Opis||202 ||=Oblika= || =Open CASCADE objekti= || =Opis= || 180 203 || Vertex || TopoDS_Vertex || Brezdimenzionalna oblika, ki ustreza geometriji točke || 181 204 || Edge || TopoDS_Edge || Enodimenzionalna oblika, ki ustreza krivuljam in je omejena na robovih || … … 189 212 [[Image(slika15-12.png, width=480px,align=center)]] 190 213 [[BR]] 214 Slika 12. Prikaz izdelave elementov robov (Edge) 215 [[BR]] 191 216 192 217 Posamezne 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. … … 195 220 [[Image(slika15-13.png, width=480px,align=center)]] 196 221 [[BR]] 222 Slika 13. Opredelitev topološkega elementa (rob, ang. Edge) iz krivulj 223 [[BR]] 197 224 198 225 V 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. 199 226 [[BR]] 200 227 [[Image(slika15-14.png, width=480px,align=center)]] 228 [[BR]] 229 Slika 14. Ukaz za določanje robov neposredno iz izbranih točk 201 230 [[BR]] 202 231 … … 212 241 [[Image(slika15-15.png, width=480px,align=center)]] 213 242 [[BR]] 243 Slika 15. Ukaz, s katerim iz opredeljenega števila robov določimo mrežo, ki je topološko opredeljena 244 [[BR]] 214 245 215 246 2) Mreženje skupine robov, ki je zaprto … … 219 250 [[Image(slika15-16.png, width=480px,align=center)]] 220 251 [[BR]] 252 Slika 16. Izdelava zrcalne slike prvotno definiranega lika. Označimo rob in določimo os zrcaljenja. 253 [BR]] 221 254 222 255 Pred 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). … … 228 261 [[Image(slika15-17.png, width=480px,align=center)]] 229 262 [[BR]] 263 Slika 17. Opredelitev potrebnega števila spremenljivk, ki omogoča določitev osi X 264 [[BR]] 230 265 231 266 2) opredelitev osi X v prostoru z neposrednim ukazom … … 233 268 [[Image(slika15-18.png, width=480px,align=center)]] 234 269 [[BR]] 235 270 Slika 18. Ukaz za neposredno določitev osi X, ki pa je osnovana na vnaprej določenem oz. aktualnem koordinatnem sistemu 271 [[BR]] 236 272 Če želimo izvajati zrcaljenje okoli prej opredeljene osi X, v nadaljevanju uporabimo zrcalno metodo SetMirror. 237 273 [[BR]] 238 274 [[Image(slika15-19.png, width=480px,align=center)]] 239 275 [[BR]] 240 276 Slika 19. Opredelitev zrcalne osi in njene spremenljivke 277 [[BR]] 241 278 Sedaj 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. 242 279 [[BR]] 243 280 [[Imag(slika15-20.png, width=480px,align=center)]] 244 281 [[BR]] 245 282 Slika 20. Ukaz za procesiranje zrcaljenja po prej določeni osi X, okoli katere se zrcaljenje izvede 283 [[BR]] 246 284 Funkcija 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. 247 285 [[BR]] 248 286 [[Image(slika15-21.png, width=480px,align=center)]] 249 287 [[BR]] 288 Slika 21. Ukaz za reverzno funkcijo, ki mrežo robov povrne v zrcalno geometrijo Shape 289 [[BR]] 250 290 251 291 Sedaj 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. … … 253 293 [[Image(slika15-22.png, width=480px,align=center)]] 254 294 [[BR]] 255 295 Slika 22. Ukaz za formiranje topološkega zapisa mreže robov, ki ga izvedemo iz nedoločeno povezane mreže robov 296 [[BR]] 256 297 [[BR]] 257 298 [[Image(slika15-23.png, width=480px,align=center)]] 258 299 [[BR]] 259 300 Slika 23. Združitev prvotne in zrcalne mreže 301 [[BR]] 260 302 Sedaj 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. 261 303 … … 265 307 266 308 Tabela: Povezava med gradniki in elementi 267 || Oblika || Generira||309 || =Oblika= || =Generira= || 268 310 || Vertex || Edge || 269 311 || Edge || Face || … … 275 317 [[Image(slika15-24.png, width=300px,align=center)]] 276 318 [[BR]] 277 319 Slika 24. Prikaz 3D geometrije izvedene s funkcijo izvleka 320 [[BR]] 278 321 V 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č. 279 322 Na 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. … … 281 324 [[Image(slika15-25.png, width=480px,align=center)]] 282 325 [[BR]] 283 326 Slika 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]] 284 328 Podprogrami 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: 285 329 [[BR]] 286 330 [[Image(slika15-26.png, width=480px,align=center)]] 287 331 [[BR]] 288 332 Slika 26. Ukaz za določitev vektorja izvleka, ki je v tem primeru pravokoten, glede na osnovno površino 333 [[BR]] 289 334 Na 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. 290 335 [[BR]] 291 336 [[Image(slika15-27.png, width=480px,align=center)]] 292 337 [[BR]] 293 338 Slika 27. Določitev naslednjega topološkega elementa, trdno telo, to je naš 3-D model 339 [[BR]] 294 340 === Zaokroževanje robov === 295 341 … … 298 344 [[Image(slika15-28.png, width=300px,align=center)]] 299 345 [[BR]] 300 346 Slika 28. 3D model z zaokroženimi robovi 347 [[BR]] 301 348 Za izvajanje zaokroževanj (Fillets) robov na poljubnih 3D-modelih lahko uporabimo sklop ukazov BrepFilletAPI_MakeFillet. Različne ukaze uporabljamo na naslednji način: 302 349 v sklopu ukazov BrepFilletAPI_MakeFillet (kot neke vrste konstruktor) določimo 3D-model, kateremu želimo zaokrožiti robove; … … 306 353 [[Image(slika15-29.png, width=480px,align=center)]] 307 354 [[BR]] 308 355 Slika 29. Ukaz za aktiviranje zaokroževanja 356 [[BR]] 309 357 Prav 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: 310 358 [[BR]] 311 359 [[Image(slika15-30.png, width=480px,align=center)]] 312 360 [[BR]] 313 361 Slika 30. Izpisovanje podatkov o zaokroženih robovih 362 [[BR]] 314 363 Raziskovalec (Explorer) je vgrajen v zanko in uporablja tri glavne metode: 315 364 More – poizvedba o podmodelih (sub-shapes), ki jih mora še raziskati; … … 319 368 [[Image(slika15-31.png, width=480px,align=center)]] 320 369 [[BR]] 321 370 Slika 31. Za iskanje robov v 3-D modelu uporabljamo while zanko 371 [[BR]] 322 372 S 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: 323 373 [[BR]] 324 374 [[Image(slika15-32.png, width=480px,align=center)]] 325 375 [[BR]] 326 376 Slika 32. Ukaz za določitev polmera zaokrožitve za skupino robov 377 [[BR]] 327 378 [[BR]] 328 379 [[Image(slika15-33.png, width=300px,align=center)]] 329 380 [[BR]] 330 381 Slika 33. 3D model z izpisanimi vrednostmi zaokrožitev na robovih (vse zaokrožitve na modelu so myThickness/12) 382 [[BR]] 331 383 Po 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. 332 384 [[BR]] 333 385 [[Image(slika15-34.png, width=480px,align=center)]] 334 386 [[BR]] 335 387 Slika 34. Vpis spremenjenih (zaokroženih) površin v bazo podatkov za obravnavano trdno telo v jeziku C++ 388 [[BR]] 336 389 Z 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. 337 390 … … 342 395 [[Image(slika15-35.png, width=480px,align=center)]] 343 396 [[BR]] 344 397 Slika 35. Mrežna struktura CAD in vozliščni element 398 [[BR]] 345 399 Primer, 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. 346 400 Na 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. … … 348 402 [[Image(slika15-36.png, width=300px,align=center)]] 349 403 [[BR]] 350 404 Slika 36. 3D model vozliščnega elementa 405 [[BR]] 351 406 V 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. 352 407 … … 363 418 [[Image(slika15-37.png, width=480px,align=center)]] 364 419 [[BR]] 365 420 Slika 37. Priprava oziroma rezervacija raznih spremenljivk vozliščnega elementa 421 [[BR]] 366 422 === Izdelava profilnih elementov v vozlišču (točke, robovi, mreže, zanka, površina) === 367 423 … … 370 426 [[Image(slika15-38.png, width=480px,align=center)]] 371 427 [[BR]] 372 428 Slika 38. Definiranje točk vozliščnega profila v prostoru 429 [[BR]] 373 430 V nadaljevanju določimo robove vozliščnega elementa, ki so odvisni od dimenzij I-profila. 374 431 [[BR]] 375 432 [[Image(slika15-39.png, width=480px,align=center)]] 376 433 [[BR]] 377 434 Slika 39. Ukaz za izdelavo robov iz posameznih točk 435 [[BR]] 378 436 Predstavljene 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. 379 437 Iz 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. … … 381 439 [[Image(slika15-40.png, width=480px,align=center)]] 382 440 [[BR]] 383 441 Slika 40. Ukaz za izdelavo posameznih in skupne mreže robov 442 [[BR]] 384 443 Zaprto 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. 385 444 [[BR]] 386 445 [[Image(slika15-41.png, width=480px,align=center)]] 387 446 [[BR]] 447 Slika 41. Ukaz za izvlek osnovne površine, ki ima določeno dolžino vector, za opredelitev 3-D modela realnega I-profila 448 [[BR]] 388 449 389 450 === Rezanje profilnih elementov === … … 393 454 [[Image(slika15-42.png, width=480px,align=center)]] 394 455 [[BR]] 395 456 Slika 42. Določitev glavnih podatkov za izdelavo valja vozliščnega elementa 457 [[BR]] 396 458 [[BR]] 397 459 [[Image(slika15-43.png, width=480px,align=center)]] 398 460 [[BR]] 399 461 Slika 43. Izdelava 3-D modela valja vozliščnega elementa 462 [[BR]] 400 463 401 464 V 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. … … 403 466 [[Image(slika15-44.png, width=480px,align=center)]] 404 467 [[BR]] 468 Slika 44. Booleanova operacija , ki določi razlike med valjem in vozliščnimi profili 469 [[BR]] 405 470 406 471 Posebej 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. … … 412 477 [[Image(slika15-45.png, width=480px,align=center)]] 413 478 [[BR]] 414 479 Slika 45. Izdelava zgornjega dela valja vozliščnega elementa 480 [[BR]] 415 481 === Določitev vozliščnih parametrov (smer, razdalja, sestavni deli) === 416 482 … … 421 487 [[Image(slika15-46.png, width=480px,align=center)]] 422 488 [[BR]] 423 489 Slika 46. C++ koda izdela vmesni del valja vozlišča 490 [[BR]] 424 491 Drugi 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. 425 492 [[BR]] 426 493 [[Image(slika15-47.png, width=480px,align=center)]] 427 494 [[BR]] 428 495 Slika 47. Zaporedje ukazov za modeliranje tretjega valja, ki j oblikovno enak prvemu delu 496 [[BR]] 429 497 [[BR]] 430 498 [[Image(slika15-48.png, width=480px,align=center)]] 431 499 [[BR]] 432 500 Slika 48. C++ koda z uporabo OC funkcij izdela STEP/IGES format CAD modela 501 [[BR]] 433 502 [[BR]] 434 503 [[Image(slika15-49.png, width=480px,align=center)]] 435 504 [[BR]] 436 505 Slika 49. STEP (levo) in IGES (desno) modela vozlišča generirana v Open CASCADE in uvožena v ProEngineer Wildfire 3.0 506 [[BR]] 437 507 Na 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. 438 508 … … 443 513 [[Image(slika15-50.png, width=480px,align=center)]] 444 514 [[BR]] 445 515 Slika 50. Poenostavljeni I-profili, ki med sabo povezujejo vozliščne elemente 516 [[BR]] 446 517 Slika 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. 447 518 … … 454 525 [[Image(slika15-51.png, width=480px,align=center)]] 455 526 [[BR]] 456 527 Slika 51. Ukaz za shranjevanje v spomin posameznih I-profilov, kot elementov CAD modela 528 [[BR]] 457 529 Predvideni sestav ima ime aResI, ki ga izberemo in omogoča shranjevanje podatkov za I-profile. 458 530 … … 463 535 [[Image(slika15-52.png, width=480px,align=center)]] 464 536 [[BR]] 465 537 Slika 52. Ukazje za določitev začetne in končne točke izbranega profila 538 [[BR]] 466 539 467 540 === Določitev normale za izbrani rob === … … 471 544 [[Image(slika15-53.png, width=480px,align=center)]] 472 545 [[BR]] 546 Slika 53. Ukaz za izračun robnih normal 547 [[BR]] 473 548 474 549 === Tvorjenje robnih točk poenostavljenega I-profila (glej sliko 48) === … … 478 553 [[Image(slika15-54.png, width=480px,align=center)]] 479 554 [[BR]] 480 555 Slika 54. Določitev pozicije točk prereza poenostavljenega I-profila 556 [[BR]] 481 557 === Tvorjenje robov iz robnih točk poenostavljenega I-profila === 482 558 … … 485 561 [[Image(slika15-55.png, width=480px,align=center)]] 486 562 [[BR]] 487 563 Slika 55. Iz znanih točk določimo robove in zanko robov za določitev osnovnega lika 564 [[BR]] 488 565 === Tvorjenje mreže robov (zanke) iz robov prereza === 489 566 … … 492 569 [[Image(slika15-56.png, width=480px,align=center)]] 493 570 [[BR]] 494 571 Slika 56. Iz robov C++ koda izdela posamezne in skupno mrežo 572 [[BR]] 495 573 === Določitev površine prereza in modela CAD poenostavljenega I-profila === 496 574 … … 500 578 [[Image(slika15-57.png, width=480px,align=center)]] 501 579 [[BR]] 502 580 Slika 57. Določitev smernega vektorja izvleka profila in izdelava 3-D elementa 581 [[BR]] 503 582 === Izvoz formata STEP /IGES modela CAD poenostavljenega I-profila in uvoz formata STEP/IGES v ProE Wildfire 3.0 === 504 583 … … 507 586 [[Image(slika15-58.png, width=480px,align=center)]] 508 587 [[BR]] 509 588 Slika 58. Ukaz za prenos podatkovne strukture iz OC v nevtralni format STEP/IGES format 589 [[BR]] 510 590 [[BR]] 511 591 [[Image(slika15-59.png, width=480px,align=center)]] 512 592 [[BR]] 513 593 Slika 59. STEP (levo) in IGES (desno) modela I profila generirana v Open CASCADE in uvožena v ProEngineer Wildfire 3.0 594 [[BR]] 514 595 Za 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. 515 596