Skip to content

Commit

Permalink
Draft: parent classes of all Draft objects
Browse files Browse the repository at this point in the history
Add DraftObject and ViewProviderDraft to serve as
the parent classes of all Draft objects
and all Draft view providers.

Inside `Draft.py` we need to import
`_DraftObject` from `draftobjects.base`;
and `_ViewProviderDraft`, `_ViewProviderDraftAlt`,
and `_ViewProviderDraftPart` from `draftviewproviders.view_base`.
.


.


.


.
  • Loading branch information
carlopav authored and yorikvanhavre committed Apr 29, 2020
1 parent 0900576 commit 43f6721
Show file tree
Hide file tree
Showing 6 changed files with 710 additions and 175 deletions.
14 changes: 14 additions & 0 deletions src/Mod/Draft/CMakeLists.txt
Expand Up @@ -58,8 +58,17 @@ SET(Draft_utilities
draftutils/README.md
)

SET(Draft_functions
draftfunctions/__init__.py
)

SET(Draft_make_functions
draftmake/__init__.py
)

SET(Draft_objects
draftobjects/__init__.py
draftobjects/base.py
draftobjects/circulararray.py
draftobjects/orthoarray.py
draftobjects/polararray.py
Expand All @@ -73,6 +82,7 @@ SET(Draft_objects

SET(Draft_view_providers
draftviewproviders/__init__.py
draftviewproviders/view_base.py
draftviewproviders/view_circulararray.py
draftviewproviders/view_orthoarray.py
draftviewproviders/view_polararray.py
Expand Down Expand Up @@ -168,6 +178,8 @@ SET(Draft_SRCS_all
${Draft_import}
${Draft_tests}
${Draft_utilities}
${Draft_functions}
${Draft_make_functions}
${Draft_objects}
${Draft_view_providers}
${Draft_GUI_tools}
Expand Down Expand Up @@ -211,6 +223,8 @@ INSTALL(

INSTALL(FILES ${Draft_tests} DESTINATION Mod/Draft/drafttests)
INSTALL(FILES ${Draft_utilities} DESTINATION Mod/Draft/draftutils)
INSTALL(FILES ${Draft_functions} DESTINATION Mod/Draft/draftfunctions)
INSTALL(FILES ${Draft_make_functions} DESTINATION Mod/Draft/draftmake)
INSTALL(FILES ${Draft_objects} DESTINATION Mod/Draft/draftobjects)
INSTALL(FILES ${Draft_view_providers} DESTINATION Mod/Draft/draftviewproviders)
INSTALL(FILES ${Draft_GUI_tools} DESTINATION Mod/Draft/draftguitools)
Expand Down
193 changes: 18 additions & 175 deletions src/Mod/Draft/Draft.py
Expand Up @@ -169,11 +169,27 @@
from draftutils.gui_utils import loadTexture
from draftutils.gui_utils import load_texture

#---------------------------------------------------------------------------
# Draft functions
#---------------------------------------------------------------------------



#---------------------------------------------------------------------------
# Draft objects
#---------------------------------------------------------------------------

# base object
from draftobjects.base import DraftObject
from draftobjects.base import _DraftObject

# base viewprovider
from draftviewproviders.view_base import ViewProviderDraft
from draftviewproviders.view_base import _ViewProviderDraft
from draftviewproviders.view_base import ViewProviderDraftAlt
from draftviewproviders.view_base import _ViewProviderDraftAlt
from draftviewproviders.view_base import ViewProviderDraftPart
from draftviewproviders.view_base import _ViewProviderDraftPart

#---------------------------------------------------------------------------
# Draft annotation objects
Expand Down Expand Up @@ -3102,181 +3118,8 @@ def calculatePlacementsOnPath(shapeRotation, pathwire, count, xlate, align):
#---------------------------------------------------------------------------
# Python Features definitions
#---------------------------------------------------------------------------

class _DraftObject:
"""The base class for Draft objects"""
def __init__(self,obj,tp="Unknown"):
if obj:
obj.Proxy = self
self.Type = tp

def __getstate__(self):
return self.Type

def __setstate__(self,state):
if state:
self.Type = state

def execute(self,obj):
pass

def onChanged(self, obj, prop):
pass

class _ViewProviderDraft:
"""The base class for Draft Viewproviders"""

def __init__(self, vobj):
vobj.Proxy = self
self.Object = vobj.Object
vobj.addProperty("App::PropertyEnumeration","Pattern","Draft",QT_TRANSLATE_NOOP("App::Property","Defines a hatch pattern"))
vobj.addProperty("App::PropertyFloat","PatternSize","Draft",QT_TRANSLATE_NOOP("App::Property","Sets the size of the pattern"))
vobj.Pattern = ["None"]+list(svgpatterns().keys())
vobj.PatternSize = 1

def __getstate__(self):
return None

def __setstate__(self, state):
return None

def attach(self,vobj):
self.texture = None
self.texcoords = None
self.Object = vobj.Object
self.onChanged(vobj,"Pattern")
return

def updateData(self, obj, prop):
return

def getDisplayModes(self, vobj):
modes=[]
return modes

def setDisplayMode(self, mode):
return mode

def onChanged(self, vobj, prop):
# treatment of patterns and image textures
if prop in ["TextureImage","Pattern","DiffuseColor"]:
if hasattr(self.Object,"Shape"):
if self.Object.Shape.Faces:
from pivy import coin
from PySide import QtCore
path = None
if hasattr(vobj,"TextureImage"):
if vobj.TextureImage:
path = vobj.TextureImage
if not path:
if hasattr(vobj,"Pattern"):
if str(vobj.Pattern) in list(svgpatterns().keys()):
path = svgpatterns()[vobj.Pattern][1]
else:
path = "None"
if path and vobj.RootNode:
if vobj.RootNode.getChildren().getLength() > 2:
if vobj.RootNode.getChild(2).getChildren().getLength() > 0:
if vobj.RootNode.getChild(2).getChild(0).getChildren().getLength() > 2:
r = vobj.RootNode.getChild(2).getChild(0).getChild(2)
i = QtCore.QFileInfo(path)
if self.texture:
r.removeChild(self.texture)
self.texture = None
if self.texcoords:
r.removeChild(self.texcoords)
self.texcoords = None
if i.exists():
size = None
if ".SVG" in path.upper():
size = getParam("HatchPatternResolution",128)
if not size:
size = 128
im = loadTexture(path, size)
if im:
self.texture = coin.SoTexture2()
self.texture.image = im
r.insertChild(self.texture,1)
if size:
s =1
if hasattr(vobj,"PatternSize"):
if vobj.PatternSize:
s = vobj.PatternSize
self.texcoords = coin.SoTextureCoordinatePlane()
self.texcoords.directionS.setValue(s,0,0)
self.texcoords.directionT.setValue(0,s,0)
r.insertChild(self.texcoords,2)
elif prop == "PatternSize":
if hasattr(self,"texcoords"):
if self.texcoords:
s = 1
if vobj.PatternSize:
s = vobj.PatternSize
vS = FreeCAD.Vector(self.texcoords.directionS.getValue().getValue())
vT = FreeCAD.Vector(self.texcoords.directionT.getValue().getValue())
vS.Length = s
vT.Length = s
self.texcoords.directionS.setValue(vS.x,vS.y,vS.z)
self.texcoords.directionT.setValue(vT.x,vT.y,vT.z)
return

def execute(self,vobj):
return

def setEdit(self,vobj,mode=0):
if mode == 0:
FreeCADGui.runCommand("Draft_Edit")
return True
return False

def unsetEdit(self,vobj,mode=0):
if FreeCAD.activeDraftCommand:
FreeCAD.activeDraftCommand.finish()
FreeCADGui.Control.closeDialog()
return False

def getIcon(self):
tp = self.Object.Proxy.Type
if tp in ('Line', 'Wire', 'Polyline'):
return ":/icons/Draft_N-Linear.svg"
elif tp in ('Rectangle', 'Polygon'):
return ":/icons/Draft_N-Polygon.svg"
elif tp in ('Circle', 'Ellipse', 'BSpline', 'BezCurve', 'Fillet'):
return ":/icons/Draft_N-Curve.svg"
elif tp in ("ShapeString"):
return ":/icons/Draft_ShapeString_tree.svg"
else:
return ":/icons/Draft_Draft.svg"

def claimChildren(self):
objs = []
if hasattr(self.Object,"Base"):
objs.append(self.Object.Base)
if hasattr(self.Object,"Objects"):
objs.extend(self.Object.Objects)
if hasattr(self.Object,"Components"):
objs.extend(self.Object.Components)
if hasattr(self.Object,"Group"):
objs.extend(self.Object.Group)
return objs

class _ViewProviderDraftAlt(_ViewProviderDraft):
"""a view provider that doesn't swallow its base object"""

def __init__(self,vobj):
_ViewProviderDraft.__init__(self,vobj)

def claimChildren(self):
return []

class _ViewProviderDraftPart(_ViewProviderDraftAlt):
"""a view provider that displays a Part icon instead of a Draft icon"""

def __init__(self,vobj):
_ViewProviderDraftAlt.__init__(self,vobj)

def getIcon(self):
return ":/icons/Tree_Part.svg"
import draftobjects.base
_DraftObject = draftobjects.base.DraftObject

class _ViewProviderDraftLink:
"a view provider for link type object"
Expand Down
3 changes: 3 additions & 0 deletions src/Mod/Draft/draftfunctions/__init__.py
@@ -0,0 +1,3 @@
"""Generic functions of the Draft Workbench.
"""
3 changes: 3 additions & 0 deletions src/Mod/Draft/draftmake/__init__.py
@@ -0,0 +1,3 @@
"""Functions that to create custom scripted Draft objects.
"""

0 comments on commit 43f6721

Please sign in to comment.