FreeCAD

Форк
0
70 строк · 1.8 Кб
1
# (c) 2012 Werner Mayer LGPL
2

3
import FreeCAD, FreeCADGui
4
from pivy import coin
5

6
class Texture:
7
	def __init__(self, obj, source):
8
		"Add some custom properties to our box feature"
9
		obj.addProperty("App::PropertyLink","Source","Texture", "Link to the shape").Source = source
10
		obj.Proxy = self
11

12
	def onChanged(self, fp, prop):
13
		return
14

15
	def execute(self, fp):
16
		return
17

18
class ViewProviderTexture:
19
	def __init__(self, obj):
20
		obj.addProperty("App::PropertyPath","File","Texture", "File name to the texture resource")
21
		self.obj = obj
22
		obj.Proxy = self
23

24
	def onChanged(self, obj, prop):
25
		if prop == "File":
26
			self.tex.filename = str(obj.File)
27
		return
28

29
	def updateData(self, fp, prop):
30
		return
31

32
	def getDisplayModes(self,obj):
33
		''' Return a list of display modes. '''
34
		modes=["Texture"]
35
		return modes
36

37
	def attach(self, obj):
38
		self.grp = coin.SoGroup()
39
		self.tex = coin.SoTexture2()
40
		#self.env = coin.SoTextureCoordinateEnvironment()
41
 
42
		self.grp.addChild(self.tex)
43
		#self.grp.addChild(self.env)
44
		root = obj.Object.Source.ViewObject.RootNode
45
		self.grp.addChild(root)
46
		obj.addDisplayMode(self.grp,"Texture")
47
		# move the original node
48
		doc = obj.Object.Document
49
		doc = FreeCADGui.getDocument(doc.Name)
50
		graph = doc.ActiveView.getSceneGraph()
51
		graph.removeChild(root)
52

53
	def claimChildren(self):
54
		return [self.obj.Object.Source]
55

56
	def __getstate__(self):
57
		return None
58
 
59
	def __setstate__(self,state):
60
		return None
61

62
def makeTexture():
63
	FreeCAD.newDocument()
64
	box = FreeCAD.ActiveDocument.addObject("Part::Box","Box")
65
	tex=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Texture")
66
	Texture(tex, box)
67
	box.ViewObject.Selectable = False
68
	ViewProviderTexture(tex.ViewObject)
69
	box.touch()
70
	FreeCAD.ActiveDocument.recompute()
71

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.