Skip to content

Commit

Permalink
[Draft] Annotation refactor and Cleanup
Browse files Browse the repository at this point in the history
.


.
  • Loading branch information
carlopav authored and yorikvanhavre committed Apr 16, 2020
1 parent 530e8b6 commit 6d8fe07
Show file tree
Hide file tree
Showing 8 changed files with 192 additions and 226 deletions.
1 change: 0 additions & 1 deletion src/Mod/Draft/Draft.py
Expand Up @@ -260,7 +260,6 @@ def makeRectangle(length, height, placement=None, face=None, support=None):
from draftviewproviders.view_dimension import ViewProviderLinearDimension
_ViewProviderDimension = ViewProviderLinearDimension

return obj

def makeAngularDimension(center,angles,p3,normal=None):
"""makeAngularDimension(center,angle1,angle2,p3,[normal]): creates an angular Dimension
Expand Down
3 changes: 1 addition & 2 deletions src/Mod/Draft/draftguitools/gui_dimensionstyle.py
Expand Up @@ -96,8 +96,7 @@ class GuiCommandDimensionStyle(gui_base.GuiCommandSimplest):
The command creates a dimension style object
"""
def __init__(self):
super().__init__()
self.command_name = "DimensionStyle"
super().__init__(name="Dimension style")

def GetResources(self):
_msg = ("Creates a new dimension style.\n"
Expand Down
39 changes: 35 additions & 4 deletions src/Mod/Draft/draftobjects/dimension.py
Expand Up @@ -30,9 +30,11 @@
import FreeCAD as App
import math
from PySide.QtCore import QT_TRANSLATE_NOOP
import DraftGeomUtils
import draftutils.gui_utils as gui_utils
import draftutils.utils as utils
from draftobjects.draft_annotation import DimensionBase
from draftobjects.draft_annotation import DraftAnnotation
from draftviewproviders.view_dimension import ViewProviderDimensionBase
from draftviewproviders.view_dimension import ViewProviderLinearDimension

def make_dimension(p1,p2,p3=None,p4=None):
Expand Down Expand Up @@ -111,10 +113,40 @@ def make_dimension(p1,p2,p3=None,p4=None):

return obj


class DimensionBase(DraftAnnotation):
"""
The Draft Dimension Base object
This class is not used directly, but inherited by all dimension
objects.
"""

def __init__(self, obj, tp = "Dimension"):
"Initialize common properties for dimension objects"
DraftAnnotation.__init__(self,obj, tp)

# Annotation
obj.addProperty("App::PropertyLink","DimensionStyle",
"Annotation",
QT_TRANSLATE_NOOP("App::Property",
"Link dimension style"))

def onChanged(self,obj,prop):

if prop == "DimensionStyle":
if hasattr(obj, "DimensionStyle"):
gui_utils.format_object(target = obj, origin = obj.DimensionStyle)


def execute(self, obj):

return


class LinearDimension(DimensionBase):
"""The Draft Dimension object"""
"""The Draft Linear Dimension object"""
def __init__(self, obj):
DimensionBase.__init__(self,obj,"Dimension")
super().__init__(obj, "Dimension")

# Draft
obj.addProperty("App::PropertyVectorDistance","Start",
Expand Down Expand Up @@ -179,7 +211,6 @@ def onChanged(self,obj,prop):


def execute(self, obj):
import DraftGeomUtils
# set start point and end point according to the linked geometry
if obj.LinkedGeometry:
if len(obj.LinkedGeometry) == 1:
Expand Down
4 changes: 2 additions & 2 deletions src/Mod/Draft/draftobjects/dimensionstyle.py
Expand Up @@ -30,10 +30,10 @@
import FreeCAD as App
from draftobjects.draft_annotation import DraftAnnotation
from PySide.QtCore import QT_TRANSLATE_NOOP
from draftviewproviders.view_dimensionstyle import ViewProviderDraftDimensionStyle

if App.GuiUp:
import FreeCADGui as Gui
from draftviewproviders.view_dimensionstyle import ViewProviderDraftDimensionStyle

def make_dimension_style(existing_dimension = None):
"""
Expand All @@ -50,4 +50,4 @@ def make_dimension_style(existing_dimension = None):

class DimensionStyle(DraftAnnotation):
def __init__(self, obj):
DraftAnnotation.__init__(self, obj, "DimensionStyle")
super().__init__(obj, "DimensionStyle")
35 changes: 6 additions & 29 deletions src/Mod/Draft/draftobjects/draft_annotation.py
Expand Up @@ -32,8 +32,11 @@
from draftutils import gui_utils

class DraftAnnotation:
"""The Draft Annotation Base object"""
def __init__(self,obj,tp="Unknown"):
"""The Draft Annotation Base object
This class is not used directly, but inherited by all annotation
objects.
"""
def __init__(self, obj, tp="Unknown"):
if obj:
obj.Proxy = self
self.Type = tp
Expand All @@ -49,30 +52,4 @@ def execute(self,obj):
pass

def onChanged(self, obj, prop):
pass



class DimensionBase(DraftAnnotation):
"""The Draft Dimension Base object"""

def __init__(self, obj, tp = "Dimension"):
"Initialize common properties for dimension objects"
DraftAnnotation.__init__(self,obj, tp)

# Annotation
obj.addProperty("App::PropertyLink","DimensionStyle",
"Annotation",
QT_TRANSLATE_NOOP("App::Property",
"Link dimension style"))

def onChanged(self,obj,prop):

if prop == "DimensionStyle":
if hasattr(obj, "DimensionStyle"):
gui_utils.format_object(target = obj, origin = obj.DimensionStyle)


def execute(self, obj):

return
pass
173 changes: 140 additions & 33 deletions src/Mod/Draft/draftviewproviders/view_dimension.py
Expand Up @@ -30,16 +30,19 @@
import FreeCAD as App
import FreeCADGui as Gui
import DraftVecUtils
from pivy import coin
from PySide.QtCore import QT_TRANSLATE_NOOP
import draftutils.utils as utils
import draftutils.gui_utils as gui_utils
from draftviewproviders.view_draft_annotation import ViewProviderDimensionBase
from draftviewproviders.view_draft_annotation import ViewProviderDraftAnnotation

class ViewProviderLinearDimension(ViewProviderDimensionBase):
class ViewProviderDimensionBase(ViewProviderDraftAnnotation):
"""
A View Provider for the Draft Dimension object
DIMENSION VIEW PROVIDER:
This class is not used directly, but inherited by all dimension
view providers.
DIMENSION VIEW PROVIDER NOMENCLATURE:
| txt | e
----o--------------------------------o-----
Expand All @@ -56,7 +59,7 @@ class ViewProviderLinearDimension(ViewProviderDimensionBase):
e = ExtOvershoot (vobj)
txt = label (vobj)
STRUCTURE:
COIN OBJECT STRUCTURE:
vobj.node.color
.drawstyle
.lineswitch1.coords
Expand All @@ -81,13 +84,142 @@ class ViewProviderLinearDimension(ViewProviderDimensionBase):
.font3d
.text3d
"""
def __init__(self, vobj):
# text properties
vobj.addProperty("App::PropertyFont","FontName",
"Text",
QT_TRANSLATE_NOOP("App::Property","Font name"))
vobj.addProperty("App::PropertyLength","FontSize",
"Text",
QT_TRANSLATE_NOOP("App::Property","Font size"))
vobj.addProperty("App::PropertyLength","TextSpacing",
"Text",
QT_TRANSLATE_NOOP("App::Property",
"Spacing between text and dimension line"))
vobj.addProperty("App::PropertyBool","FlipText",
"Text",
QT_TRANSLATE_NOOP("App::Property",
"Rotate the dimension text 180 degrees"))
vobj.addProperty("App::PropertyVectorDistance","TextPosition",
"Text",
QT_TRANSLATE_NOOP("App::Property",
"Text Position. \n"
"Leave (0,0,0) for automatic position"))
vobj.addProperty("App::PropertyString","Override",
"Text",
QT_TRANSLATE_NOOP("App::Property",
"Text override. \n"
"Use $dim to insert the dimension length"))
# units properties
vobj.addProperty("App::PropertyInteger","Decimals",
"Units",
QT_TRANSLATE_NOOP("App::Property",
"The number of decimals to show"))
vobj.addProperty("App::PropertyBool","ShowUnit",
"Units",
QT_TRANSLATE_NOOP("App::Property",
"Show the unit suffix"))
vobj.addProperty("App::PropertyString","UnitOverride",
"Units",
QT_TRANSLATE_NOOP("App::Property",
"A unit to express the measurement. \n"
"Leave blank for system default"))
# graphics properties
vobj.addProperty("App::PropertyLength","ArrowSize",
"Graphics",
QT_TRANSLATE_NOOP("App::Property","Arrow size"))
vobj.addProperty("App::PropertyEnumeration","ArrowType",
"Graphics",
QT_TRANSLATE_NOOP("App::Property","Arrow type"))
vobj.addProperty("App::PropertyBool","FlipArrows",
"Graphics",
QT_TRANSLATE_NOOP("App::Property",
"Rotate the dimension arrows 180 degrees"))
vobj.addProperty("App::PropertyDistance","DimOvershoot",
"Graphics",
QT_TRANSLATE_NOOP("App::Property",
"The distance the dimension line is extended\n"
"past the extension lines"))
vobj.addProperty("App::PropertyDistance","ExtLines",
"Graphics",
QT_TRANSLATE_NOOP("App::Property",
"Length of the extension lines"))
vobj.addProperty("App::PropertyDistance","ExtOvershoot",
"Graphics",
QT_TRANSLATE_NOOP("App::Property",
"Length of the extension line \n"
"above the dimension line"))
vobj.addProperty("App::PropertyBool","ShowLine",
"Graphics",
QT_TRANSLATE_NOOP("App::Property",
"Shows the dimension line and arrows"))

vobj.FontSize = utils.get_param("textheight",0.20)
vobj.TextSpacing = utils.get_param("dimspacing",0.05)
vobj.FontName = utils.get_param("textfont","")
vobj.ArrowSize = utils.get_param("arrowsize",0.1)
vobj.ArrowType = utils.ARROW_TYPES
vobj.ArrowType = utils.ARROW_TYPES[utils.get_param("dimsymbol",0)]
vobj.ExtLines = utils.get_param("extlines",0.3)
vobj.DimOvershoot = utils.get_param("dimovershoot",0)
vobj.ExtOvershoot = utils.get_param("extovershoot",0)
vobj.Decimals = utils.get_param("dimPrecision",2)
vobj.ShowUnit = utils.get_param("showUnit",True)
vobj.ShowLine = True
super().__init__(vobj)

def attach(self, vobj):
"""called on object creation"""
return

def updateData(self, obj, prop):
"""called when the base object is changed"""
return

def onChanged(self, vobj, prop):
"""called when a view property has changed"""
return

def doubleClicked(self,vobj):
self.setEdit(vobj)

def getDisplayModes(self,vobj):
return ["2D","3D"]

def getDefaultDisplayMode(self):
if hasattr(self,"defaultmode"):
return self.defaultmode
else:
return ["2D","3D"][utils.get_param("dimstyle",0)]

def setDisplayMode(self,mode):
return mode

def getIcon(self):
if self.is_linked_to_circle():
return ":/icons/Draft_DimensionRadius.svg"
return ":/icons/Draft_Dimension_Tree.svg"

def __getstate__(self):
return self.Object.ViewObject.DisplayMode

def __setstate__(self,state):
if state:
self.defaultmode = state
self.setDisplayMode(state)



class ViewProviderLinearDimension(ViewProviderDimensionBase):
"""
A View Provider for the Draft Linear Dimension object
"""
def __init__(self, vobj):
ViewProviderDimensionBase.__init__(self,vobj)
super().__init__(vobj)

def attach(self, vobj):
"""called on object creation"""
from pivy import coin
self.Object = vobj.Object
self.color = coin.SoBaseColor()
self.font = coin.SoFont()
Expand Down Expand Up @@ -506,22 +638,6 @@ def draw_ext_overshoot(self, vobj):
self.node.insertChild(self.marksExtOvershoot,2)
self.node3d.insertChild(self.marksExtOvershoot,2)


def doubleClicked(self,vobj):
self.setEdit(vobj)

def getDisplayModes(self,vobj):
return ["2D","3D"]

def getDefaultDisplayMode(self):
if hasattr(self,"defaultmode"):
return self.defaultmode
else:
return ["2D","3D"][utils.get_param("dimstyle",0)]

def setDisplayMode(self,mode):
return mode

def is_linked_to_circle(self):
_obj = self.Object
if _obj.LinkedGeometry and len(_obj.LinkedGeometry) == 1:
Expand All @@ -537,13 +653,4 @@ def is_linked_to_circle(self):
def getIcon(self):
if self.is_linked_to_circle():
return ":/icons/Draft_DimensionRadius.svg"
return ":/icons/Draft_Dimension_Tree.svg"

def __getstate__(self):
return self.Object.ViewObject.DisplayMode

def __setstate__(self,state):
if state:
self.defaultmode = state
self.setDisplayMode(state)

return ":/icons/Draft_Dimension_Tree.svg"
2 changes: 1 addition & 1 deletion src/Mod/Draft/draftviewproviders/view_dimensionstyle.py
Expand Up @@ -153,7 +153,7 @@ def __init__(self, vobj, existing_dimension = None):

self.init_properties(vobj, existing_dimension)

_ViewProviderDraft.__init__(self,vobj)
super().__init__(vobj)

def init_properties(self, vobj, existing_dimension):
"""
Expand Down

0 comments on commit 6d8fe07

Please sign in to comment.