Example #1
0
    def preview(self, input, direction):
        if self.step == 0:
            # object to rotate
            self.prev_dat['object'] = input
            return []
        elif self.step == 1:
            # axis to rotate about
            dirvec = vec(0, 0, 0)
            dirvec[direction] = 1
            axis = gp.gp_Ax1(input, dirvec.to_gp_Dir())

            # make a copy (copy.copy does not work)
            point = gp_.gp_Pnt_(input)
            point[direction] += 2
            input[direction] -= .2
            axis_plot = BRepBuilderAPI.BRepBuilderAPI_MakeEdge(
                GC.GC_MakeSegment(input, point).Value()).Edge()

            self.prev_dat['point'] = input
            self.prev_dat['dirvec'] = dirvec
            self.prev_dat['axis'] = axis
            self.prev_dat['axis-plot'] = axis_plot
            return [axis_plot]
        elif self.step == 2:
            # start point
            self.prev_dat['point_start'] = input
            return [self.prev_dat['axis-plot']]
        elif self.step == 3:
            p0 = self.prev_dat['point']
            vec0 = self.prev_dat['point_start'] - p0
            vec1 = input - p0

            dirvec = self.prev_dat['dirvec']
            n0 = dirvec.cross(vec0)
            n1 = dirvec.cross(vec1)
            try:
                cos = n0.dot(n1) / (n0.length() * n1.length())
            except ZeroDivisionError:
                raise InvalidInputException
            angle = math.acos(min(max(cos, -1), 1))  # cos might be (-)1.000001

            oriented_dirvec = n0.cross(n1)
            if oriented_dirvec == vec(0, 0, 0):
                raise InvalidInputException
            axis = gp.gp_Ax1(p0, oriented_dirvec.to_gp_Dir())

            tr = gp.gp_Trsf()
            tr.SetRotation(axis, angle)
            t = self.prev_dat['object'].Moved(TopLoc.TopLoc_Location(tr))
            t = copy_geom.copy(t)
            self._final = [t]
            self.remove = [self.prev_dat['object']]
            return [t, self.prev_dat['axis-plot']]
Example #2
0
    def preview(self, inp, direction):
        if self.step == 0:
            self.previous_data = [inp]
            return [BRepBuilderAPI.BRepBuilderAPI_MakeVertex(inp).Vertex()]
        elif self.step == 1:
            point0 = self.previous_data[0]
            point1 = inp
            # checking if the previous points are identical: This is necessary
            # before continuing in order to avoid a crash on Windows
            if point0 == point1:
                raise InvalidInputException
            dirvec = vec(0, 0, 0)
            dirvec[direction] = 1
            axis = gp.gp_Ax2(point0, dirvec.to_gp_Dir())

            d = point0 - inp
            d[direction] = 0
            dist = d.length()

            a = Geom.Geom_Circle(axis, dist).GetHandle()
            b = BRepBuilderAPI.BRepBuilderAPI_MakeEdge(a).Edge()
            c = BRepBuilderAPI.BRepBuilderAPI_MakeWire(b).Wire()
            d = BRepBuilderAPI.BRepBuilderAPI_MakeFace(c).Face()
            self._final = [d]
            return self._final
Example #3
0
 def preview(self, input, direction):
     assert self.step == 0
     vec_ = vec(0, 0, 0)
     vec_[direction] = 1
     tr = gp.gp_Trsf()
     tr.SetMirror(gp.gp_Ax2(gp_.gp_Pnt(0, 0, 0), vec_.to_gp_Dir()))
     # object.Moved() cannot be used here because it does not adjust
     # the surface orientation and will result in incorrect models
     t = BRepBuilderAPI.BRepBuilderAPI_Transform(input, tr).Shape()
     t = copy_geom.copy(t)
     self._final = [t]
     self.remove = [input]
     return self._final
Example #4
0
 def preview(self, input, direction):
     if self.step == 0:
         self.previous_data = [input]
         return []
     elif self.step == 1:
         object = self.previous_data[0]
         dirvec = vec(0, 0, 0)
         dirvec[direction] = 1
         axis = gp.gp_Ax1(input, dirvec.to_gp_Dir())
         self.remove = [self.previous_data[0]]
         self._final = [BRepPrimAPI.BRepPrimAPI_MakeRevol(
                                             object, axis).Shape()]
         return self._final
Example #5
0
    def preview(self, input, direction):
        veclist = []
        for edge in subshapes(input, TopAbs_EDGE):
            vertices = subshapes(edge, TopAbs_VERTEX)
            vec_ = gp_Pnt_(vertices[0]) - gp_Pnt_(vertices[1])
            veclist.append(vec_)

        prisms = []
        for vec_ in veclist:
            vec_ = vec_ * (1/vec_.length())*100
            v = vec(vec_[1], -vec_[0], 100)

            prism = BRepPrimAPI.BRepPrimAPI_MakePrism(input, 
                        gp.gp_Vec(v[0], v[1], v[2])).Shape()
            prisms.append(prism)

        p = prisms.pop()
        for p_ in prisms:
            p = intersection(p, p_)[0]

        self._final = [p]
        return self._final
Example #6
0
 def __sub__(self, other):
     return vec(self[i] - other[i] for i in range(3))