| 252 | |
| 253 | = Primer: Uvoz STEP modela in izluščevanje topoloških elementov = |
| 254 | |
| 255 | 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"). |
| 256 | |
| 257 | {{{ |
| 258 | #!python |
| 259 | # Uvoz potrebnih knjižnic |
| 260 | from salome.shaper import model |
| 261 | from GeomAPI import * |
| 262 | |
| 263 | # Kreiranje SHAPER session-a |
| 264 | model.begin() |
| 265 | # Kreiranje objekta: t.i. "dokument", ki predstavlja temelje aplikacije |
| 266 | # (root document of SHAPER) |
| 267 | partSet = model.moduleDocument() |
| 268 | |
| 269 | # Dodajanje part-a v model |
| 270 | Part_1 = model.addPart(partSet) |
| 271 | # Kreiranje objekta za dostop do pod-dokumenta, ki se nanaša na part |
| 272 | Part_1_doc = Part_1.document() |
| 273 | |
| 274 | # Importanje STEP datoteke |
| 275 | # Opomba: pot se določa na način npr. /mapa/podmapa1/podmapa2/ime_step_datoteke.step |
| 276 | Import_1 = model.addImport(Part_1_doc, "/home/penkod/WORK/training/salome_shaper/test.step") |
| 277 | |
| 278 | # Posodobi prikaz modela |
| 279 | model.do() |
| 280 | |
| 281 | # Objekt, ki vsebuje lastnosti modela |
| 282 | result = Import_1.defaultResult() |
| 283 | |
| 284 | # Izpis imena parta |
| 285 | result.data().name() |
| 286 | |
| 287 | # --- vozlišča --- |
| 288 | |
| 289 | # Raziskovalec oblik: vozlišča (VERTEX) |
| 290 | vertexExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.VERTEX) |
| 291 | |
| 292 | # Kreiranje nove skupine za vozlišča |
| 293 | group_vertices = Part_1_doc.addFeature("Group") |
| 294 | # Določevanje imena skupine |
| 295 | group_vertices.data().setName("Vertex Group") |
| 296 | |
| 297 | # Iteriranje skozi vozlišča, dokler jih raziskovalec še najde |
| 298 | nVertices = 0 |
| 299 | while vertexExplorer.more(): |
| 300 | # Trenutno vozlišče |
| 301 | cv = vertexExplorer.current().vertex() |
| 302 | |
| 303 | # Prva koordinata trenutnega vozlišča |
| 304 | x = cv.point().x() |
| 305 | # Druga koordinata trenutnega vozlišča |
| 306 | y = cv.point().y() |
| 307 | # Tretja koordinata trenutnega vozlišča |
| 308 | z = cv.point().z() |
| 309 | |
| 310 | # Izpis koordinat trenutne točke |
| 311 | print("point XYZ: " + str(x) + ", " + str(y) + ", " + str(z) ) |
| 312 | |
| 313 | # Dodajanje vozlišča v skupino |
| 314 | group_vertices.selectionList("group_list").append(result, vertexExplorer.current()) |
| 315 | |
| 316 | # Dodatno: Način dodajanja vozlišča direktno na part |
| 317 | # model.addPoint(Part_1_doc, x,y,z) |
| 318 | |
| 319 | # Iteriranje na naslednje vozlišče |
| 320 | vertexExplorer.next() |
| 321 | # Prištevanje +1 k celotnemu seštevku vozlišč |
| 322 | nVertices += 1 |
| 323 | |
| 324 | # Izpis seštevka najdenih vozlišč |
| 325 | print("Number of vertices: ", str(nVertices)) |
| 326 | |
| 327 | # Posodobi prikaz modela |
| 328 | model.do() |
| 329 | |
| 330 | # --- lupine --- |
| 331 | |
| 332 | # Raziskovalec oblik: lupine (SHELL) |
| 333 | shellExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.SHELL) |
| 334 | |
| 335 | # Kreiranje nove skupine za lupine |
| 336 | group_shells = Part_1_doc.addFeature("Group") |
| 337 | # Določevanje imena skupine |
| 338 | group_shells.data().setName("Shell Group") |
| 339 | |
| 340 | # Iteriranje skozi lupine, dokler jih raziskovalec še najde |
| 341 | nShells = 0 |
| 342 | while shellExplorer.more(): |
| 343 | # Trenutna lupina |
| 344 | sh = shellExplorer.current().shell() |
| 345 | # Dodajanje lupine v skupino |
| 346 | group_shells.selectionList("group_list").append(result, shellExplorer.current()) |
| 347 | # Iteriranje na naslednjo lupino |
| 348 | shellExplorer.next() |
| 349 | # Prištevanje +1 k celotnemu seštevku lupin |
| 350 | nShells += 1 |
| 351 | |
| 352 | # Izpis seštevka najdenih lupin |
| 353 | print("Number of shells: ", str(nShells)) |
| 354 | |
| 355 | # Posodobi prikaz modela |
| 356 | model.do() |
| 357 | |
| 358 | # --- površine --- |
| 359 | |
| 360 | # Raziskovalec oblik: površine (FACE) |
| 361 | faceExplorer = GeomAPI_ShapeExplorer(result.shape(), GeomAPI_Shape.FACE) |
| 362 | |
| 363 | # Kreiranje nove skupine za površine |
| 364 | group_faces = Part_1_doc.addFeature("Group") |
| 365 | # Določevanje imena skupine |
| 366 | group_faces.data().setName("Faces Group") |
| 367 | |
| 368 | # Iteriranje skozi površine, dokler jih raziskovalec še najde |
| 369 | nFaces = 0 |
| 370 | while faceExplorer.more(): |
| 371 | # Trenutno najdena površina |
| 372 | face = faceExplorer.current().face() |
| 373 | # Dodajanje površine v skupino |
| 374 | group_faces.selectionList("group_list").append(result, faceExplorer.current()) |
| 375 | # Iteriranje na naslednjo površino |
| 376 | faceExplorer.next() |
| 377 | # Prištevanje +1 k celotnemu seštevku površin |
| 378 | nFaces += 1 |
| 379 | |
| 380 | # Izpis seštevka najdenih površin |
| 381 | print("Number of faces: ", str(nFaces)) |
| 382 | |
| 383 | # Posodobi prikaz modela |
| 384 | model.do() |
| 385 | |
| 386 | }}} |