コード例 #1
0
 def test_with_pygem_quartz(self):
     try:
         from pygem_quartz.pygem import GEMParametricGeometry
     except ImportError:
         raise SkipTest("pygem_quartz is not installed")
     self.geomcomp.add('parametric_geometry', GEMParametricGeometry())
     self.geomcomp.parametric_geometry.model_file = self.model_file
     self.def_outs = []
コード例 #2
0
ファイル: wvserver.py プロジェクト: Kenneth-T-Moore/pyV3D
        def create_geom(self):
            DEBUG("create_geom")
            eye    = array([0.0, 0.0, 7.0], dtype=float32)
            center = array([0.0, 0.0, 0.0], dtype=float32)
            up     = array([0.0, 1.0, 0.0], dtype=float32)
            fov   = 30.0
            zNear = 1.0
            zFar  = 10.0

            bias  = 1
            self.wv.createContext(bias, fov, zNear, zFar, eye, center, up)

            self.my_param_geom = GEMParametricGeometry()
            self.my_param_geom.model_file = os.path.expanduser(os.path.abspath(self.geometry_file))
            geom = self.my_param_geom.get_geometry()
            if geom is None:
                raise RuntimeError("can't get Geometry object")
            geom.get_visualization_data(self.wv, angle=15., relSide=.02, relSag=.001)
コード例 #3
0
    def test_with_pygem_diamond(self):
        try:
            from pygem_diamond.pygem import GEMParametricGeometry
        except ImportError:
            raise SkipTest("pygem_diamond is not installed")
        self.geomcomp.add('parametric_geometry', GEMParametricGeometry())
        base_ins = set(self.geomcomp.list_inputs())
        base_outs = set(self.geomcomp.list_outputs())

        gem_outs = [
            'zcg', 'zmax', 'xcg', 'zmin', 'Ixz', 'Izx', 'Ixx', 'Ixy', 'xmin',
            'Izy', 'Izz', 'ymin', 'ibody', 'ymax', 'nnode', 'ycg', 'nface',
            'volume', 'Iyy', 'Iyx', 'Iyz', 'area', 'nedge', 'xmax'
        ]

        csm_input = """
# bottle2 (from OpenCASCADE tutorial)
# written by John Dannenhoffer

# default design parameters
despmtr   width               10.00
despmtr   depth                4.00
despmtr   height              15.00
despmtr   neckDiam             2.50
despmtr   neckHeight           3.00
despmtr   wall                 0.20     wall thickness (in neck)
despmtr   filRad1              0.25     fillet radius on body of bottle
despmtr   filRad2              0.10     fillet radius between bottle and neck

# basic bottle shape (filletted)

set       baseHt    height-neckHeight

skbeg     -width/2  -depth/4  0
   cirarc 0         -depth/2  0         +width/2  -depth/4  0
   linseg +width/2  +depth/4  0
   cirarc 0         +depth/2  0         -width/2  +depth/4  0
   linseg -width/2  -depth/4  0
skend
extrude   0         0         baseHt
fillet    filRad1

# neck
cylinder  0         0         baseHt    0         0         height      neckDiam/2

# join the neck to the bottle and apply a fillet at the union
union
fillet    filRad2

# hollow out bottle
hollow    wall      18

end
        """

        model_file = os.path.join(self.tdir, 'bottle.csm')
        with open(model_file, 'w') as f:
            f.write(csm_input)
        self.geomcomp.parametric_geometry.model_file = model_file
        # default outputs that OpenCSM calculates for you
        expected_outs = set(['baseHt'] + gem_outs)
        expected_ins = set([
            'width', 'depth', 'height', 'neckDiam', 'neckHeight', 'wall',
            'filRad1', 'filRad2'
        ])
        self.assertEquals(
            set(self.geomcomp.list_inputs()) - base_ins, expected_ins)
        self.assertEquals(
            set(self.geomcomp.list_outputs()) - base_outs, expected_outs)

        # now do a simple box solid with a sphere subtracted out of it
        csm_input = """
despmtr   radius     0.5
despmtr   side       2.0

set   sph_dist   side/2.0

box            0.0  0.0  0.0    side      side      side
sphere        sph_dist     sph_dist      sph_dist      radius
subtract

end
        """
        model_file = os.path.join(self.tdir, 'bool.csm')
        with open(model_file, 'w') as f:
            f.write(csm_input)
        self.geomcomp.parametric_geometry.model_file = model_file

        expected_outs = set(['sph_dist'] + gem_outs)
        expected_ins = set(['radius', 'side'])
        self.assertEquals(
            set(self.geomcomp.list_inputs()) - base_ins, expected_ins)
        self.assertEquals(
            set(self.geomcomp.list_outputs()) - base_outs, expected_outs)

        comp = self.geomcomp

        self.assertEqual(comp.side, 2.0)
        self.assertEqual(comp.radius, 0.5)
        self.assertEqual(comp.sph_dist, self.geomcomp.side / 2.0)

        # volume should be box volume - sphere volume
        self.assertAlmostEqual(
            comp.volume, comp.side**3.0 - 4. / 3. * math.pi * comp.radius**3.0)

        # test a set/rebuild
        comp.side = 3.0
        comp.radius = 0.25
        comp.run()
        self.assertEqual(comp.side, 3.0)
        self.assertEqual(comp.radius, 0.25)
        self.assertEqual(comp.sph_dist, self.geomcomp.side / 2.0)
        self.assertAlmostEqual(
            comp.volume, comp.side**3.0 - 4. / 3. * math.pi * comp.radius**3.0)
コード例 #4
0
ファイル: test_gem.py プロジェクト: Kenneth-T-Moore/pygem
    def test_GEMParametricGeometry(self):
        geom = GEMParametricGeometry()
        geom.model_file = self.model_file
        params = geom.listParameters()
        expected_inputs = set(['width', 'depth', 'height', 
            'neckDiam', 'neckHeight', 'wall',
            'filRad1', 'filRad2'])
        self.assertEqual(expected_inputs, 
            set([k for k,v in params if v['iotype']=='in']))
        expected_outs = set(['zcg', 'zmax', 'xcg', 'zmin', 'Ixz', 'Izx', 'Ixx', 'Ixy', 
                'baseHt', 'xmin', 'Izy', 'Izz', 'ymin', 'ibody', 'ymax', 'nnode', 'ycg', 'nface', 
                'volume', 'Iyy', 'Iyx', 'Iyz', 'area', 'nedge', 'xmax'])
        self.assertEqual(expected_outs, set([k for k,v in params if v['iotype']=='out']))

        meta = geom.getParameter('baseHt')
        baseHt = meta['value']
        self.assertEqual(baseHt, 12.0)
        geom.setParameter('height', 20.0)
        geom.regenModel()
        meta = geom.getParameter('baseHt')
        baseHt = meta['value']
        self.assertEqual(baseHt, 17.0)
        geom.terminate()