Пример #1
0
 def resetTrackersBezier(self, obj):
     # in future move tracker definition to DraftTrackers
     knotmarkers = (
         coin.SoMarkerSet.DIAMOND_FILLED_9_9,  #sharp
         coin.SoMarkerSet.SQUARE_FILLED_9_9,  #tangent
         coin.SoMarkerSet.HOURGLASS_FILLED_9_9)  #symmetric
     polemarker = coin.SoMarkerSet.CIRCLE_FILLED_9_9  #pole
     self.trackers[obj.Name] = []
     cont = obj.Continuity
     firstknotcont = cont[-1] if (obj.Closed and cont) else 0
     pointswithmarkers = [(obj.Shape.Edges[0].Curve.getPole(1),
                           knotmarkers[firstknotcont])]
     for edgeindex, edge in enumerate(obj.Shape.Edges):
         poles = edge.Curve.getPoles()
         pointswithmarkers.extend([(point, polemarker)
                                   for point in poles[1:-1]])
         if not obj.Closed or len(obj.Shape.Edges) > edgeindex + 1:
             knotmarkeri = cont[edgeindex] if len(cont) > edgeindex else 0
             pointswithmarkers.append((poles[-1], knotmarkers[knotmarkeri]))
     for index, pwm in enumerate(pointswithmarkers):
         p, marker = pwm
         p = obj.Placement.inverse().multVec(p)
         p = obj.getGlobalPlacement().multVec(p)
         self.trackers[obj.Name].append(
             trackers.editTracker(p,
                                  obj.Name,
                                  index,
                                  obj.ViewObject.LineColor,
                                  marker=marker))
Пример #2
0
 def setTrackers(self, obj, points=None):
     """Set Edit Trackers for editpoints collected from self.obj."""
     if utils.get_type(obj) == "BezCurve":
         return self.resetTrackersBezier(obj)
     if points is None or len(points) == 0:
         _wrn = translate("draft", "No edit point found for selected object")
         App.Console.PrintWarning(_wrn + "\n")
         # do not finish if some trackers are still present
         if self.trackers == {'object': []}:
             self.finish()
         return
     self.trackers[obj.Name] = []
     if obj.Name in self.trackers:
         self.removeTrackers(obj)
     for ep in range(len(points)):
         self.trackers[obj.Name].append(trackers.editTracker(pos=points[ep], name=obj.Name, idx=ep))
Пример #3
0
 def addPoint(self, point):
     """Add point to defined selection rectangle."""
     if self.step == 1:
         # first rctangle point
         _msg(
             translate("draft", "Pick opposite point "
                       "of selection rectangle"))
         self.ui.setRelative()
         self.rectracker.setorigin(point)
         self.rectracker.on()
         if self.planetrack:
             self.planetrack.set(point)
         self.step = 2
     elif self.step == 2:
         # second rectangle point
         _msg(translate("draft", "Pick start point of displacement"))
         self.rectracker.off()
         nodes = []
         self.ops = []
         for sel in self.sel:
             o = sel[0]
             vispla = sel[1]
             tp = utils.getType(o)
             if tp in ["Wire", "BSpline", "BezCurve"]:
                 np = []
                 iso = False
                 for p in o.Points:
                     p = o.Placement.multVec(p)
                     p = vispla.multVec(p)
                     isi = self.rectracker.isInside(p)
                     np.append(isi)
                     if isi:
                         iso = True
                         nodes.append(p)
                 if iso:
                     self.ops.append([o, np])
             elif tp in ["Rectangle"]:
                 p1 = App.Vector(0, 0, 0)
                 p2 = App.Vector(o.Length.Value, 0, 0)
                 p3 = App.Vector(o.Length.Value, o.Height.Value, 0)
                 p4 = App.Vector(0, o.Height.Value, 0)
                 np = []
                 iso = False
                 for p in [p1, p2, p3, p4]:
                     p = o.Placement.multVec(p)
                     p = vispla.multVec(p)
                     isi = self.rectracker.isInside(p)
                     np.append(isi)
                     if isi:
                         iso = True
                         nodes.append(p)
                 if iso:
                     self.ops.append([o, np])
             elif tp in ["Sketch"]:
                 np = []
                 iso = False
                 for p in o.Shape.Vertexes:
                     p = vispla.multVec(p.Point)
                     isi = self.rectracker.isInside(p)
                     np.append(isi)
                     if isi:
                         iso = True
                         nodes.append(p)
                 if iso:
                     self.ops.append([o, np])
             else:
                 p = o.Placement.Base
                 p = vispla.multVec(p)
                 if self.rectracker.isInside(p):
                     self.ops.append([o])
                     nodes.append(p)
         for n in nodes:
             nt = trackers.editTracker(n, inactive=True)
             nt.on()
             self.nodetracker.append(nt)
         self.step = 3
     elif self.step == 3:
         # first point of displacement line
         _msg(translate("draft", "Pick end point of displacement"))
         self.displacement = point
         # print("first point:", point)
         self.node = [point]
         self.step = 4
     elif self.step == 4:
         # print("second point:", point)
         self.displacement = point.sub(self.displacement)
         self.doStretch()
     if self.point:
         self.ui.redraw()