Skip to content

Commit

Permalink
Merge pull request #34 from Kayvv/zinchelper
Browse files Browse the repository at this point in the history
Merging...
  • Loading branch information
athril committed Dec 7, 2023
2 parents b37cf8f + 7e4cb7a commit 87c7056
Show file tree
Hide file tree
Showing 3 changed files with 355 additions and 23 deletions.
30 changes: 23 additions & 7 deletions src/sparc/client/zinchelper.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
import os
import re

from cmlibs.exporter.vtk import ArgonSceneExporter as VTKExporter
from cmlibs.exporter.stl import ArgonSceneExporter as STLExporter
from cmlibs.utils.zinc.field import get_group_list
from cmlibs.exporter.vtk import ArgonSceneExporter as VTKExporter
from cmlibs.utils.zinc.field import field_exists, get_group_list
from cmlibs.zinc.context import Context
from cmlibs.zinc.result import RESULT_OK
from mbfxml2ex.app import read_xml
Expand Down Expand Up @@ -129,9 +129,9 @@ def _get_scaffold(self, dataset_id):
sm = scaffolds.Scaffolds_decodeJSON(c["scaffold_settings"]["scaffoldPackage"])
sm.generate(self._region)

def get_scaffold_vtk(self, dataset_id, output_location=None):
def get_scaffold_as_vtk(self, dataset_id, output_location=None):
"""
Generates a VTK file for the scaffold settings of a dataset.
Generates a VTK file from the scaffold settings defined in a dataset.
Args:
dataset_id (int): The ID of the dataset to generate the VTK file for.
Expand All @@ -146,9 +146,9 @@ def get_scaffold_vtk(self, dataset_id, output_location=None):
ex = VTKExporter(output_location, "scaffold")
ex.export_vtk_from_scene(self._region.getScene())

def get_scaffold_stl(self, dataset_id, output_location=None):
def get_scaffold_as_stl(self, dataset_id, output_location=None):
"""
Generates an STL file for the scaffold settings of a dataset.
Generates an STL file from the scaffold settings defined in a dataset.
Args:
dataset_id (int): The ID of the dataset to generate the STL file for.
Expand All @@ -161,7 +161,23 @@ def get_scaffold_stl(self, dataset_id, output_location=None):
output_location = "."

ex = STLExporter(output_location, "scaffold")
ex.export_stl_from_scene(self._region.getScene())
scene = self._region.getScene()
surfaces = scene.createGraphicsSurfaces()
surfaces.setBoundaryMode(surfaces.BOUNDARY_MODE_BOUNDARY)

fm = self._region.getFieldmodule()
coordinates = fm.findFieldByName("coordinates")
if not coordinates.isValid():
field_iterator = fm.createFielditerator()
field = field_iterator.next()
while field.isValid() and not coordinates.isValid():
if field_exists(fm, field.getName(), "FiniteElement", 3):
coordinates = field

field = field_iterator.next()

surfaces.setCoordinateField(coordinates)
ex.export_stl_from_scene(scene)

def get_mbf_vtk(self, dataset_id, dataset_file, output_file=None):
"""
Expand Down
290 changes: 290 additions & 0 deletions tests/resources/cube.exf
Original file line number Diff line number Diff line change
@@ -0,0 +1,290 @@
EX Version: 2
Region: /
!#nodeset nodes
Shape. Dimension=0
#Fields=1
1) notcoordinates, coordinate, rectangular cartesian, real, #Components=3
x. #Values=4 (value,d/ds1,d/ds2,d/ds3)
y. #Values=4 (value,d/ds1,d/ds2,d/ds3)
z. #Values=4 (value,d/ds1,d/ds2,d/ds3)
Node: 1
0.000000000000000e+00 1.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
Node: 2
1.500000000000000e+00 1.499999999876600e+00 0.000000000000000e+00 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
Node: 3
0.000000000000000e+00 1.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
Node: 4
1.500000000000000e+00 1.499999999876600e+00 0.000000000000000e+00 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00
Node: 5
0.000000000000000e+00 1.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01
Node: 6
1.500000000000000e+00 1.499999999876600e+00 0.000000000000000e+00 0.000000000000000e+00
0.000000000000000e+00 0.000000000000000e+00 1.000000000000000e+00 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01
Node: 7
0.000000000000000e+00 1.500000000000000e+00 0.000000000000000e+00 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01
Node: 8
1.500000000000000e+00 1.499999999876600e+00 0.000000000000000e+00 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01 0.000000000000000e+00
1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 9.999999999732445e-01
!#mesh mesh1d, dimension=1, nodeset=nodes
Shape. Dimension=1, line
#Scale factor sets=0
#Nodes=0
#Fields=0
Element: 1
Element: 2
Element: 3
Element: 4
Element: 5
Element: 6
Element: 7
Element: 8
Element: 9
Element: 10
Element: 11
Element: 12
!#mesh mesh2d, dimension=2, face mesh=mesh1d, nodeset=nodes
Shape. Dimension=2, line*line
#Scale factor sets=0
#Nodes=0
#Fields=0
Element: 1
Faces:
1 2 3 4
Element: 2
Faces:
5 6 7 8
Element: 3
Faces:
9 10 1 5
Element: 4
Faces:
11 12 2 6
Element: 5
Faces:
3 7 9 11
Element: 6
Faces:
4 8 10 12
!#mesh mesh3d, dimension=3, face mesh=mesh2d, nodeset=nodes
Shape. Dimension=3, line*line*line
#Scale factor sets=0
#Nodes=8
#Fields=1
1) notcoordinates, coordinate, rectangular cartesian, real, #Components=3
x. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based.
#Nodes=8
1. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
1. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
2. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
2. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
3. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
3. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
4. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
4. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
5. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
5. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
6. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
6. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
7. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
7. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
8. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
8. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
y. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based.
#Nodes=8
1. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
1. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
2. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
2. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
3. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
3. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
4. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
4. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
5. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
5. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
6. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
6. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
7. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
7. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
8. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
8. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
z. c.Hermite*c.Hermite*c.Hermite, no modify, standard node based.
#Nodes=8
1. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
1. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
2. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
2. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
3. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
3. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
4. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
4. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
5. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
5. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
6. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
6. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
7. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
7. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
8. #Values=3
Value labels: value d/ds1 d/ds2
0. #Values=1
Value labels: zero
8. #Values=1
Value labels: d/ds3
0. #Values=3
Value labels: zero zero zero
Element: 1
Faces:
1 2 3 4 5 6
Nodes:
1 2 3 4 5 6 7 8

0 comments on commit 87c7056

Please sign in to comment.