Download src/Mod/Draft/draftviewproviders/view_wire.py from AbdulElahGwaith/FreeCAD: direct link, hf CLI and curl.
- Browser
- Download file 8.33 kB
-
https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/Draft/draftviewproviders/view_wire.py
- Command line
-
hf download hf://AbdulElahGwaith/FreeCAD/src/Mod/Draft/draftviewproviders/view_wire.py
-
curl -L -o view_wire.py https://huggingface.co/AbdulElahGwaith/FreeCAD/resolve/main/src/Mod/Draft/draftviewproviders/view_wire.py
8.33 kB
| # SPDX-License-Identifier: LGPL-2.1-or-later | |
| # *************************************************************************** | |
| # * Copyright (c) 2009, 2010 Yorik van Havre <yorik@uncreated.net> * | |
| # * Copyright (c) 2009, 2010 Ken Cline <cline@frii.com> * | |
| # * Copyright (c) 2019 Eliud Cabrera Castillo <e.cabrera-castillo@tum.de> * | |
| # * * | |
| # * This program is free software; you can redistribute it and/or modify * | |
| # * it under the terms of the GNU Lesser General Public License (LGPL) * | |
| # * as published by the Free Software Foundation; either version 2 of * | |
| # * the License, or (at your option) any later version. * | |
| # * for detail see the LICENCE text file. * | |
| # * * | |
| # * This program is distributed in the hope that it will be useful, * | |
| # * but WITHOUT ANY WARRANTY; without even the implied warranty of * | |
| # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * | |
| # * GNU Library General Public License for more details. * | |
| # * * | |
| # * You should have received a copy of the GNU Library General Public * | |
| # * License along with this program; if not, write to the Free Software * | |
| # * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * | |
| # * USA * | |
| # * * | |
| # *************************************************************************** | |
| """Provides the viewprovider code for the Wire (polyline) object. | |
| This viewprovider is also used by simple lines, B-splines, bezier curves, | |
| and similar objects. | |
| """ | |
| ## @package view_wire | |
| # \ingroup draftviewproviders | |
| # \brief Provides the viewprovider code for the Wire (polyline) object. | |
| ## \addtogroup draftviewproviders | |
| # @{ | |
| 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): # Only to be used for Draft_Wires. | |
| 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() | |
| # Alias for compatibility with v0.18 and earlier | |
| _ViewProviderWire = ViewProviderWire | |
| ## @} | |