| | |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | """Provides the viewprovider code for the Wire (polyline) object. |
| | |
| | This viewprovider is also used by simple lines, B-splines, bezier curves, |
| | and similar objects. |
| | """ |
| | |
| | |
| | |
| |
|
| | |
| | |
| | import pivy.coin as coin |
| | import PySide.QtCore as QtCore |
| | import PySide.QtGui as QtGui |
| | from PySide.QtCore import QT_TRANSLATE_NOOP |
| |
|
| | import FreeCAD as App |
| | import FreeCADGui as Gui |
| | import DraftVecUtils |
| | import WorkingPlane |
| | from draftgeoutils import wires |
| | from draftutils import gui_utils |
| | from draftutils import params |
| | from draftutils import utils |
| | from draftutils.translate import translate |
| | from draftviewproviders.view_base import ViewProviderDraft |
| |
|
| |
|
| | class ViewProviderWire(ViewProviderDraft): |
| | """A base View Provider for the Wire object.""" |
| |
|
| | def __init__(self, vobj): |
| | super(ViewProviderWire, self).__init__(vobj) |
| | self._set_properties(vobj) |
| |
|
| | def _set_properties(self, vobj): |
| | """Set the properties of objects if they don't exist.""" |
| | super(ViewProviderWire, self)._set_properties(vobj) |
| |
|
| | if not hasattr(vobj, "ArrowSizeStart"): |
| | _tip = QT_TRANSLATE_NOOP("App::Property", "Arrow size") |
| | vobj.addProperty("App::PropertyLength", "ArrowSizeStart", "Draft", _tip, locked=True) |
| | vobj.ArrowSizeStart = params.get_param("arrowsizestart") |
| |
|
| | if not hasattr(vobj, "ArrowTypeStart"): |
| | _tip = QT_TRANSLATE_NOOP("App::Property", "Arrow type") |
| | vobj.addProperty( |
| | "App::PropertyEnumeration", "ArrowTypeStart", "Draft", _tip, locked=True |
| | ) |
| | vobj.ArrowTypeStart = utils.ARROW_TYPES |
| | vobj.ArrowTypeStart = "None" |
| |
|
| | if not hasattr(vobj, "ArrowSizeEnd"): |
| | _tip = QT_TRANSLATE_NOOP("App::Property", "Arrow size") |
| | vobj.addProperty("App::PropertyLength", "ArrowSizeEnd", "Draft", _tip, locked=True) |
| | vobj.ArrowSizeEnd = params.get_param("arrowsizeend") |
| |
|
| | if not hasattr(vobj, "ArrowTypeEnd"): |
| | _tip = QT_TRANSLATE_NOOP("App::Property", "Arrow type") |
| | vobj.addProperty("App::PropertyEnumeration", "ArrowTypeEnd", "Draft", _tip, locked=True) |
| | vobj.ArrowTypeEnd = utils.ARROW_TYPES |
| | vobj.ArrowTypeEnd = "None" |
| |
|
| | def attach(self, vobj): |
| | self.Object = vobj.Object |
| |
|
| | self.color = coin.SoBaseColor() |
| | self.color.rgb.setValue(*vobj.LineColor[:3]) |
| |
|
| | self.startSymbol = gui_utils.dim_symbol() |
| | self.coords1 = coin.SoTransform() |
| | self.pt1 = coin.SoSeparator() |
| | self.pt1.addChild(self.color) |
| | self.pt1.addChild(self.coords1) |
| | self.pt1.addChild(self.startSymbol) |
| |
|
| | self.endSymbol = gui_utils.dim_symbol() |
| | self.coords2 = coin.SoTransform() |
| | self.pt2 = coin.SoSeparator() |
| | self.pt2.addChild(self.color) |
| | self.pt2.addChild(self.coords2) |
| | self.pt2.addChild(self.endSymbol) |
| |
|
| | super(ViewProviderWire, self).attach(vobj) |
| | self.onChanged(vobj, "ArrowSizeStart") |
| |
|
| | def updateData(self, obj, prop): |
| | if ( |
| | prop == "Points" |
| | and hasattr(obj, "Points") |
| | and len(obj.Points) >= 2 |
| | and hasattr(self, "coords1") |
| | and hasattr(self, "coords2") |
| | ): |
| | self.coords1.translation.setValue(*obj.Points[0]) |
| | v1 = obj.Points[1].sub(obj.Points[0]) |
| | if not DraftVecUtils.isNull(v1): |
| | v1.normalize() |
| | rot1 = coin.SbRotation() |
| | rot1.setValue(coin.SbVec3f(1, 0, 0), coin.SbVec3f(*v1)) |
| | self.coords1.rotation.setValue(rot1) |
| | self.coords2.translation.setValue(*obj.Points[-1]) |
| | v2 = obj.Points[-2].sub(obj.Points[-1]) |
| | if not DraftVecUtils.isNull(v2): |
| | v2.normalize() |
| | rot2 = coin.SbRotation() |
| | rot2.setValue(coin.SbVec3f(1, 0, 0), coin.SbVec3f(*v2)) |
| | self.coords2.rotation.setValue(rot2) |
| |
|
| | def onChanged(self, vobj, prop): |
| | if ( |
| | prop |
| | in ["ArrowSizeStart", "ArrowSizeEnd", "ArrowTypeStart", "ArrowTypeEnd", "Visibility"] |
| | and hasattr(vobj, "ArrowSizeStart") |
| | and hasattr(vobj, "ArrowSizeEnd") |
| | and hasattr(vobj, "ArrowTypeStart") |
| | and hasattr(vobj, "ArrowTypeEnd") |
| | and hasattr(vobj, "Visibility") |
| | and hasattr(self, "pt1") |
| | and hasattr(self, "pt2") |
| | ): |
| | rn = vobj.RootNode |
| | rn.removeChild(self.pt1) |
| | rn.removeChild(self.pt2) |
| | if vobj.Visibility: |
| | self.pt1.removeChild(self.startSymbol) |
| | self.startSymbol = gui_utils.dim_symbol( |
| | utils.ARROW_TYPES.index(vobj.ArrowTypeStart) |
| | ) |
| | self.pt1.addChild(self.startSymbol) |
| | self.coords1.scaleFactor.setValue([vobj.ArrowSizeStart] * 3) |
| |
|
| | self.pt2.removeChild(self.endSymbol) |
| | self.endSymbol = gui_utils.dim_symbol(utils.ARROW_TYPES.index(vobj.ArrowTypeEnd)) |
| | self.pt2.addChild(self.endSymbol) |
| | self.coords2.scaleFactor.setValue([vobj.ArrowSizeEnd] * 3) |
| |
|
| | self.updateData(vobj.Object, "Points") |
| | rn.addChild(self.pt1) |
| | rn.addChild(self.pt2) |
| |
|
| | if ( |
| | prop == "LineColor" |
| | and hasattr(vobj, "LineColor") |
| | and hasattr(self, "pt1") |
| | and hasattr(self, "pt2") |
| | ): |
| | self.color.rgb.setValue(*vobj.LineColor[:3]) |
| |
|
| | super().onChanged(vobj, prop) |
| | return |
| |
|
| | def claimChildren(self): |
| | if hasattr(self.Object, "Base"): |
| | return [self.Object.Base, self.Object.Tool] |
| | return [] |
| |
|
| | def flatten(self): |
| | if not hasattr(self, "Object"): |
| | return |
| |
|
| | wp = WorkingPlane.get_working_plane() |
| | flat_wire = wires.flattenWire( |
| | self.Object.Shape.Wires[0], origin=wp.position, normal=wp.axis |
| | ) |
| |
|
| | doc = App.ActiveDocument |
| | doc.openTransaction(translate("draft", "Flatten")) |
| |
|
| | self.Object.Placement = App.Placement() |
| | self.Object.Points = [vert.Point for vert in flat_wire.Vertexes] |
| | self.Object.Closed = flat_wire.isClosed() |
| |
|
| | doc.recompute() |
| | doc.commitTransaction() |
| |
|
| |
|
| | |
| | _ViewProviderWire = ViewProviderWire |
| |
|
| | |
| |
|