FreeCAD
70 строк · 1.8 Кб
1# (c) 2012 Werner Mayer LGPL
2
3import FreeCAD, FreeCADGui
4from pivy import coin
5
6class Texture:
7def __init__(self, obj, source):
8"Add some custom properties to our box feature"
9obj.addProperty("App::PropertyLink","Source","Texture", "Link to the shape").Source = source
10obj.Proxy = self
11
12def onChanged(self, fp, prop):
13return
14
15def execute(self, fp):
16return
17
18class ViewProviderTexture:
19def __init__(self, obj):
20obj.addProperty("App::PropertyPath","File","Texture", "File name to the texture resource")
21self.obj = obj
22obj.Proxy = self
23
24def onChanged(self, obj, prop):
25if prop == "File":
26self.tex.filename = str(obj.File)
27return
28
29def updateData(self, fp, prop):
30return
31
32def getDisplayModes(self,obj):
33''' Return a list of display modes. '''
34modes=["Texture"]
35return modes
36
37def attach(self, obj):
38self.grp = coin.SoGroup()
39self.tex = coin.SoTexture2()
40#self.env = coin.SoTextureCoordinateEnvironment()
41
42self.grp.addChild(self.tex)
43#self.grp.addChild(self.env)
44root = obj.Object.Source.ViewObject.RootNode
45self.grp.addChild(root)
46obj.addDisplayMode(self.grp,"Texture")
47# move the original node
48doc = obj.Object.Document
49doc = FreeCADGui.getDocument(doc.Name)
50graph = doc.ActiveView.getSceneGraph()
51graph.removeChild(root)
52
53def claimChildren(self):
54return [self.obj.Object.Source]
55
56def __getstate__(self):
57return None
58
59def __setstate__(self,state):
60return None
61
62def makeTexture():
63FreeCAD.newDocument()
64box = FreeCAD.ActiveDocument.addObject("Part::Box","Box")
65tex=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Texture")
66Texture(tex, box)
67box.ViewObject.Selectable = False
68ViewProviderTexture(tex.ViewObject)
69box.touch()
70FreeCAD.ActiveDocument.recompute()
71