Exemple #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
Exemple #2
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.)
Exemple #3
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)
Exemple #4
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)
Exemple #5
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)
Exemple #6
0
    def test_scale(self):
        eq = self.assertAlmostEqual

        scale = .5
        solid = Solid()
        solid.createSphere((0., 0., 0.), 1.)
        solid.scale((0., 0., 0.), scale)
Exemple #7
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.))
Exemple #8
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.))
Exemple #9
0
    def test_centreOfMass(self):
        eq = self.almostEqual

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

        eq(solid.centreOfMass(), (0., 0., 0.))
Exemple #10
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)