示例#1
0
    def __init__(self, a, b, t, l, t1, H):
        self.l = l
        self.a = a
        self.b = b
        self.t = t
        self.t1 = t1
        self.H = H

        self.sec_origin = numpy.array([0, 0, 0])
        self.uDir = numpy.array([1.0, 0, 0])
        self.wDir = numpy.array([0.0, 0, 1.0])
        self.vDir = self.wDir * self.uDir
        self.angle1 = Angle(H, a, b, t, 0, 0)
        self.angle2 = Angle(H, b, a, t, 0, 0)
        self.plate1 = Plate(l, H, t1)
示例#2
0
    def __init__(self, a, b, t, l, t1, l1, H, s, s1):
        self.l = s + 2 * t1
        self.a = a
        self.b = b
        self.t = t
        self.s = s
        self.s1 = s1
        self.t1 = t1
        self.l1 = s1 + 2 * t1 + 2 * t
        self.H = H

        self.sec_origin = numpy.array([0, 0, 0])
        self.uDir = numpy.array([1.0, 0, 0])
        self.wDir = numpy.array([0.0, 0, 1.0])
        self.vDir = self.wDir * self.uDir

        self.angle1 = Angle(H, a, b, t, 0, 0)
        self.angle2 = Angle(H, b, a, t, 0, 0)
        self.angle3 = Angle(H, a, b, t, 0, 0)
        self.angle4 = Angle(H, b, a, t, 0, 0)
        self.plate1 = Plate(self.l, H, t1)
        self.plate2 = Plate(t1, H, self.l1)
        self.plate3 = Plate(self.l, H, t1)
        self.plate4 = Plate(t1, H, self.l1)
示例#3
0
class StarAngleOpposite(object):
    def __init__(self, a, b, t, l, t1, H):
        self.l = l
        self.a = a
        self.b = b
        self.t = t
        self.t1 = t1
        self.H = H

        self.sec_origin = numpy.array([0, 0, 0])
        self.uDir = numpy.array([1.0, 0, 0])
        self.wDir = numpy.array([0.0, 0, 1.0])
        self.vDir = self.wDir * self.uDir

        self.angle1 = Angle(H, a, b, t, 0, 0)
        self.angle2 = Angle(H, b, a, t, 0, 0)
        self.plate1 = Plate(l, H, t1)

    def place(self, secOrigin, uDir, wDir):
        self.sec_origin = secOrigin
        self.uDir = uDir
        self.wDir = wDir
        origin1 = numpy.array([self.t1 / 2., 0., 0.])
        self.angle1.place(origin1, self.uDir, self.wDir)
        origin2 = numpy.array([0., self.t1 / 2., 0])
        self.angle2.place(origin2, self.uDir, self.wDir)
        origin3 = numpy.array([0., self.a / 2, 0.])
        self.plate1.place(origin3, self.uDir, self.wDir)

    def compute_params(self):
        self.angle1.computeParams()
        self.angle2.computeParams()
        self.angle2.points = self.rotate(self.angle2.points)
        self.plate1.compute_params()

    def create_model(self):
        prism1 = self.angle1.create_model()
        prism2 = self.angle2.create_model()

        prism3 = self.plate1.create_model()

        prism = BRepAlgoAPI_Fuse(prism1, prism2).Shape()
        # prism = BRepAlgoAPI_Fuse(prism, prism3).Shape()
        return prism, [prism3]

    def rotate(self, points):
        rotated_points = []
        rmatrix = numpy.array([[0, -1, 0], [1, 0, 0], [0, 0, 1]])
        for point in points:
            point = numpy.matmul(rmatrix, point)
            rotated_points.append(point)
        return rotated_points

    def create_marking(self):
        middel_pnt = []
        line = []
        labels = ["z", "y", "u", "v"]
        offset = 2 * self.l
        uvoffset = offset / numpy.sqrt(2)

        z_points = [
            numpy.array([-offset, self.t / 2, self.H / 2]),
            numpy.array([offset, self.t / 2, self.H / 2])
        ]
        line.append(makeEdgesFromPoints(z_points))

        y_points = [
            numpy.array([0., -offset + self.t / 2, self.H / 2]),
            numpy.array([0, offset + self.t / 2, self.H / 2])
        ]
        line.append(makeEdgesFromPoints(y_points))

        u_points = [
            numpy.array([-uvoffset, uvoffset + self.t / 2, self.H / 2]),
            numpy.array([uvoffset, -uvoffset + self.t / 2, self.H / 2])
        ]
        line.append(makeEdgesFromPoints(u_points))

        v_points = [
            numpy.array([-uvoffset, -uvoffset + self.t / 2, self.H / 2]),
            numpy.array([uvoffset, uvoffset + self.t / 2, self.H / 2])
        ]
        line.append(makeEdgesFromPoints(v_points))

        start_pnt = [[-offset, self.t / 2, self.H / 2],
                     [0, -offset + self.t / 2 + 1, self.H / 2],
                     [uvoffset, -uvoffset + self.t / 2, self.H / 2],
                     [uvoffset, uvoffset + self.t / 2, self.H / 2]]
        end_pnt = [[offset, self.t / 2, self.H / 2],
                   [0, offset + self.t / 2 - 1, self.H / 2],
                   [-uvoffset, uvoffset + self.t / 2, self.H / 2],
                   [-uvoffset, -uvoffset + self.t / 2, self.H / 2]]

        return line, [start_pnt, end_pnt], labels
示例#4
0
class BoxAngle(object):
    def __init__(self, a, b, t, l, t1, l1, H, s, s1):
        self.l = s + 2 * t1
        self.a = a
        self.b = b
        self.t = t
        self.s = s
        self.s1 = s1
        self.t1 = t1
        self.l1 = s1 + 2 * t1 + 2 * t
        self.H = H

        self.sec_origin = numpy.array([0, 0, 0])
        self.uDir = numpy.array([1.0, 0, 0])
        self.wDir = numpy.array([0.0, 0, 1.0])
        self.vDir = self.wDir * self.uDir

        self.angle1 = Angle(H, a, b, t, 0, 0)
        self.angle2 = Angle(H, b, a, t, 0, 0)
        self.angle3 = Angle(H, a, b, t, 0, 0)
        self.angle4 = Angle(H, b, a, t, 0, 0)
        self.plate1 = Plate(self.l, H, t1)
        self.plate2 = Plate(t1, H, self.l1)
        self.plate3 = Plate(self.l, H, t1)
        self.plate4 = Plate(t1, H, self.l1)

    def place(self, secOrigin, uDir, wDir):
        self.sec_origin = secOrigin
        self.uDir = uDir
        self.wDir = wDir
        verti = -self.t - self.s1 / 2  #-self.s1/2 - self.b
        hori = -self.t - self.s / 2
        t = self.t1 / 2

        origin1 = numpy.array([verti, hori, 0.])
        self.angle1.place(origin1, self.uDir, self.wDir)
        origin2 = numpy.array([hori, verti, 0.])
        self.angle2.place(origin2, self.uDir, self.wDir)
        origin3 = numpy.array([verti, hori, 0.])
        self.angle3.place(origin3, self.uDir, self.wDir)
        origin4 = numpy.array([hori, verti, 0.])
        self.angle4.place(origin4, self.uDir, self.wDir)

        origin5 = numpy.array([-self.l1 / 2 + t, 0., 0.])
        self.plate1.place(origin5, self.uDir, self.wDir)
        origin6 = numpy.array([0., -self.l / 2 - t, 0.])
        self.plate2.place(origin6, self.uDir, self.wDir)
        origin7 = numpy.array([self.l1 / 2 - t, 0., 0.])
        self.plate3.place(origin7, self.uDir, self.wDir)
        origin8 = numpy.array([0., self.l / 2 + t, 0.])
        self.plate4.place(origin8, self.uDir, self.wDir)

    def compute_params(self):
        self.angle1.computeParams()
        self.angle2.computeParams()

        self.angle2.points = self.rotate(self.angle2.points, numpy.pi / 2)
        self.angle3.computeParams()
        self.angle3.points = self.rotate(self.angle3.points, numpy.pi)
        self.angle4.computeParams()
        self.angle4.points = self.rotate(self.angle4.points, 3 * numpy.pi / 2)

        self.plate1.compute_params()
        self.plate2.compute_params()
        self.plate3.compute_params()
        self.plate4.compute_params()

    def create_model(self):
        prism1 = self.angle1.create_model()
        prism2 = self.angle2.create_model()
        prism3 = self.angle3.create_model()
        prism4 = self.angle4.create_model()

        prism5 = self.plate1.create_model()
        prism6 = self.plate2.create_model()
        prism7 = self.plate3.create_model()
        prism8 = self.plate4.create_model()

        prism = BRepAlgoAPI_Fuse(prism1, prism2).Shape()
        prism = BRepAlgoAPI_Fuse(prism, prism3).Shape()
        prism = BRepAlgoAPI_Fuse(prism, prism4).Shape()
        # prism = BRepAlgoAPI_Fuse(prism, prism5).Shape()
        # prism = BRepAlgoAPI_Fuse(prism, prism6).Shape()
        # prism = BRepAlgoAPI_Fuse(prism, prism7).Shape()
        # prism = BRepAlgoAPI_Fuse(prism, prism8).Shape()
        return prism, [prism5, prism6, prism7, prism8]

    def rotate(self, points, x):
        rotated_points = []
        rmatrix = numpy.array([[numpy.cos(x), -numpy.sin(x), 0],
                               [numpy.sin(x), numpy.cos(x), 0], [0, 0, 1]])
        for point in points:
            point = numpy.matmul(rmatrix, point)
            rotated_points.append(point)
        return rotated_points

    def create_marking(self):
        middel_pnt = []
        line = []
        labels = ["z", "y", "u", "v"]
        offset = (self.s + self.s1) / 2
        uvoffset = offset / numpy.sqrt(2)

        z_points = [
            numpy.array([-offset, 0., self.H / 2]),
            numpy.array([offset, 0., self.H / 2])
        ]
        line.append(makeEdgesFromPoints(z_points))

        y_points = [
            numpy.array([0., -offset, self.H / 2]),
            numpy.array([0, offset, self.H / 2])
        ]
        line.append(makeEdgesFromPoints(y_points))

        u_points = [
            numpy.array([-uvoffset, uvoffset, self.H / 2]),
            numpy.array([uvoffset, -uvoffset, self.H / 2])
        ]
        line.append(makeEdgesFromPoints(u_points))

        v_points = [
            numpy.array([-uvoffset, -uvoffset, self.H / 2]),
            numpy.array([uvoffset, uvoffset, self.H / 2])
        ]
        line.append(makeEdgesFromPoints(v_points))

        start_pnt = [[-offset, 0, self.H / 2], [0, -offset + 1, self.H / 2],
                     [uvoffset, -uvoffset, self.H / 2],
                     [uvoffset, uvoffset, self.H / 2]]
        end_pnt = [[offset, 0, self.H / 2], [0, offset - 2, self.H / 2],
                   [-uvoffset, uvoffset, self.H / 2],
                   [-uvoffset, -uvoffset, self.H / 2]]

        return line, [start_pnt, end_pnt], labels