Exemplo n.º 1
0
def extrude_polygon(polygon, vectors=None, height=None, height_pad=[0, 0]):

    shell = np.array(polygon.exterior.coords)
    holes = [np.array(i.coords) for i in polygon.interiors]

    if vectors is None:
        pad_signed = np.sign(height) * np.array(height_pad)
        vectors = np.array([[0.0, 0.0, -pad_signed[0]],
                            [0.0, 0.0, pad_signed[1] + height]])
    else:
        vectors = np.array(vectors)

    shell_3D = three_dimensionalize(shell, False)
    shell_3D[:, 2] = vectors[0][2]

    shell_face = Face().createPolygonal(shell_3D)
    shell_solid = Solid().extrude(shell_face, *vectors)

    if holes is None: return shell_solid

    pad_vector = np.diff(vectors, axis=0)[0]
    cut_vectors = vectors + [-pad_vector, pad_vector]

    for hole in holes:
        cut_face = Face().createPolygonal(three_dimensionalize(hole, False))
        cut_solid = Solid().extrude(cut_face, *cut_vectors)
        shell_solid.cut(cut_solid)
    return shell_solid
Exemplo n.º 2
0
def extrude_polygon(polygon,
                    vectors    = None,
                    height     = None,
                    height_pad = [0,0]):

    shell = np.array(polygon.exterior.coords)
    holes = [np.array(i.coords) for i in polygon.interiors]    
 
    if vectors is None: 
        pad_signed = np.sign(height) * np.array(height_pad)
        vectors    = np.array([[0.0, 0.0, -pad_signed[0]], 
                               [0.0, 0.0,  pad_signed[1] + height]])
    else:
        vectors = np.array(vectors)

    shell_3D      = three_dimensionalize(shell, False)
    shell_3D[:,2] = vectors[0][2]

    shell_face  = Face().createPolygonal(shell_3D)
    shell_solid = Solid().extrude(shell_face, *vectors)

    if holes is None: return shell_solid

    pad_vector  = np.diff(vectors, axis=0)[0]
    cut_vectors = vectors + [-pad_vector, pad_vector]

    for hole in holes:
        cut_face  = Face().createPolygonal(three_dimensionalize(hole, False))
        cut_solid = Solid().extrude(cut_face, *cut_vectors)
        shell_solid.cut(cut_solid)    
    return shell_solid
Exemplo n.º 3
0
    def test_centreOfMass(self):
        eq = self.almostEqual

        solid = Solid()
        solid.createSphere((0.0, 0.0, 0.0), 1.0)

        eq(solid.centreOfMass(), (0.0, 0.0, 0.0))
Exemplo n.º 4
0
    def test_scale(self):
        eq = self.assertAlmostEqual

        scale = 0.5
        solid = Solid()
        solid.createSphere((0.0, 0.0, 0.0), 1.0)
        solid.scale((0.0, 0.0, 0.0), scale)
Exemplo n.º 5
0
    def test_centreOfMass(self):
        eq = self.almostEqual

        solid = Solid()
        solid.createSphere((0., 0., 0.), 1.)

        eq(solid.centreOfMass(), (0., 0., 0.))
Exemplo n.º 6
0
    def test_createBox(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError, Solid().createBox, (-0.5, -0.5, -0.5), (-0.5, -0.5, -0.5))

        solid = Solid()
        solid.createBox((-0.5, -0.5, -0.5), (0.5, 0.5, 0.5))

        eq(solid.volume(), 1.0)
Exemplo n.º 7
0
    def test_createTorus(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError, Solid().createCone, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0), 0.0, 0.0)
        self.assertRaises(OCCError, Solid().createCone, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0), 1.0, 1.0)

        solid = Solid()
        solid.createCone((0.0, 0.0, 0.0), (0.0, 0.0, 0.1), 2.0, 1.0)

        self.assertEqual(solid.volume() > 0.0, True)
Exemplo n.º 8
0
    def test_createTorus(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError, Solid().createTorus, (0.0, 0.0, 0.0), (0.0, 0.0, 0.1), 0.0, 1.0)
        self.assertRaises(OCCError, Solid().createTorus, (0.0, 0.0, 0.0), (0.0, 0.0, 0.1), 1.0, 0.0)

        solid = Solid()
        solid.createTorus((0.0, 0.0, 0.0), (0.0, 0.0, 0.1), 2.0, 1.0)

        eq(solid.area(), 4.0 * pi ** 2 * 2.0 * 1.0, places=1)
        eq(solid.volume(), 2.0 * pi ** 2 * 2.0 * 1.0 ** 2, places=3)
Exemplo n.º 9
0
    def test_createCylinder(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError, Solid().createCylinder, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0), 0.0)
        self.assertRaises(OCCError, Solid().createCylinder, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0), -1.0)

        solid = Solid()
        solid.createCylinder((0.0, 0.0, 0.0), (0.0, 0.0, 1.0), 1.0)

        eq(solid.area(), 4.0 * pi, places=3)
        eq(solid.volume(), pi, places=3)
Exemplo n.º 10
0
    def test_rotate(self):
        eq = self.almostEqual

        solid = Solid()
        solid.createSphere((0., 0., 0.), 1.)
        solid.rotate(-pi / 2., (0., 1., 0.), (1., 1., 0.))
        eq(solid.centreOfMass(), (1., 0., -1.))
Exemplo n.º 11
0
    def test_translate(self):
        eq = self.almostEqual

        solid = Solid()
        solid.createSphere((0., 0., 0.), 1.)
        solid.translate((1., 2., 3.))
        eq(solid.centreOfMass(), (1., 2., 3.))
Exemplo n.º 12
0
    def test_createSphere(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError, Solid().createSphere, (0., 0., 0.), 0.)
        self.assertRaises(OCCError, Solid().createSphere, (0., 0., 0.), -1.)

        solid = Solid()
        solid.createSphere((0., 0., 0.), 1.)

        eq(solid.area(), 4. * pi, places=3)
        eq(solid.volume(), 4. / 3. * pi, places=3)
Exemplo n.º 13
0
    def test_rotate(self):
        eq = self.almostEqual

        solid = Solid()
        solid.createSphere((0.0, 0.0, 0.0), 1.0)
        solid.rotate(-pi / 2.0, (0.0, 1.0, 0.0), (1.0, 1.0, 0.0))
        eq(solid.centreOfMass(), (1.0, 0.0, -1.0))
Exemplo n.º 14
0
    def test_translate(self):
        eq = self.almostEqual

        solid = Solid()
        solid.createSphere((0.0, 0.0, 0.0), 1.0)
        solid.translate((1.0, 2.0, 3.0))
        eq(solid.centreOfMass(), (1.0, 2.0, 3.0))
Exemplo n.º 15
0
    def test_scale(self):
        eq = self.assertAlmostEqual

        scale = .5
        solid = Solid()
        solid.createSphere((0., 0., 0.), 1.)
        solid.scale((0., 0., 0.), scale)
Exemplo n.º 16
0
    def test_createTorus(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError,
                          Solid().createTorus, (0., 0., 0.), (0., 0., .1), 0.,
                          1.)
        self.assertRaises(OCCError,
                          Solid().createTorus, (0., 0., 0.), (0., 0., .1), 1.,
                          0.)

        solid = Solid()
        solid.createTorus((0., 0., 0.), (0., 0., .1), 2., 1.)

        eq(solid.area(), 4. * pi**2 * 2. * 1., places=1)
        eq(solid.volume(), 2. * pi**2 * 2. * 1.**2, places=3)
Exemplo n.º 17
0
    def test_createBox(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError,
                          Solid().createBox, (-.5, -.5, -.5), (-.5, -.5, -.5))

        solid = Solid()
        solid.createBox((-.5, -.5, -.5), (.5, .5, .5))

        eq(solid.volume(), 1.)
Exemplo n.º 18
0
    def test_createTorus(self):
        eq = self.assertAlmostEqual

        self.assertRaises(OCCError,
                          Solid().createCone, (0., 0., 0.), (0., 0., 1.), 0.,
                          0.)
        self.assertRaises(OCCError,
                          Solid().createCone, (0., 0., 0.), (0., 0., 1.), 1.,
                          1.)

        solid = Solid()
        solid.createCone((0., 0., 0.), (0., 0., .1), 2., 1.)

        self.assertEqual(solid.volume() > 0., True)
Exemplo n.º 19
0
    def test_addSolids(self):
        eq = self.assertAlmostEqual

        s1 = Solid().createSphere((0.0, 0.0, 0.0), 1.0)
        s2 = Solid().createSphere((2.0, 0.0, 0.0), 1.0)
        s3 = Solid().addSolids((s1, s2))

        self.assertEqual(s3.numSolids(), 2)
        eq(s3.area(), 2.0 * 4.0 * pi, places=3)
        eq(s3.volume(), 2.0 * 4.0 / 3.0 * pi, places=3)

        s1 = Solid().createSphere((0.0, 0.0, 0.0), 0.5)
        self.assertEqual(s1.numSolids(), 1)
        s2 = Solid().createSphere((2.0, 0.0, 0.0), 0.5)
        s1.addSolids(s2)
        self.assertEqual(s1.numSolids(), 2)
        s3 = Solid().createSphere((4.0, 0.0, 0.0), 0.5)
        s1.addSolids(s3)
        self.assertEqual(s1.numSolids(), 3)
Exemplo n.º 20
0
    def test_addSolids(self):
        eq = self.assertAlmostEqual

        s1 = Solid().createSphere((0., 0., 0.), 1.)
        s2 = Solid().createSphere((2., 0., 0.), 1.)
        s3 = Solid().addSolids((s1, s2))

        self.assertEqual(s3.numSolids(), 2)
        eq(s3.area(), 2. * 4. * pi, places=3)
        eq(s3.volume(), 2. * 4. / 3. * pi, places=3)

        s1 = Solid().createSphere((0., 0., 0.), .5)
        self.assertEqual(s1.numSolids(), 1)
        s2 = Solid().createSphere((2., 0., 0.), .5)
        s1.addSolids(s2)
        self.assertEqual(s1.numSolids(), 2)
        s3 = Solid().createSphere((4., 0., 0.), .5)
        s1.addSolids(s3)
        self.assertEqual(s1.numSolids(), 3)