indentation edits
[blender-addons-contrib.git] / cursor_control / data.py
1 # -*- coding: utf-8 -*-
2 # ##### BEGIN GPL LICENSE BLOCK #####
3 #
4 #  This program is free software; you can redistribute it and/or
5 #  modify it under the terms of the GNU General Public License
6 #  as published by the Free Software Foundation; either version 2
7 #  of the License, or (at your option) any later version.
8 #
9 #  This program is distributed in the hope that it will be useful,
10 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 #  GNU General Public License for more details.
13 #
14 #  You should have received a copy of the GNU General Public License
15 #  along with this program; if not, write to the Free Software Foundation,
16 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 #
18 # ##### END GPL LICENSE BLOCK #####
19
20
21
22 """
23   TODO:
24
25       IDEAS:
26
27       LATER:
28
29       ISSUES:
30           Bugs:
31           Mites:
32
33       QUESTIONS:
34
35
36 """
37
38
39
40 import bpy
41 import bgl
42 import math
43 from mathutils import Vector, Matrix
44 from mathutils import geometry
45 from misc_utils import *
46 from constants_utils import *
47 from cursor_utils import *
48 from ui_utils import *
49 from geometry_utils import *
50
51
52 PRECISION = 4
53
54
55 class CursorControlData(bpy.types.PropertyGroup):
56     # Step length properties
57     stepLengthEnable = bpy.props.BoolProperty(name="Use step length",description="Use step length",default=0)
58     stepLengthMode = bpy.props.EnumProperty(items=[
59         ("Mode", "Mode", "Mode"),
60         ("Absolute", "Absolute", "Absolute"),
61         ("Proportional", "Proportional", "Proportional")],
62         default="Proportional")
63     stepLengthValue = bpy.props.FloatProperty(name="",precision=PRECISION,default=PHI)
64     # Property for linex result select...
65     linexChoice = bpy.props.IntProperty(name="",default=-1)
66     deltaVector = bpy.props.FloatVectorProperty(name="",precision=PRECISION,default=(1,0,0))
67
68     def hideLinexChoice(self):
69         self.linexChoice = -1
70
71     def cycleLinexCoice(self,limit):
72         qc = self.linexChoice + 1
73         if qc<0:
74             qc = 1
75         if qc>=limit:
76             qc = 0
77         self.linexChoice = qc
78   
79     def setCursor(self,v):
80         if self.stepLengthEnable:
81             c = CursorAccess.getCursor()
82             if((Vector(c)-Vector(v)).length>0):
83                 if self.stepLengthMode=='Absolute':
84                     v = Vector(v)-Vector(c)
85                     v.normalize()
86                     v = v*self.stepLengthValue + Vector(c)
87                 if self.stepLengthMode=='Proportional':
88                     v = (Vector(v)-Vector(c))*self.stepLengthValue + Vector(c)
89         CursorAccess.setCursor(Vector(v))
90         
91     def guiStates(self,context):
92         tvs = 0
93         tes = 0
94         tfs = 0
95         edit_mode = False
96         obj = context.active_object
97         if (context.mode == 'EDIT_MESH'):
98             if (obj and obj.type=='MESH' and obj.data):
99                 tvs = obj.data.total_vert_sel
100
101                 tes = obj.data.total_edge_sel
102                 tfs = obj.data.total_face_sel
103                 edit_mode = True
104         return (tvs, tes, tfs, edit_mode)
105
106     def invertDeltaVector(self):
107         self.deltaVector = Vector([0,0,0])-Vector(self.deltaVector)
108
109     def normalizeDeltaVector(self):
110         q = Vector(self.deltaVector)
111         q.normalize()
112         self.deltaVector = q
113
114     def addDeltaVectorToCursor(self):
115         c = CursorAccess.getCursor()
116         CursorAccess.setCursor(Vector(c)+Vector(self.deltaVector))
117
118     def subDeltaVectorToCursor(self):
119         c = CursorAccess.getCursor()
120         CursorAccess.setCursor(Vector(c)-Vector(self.deltaVector))