Fix T54789: A Simple Typo in the "Node Wrangler" Addon
[blender-addons.git] / measureit / __init__.py
blobb5791bbfdfd18e1ff1d8e5e27b4421ec290c96e4
1 # ##### BEGIN GPL LICENSE BLOCK #####
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software Foundation,
15 # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 # ##### END GPL LICENSE BLOCK #####
19 # <pep8 compliant>
21 # ----------------------------------------------------------
22 # Author: Antonio Vazquez (antonioya)
23 # ----------------------------------------------------------
25 # ----------------------------------------------
26 # Define Addon info
27 # ----------------------------------------------
28 bl_info = {
29 "name": "MeasureIt",
30 "author": "Antonio Vazquez (antonioya)",
31 "location": "View3D > Tools Panel /Properties panel",
32 "version": (1, 7, 1),
33 "blender": (2, 7, 4),
34 "description": "Tools for measuring objects.",
35 "wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/"
36 "Py/Scripts/3D_interaction/Measureit",
37 "category": "3D View"
41 # ----------------------------------------------
42 # Import modules
43 # ----------------------------------------------
44 if "bpy" in locals():
45 import importlib
47 importlib.reload(measureit_main)
48 # print("measureit: Reloaded multifiles")
49 else:
50 from . import measureit_main
51 # print("measureit: Imported multifiles")
53 # noinspection PyUnresolvedReferences
54 import bpy
55 from bpy.types import (
56 AddonPreferences,
57 Scene,
58 WindowManager,
60 from bpy.props import (
61 FloatVectorProperty,
62 IntProperty,
63 BoolProperty,
64 StringProperty,
65 FloatProperty,
66 EnumProperty,
69 # --------------------------------------------------------------
70 # Register all operators and panels
71 # --------------------------------------------------------------
73 # Add-ons Preferences Update Panel
75 # Define Panel classes for updating
76 panels = (
77 measureit_main.MeasureitEditPanel,
78 measureit_main.MeasureitMainPanel,
79 measureit_main.MeasureitConfPanel,
80 measureit_main.MeasureitRenderPanel,
84 def update_panel(self, context):
85 message = "MeasureIt: Updating Panel locations has failed"
86 try:
87 for panel in panels:
88 if "bl_rna" in panel.__dict__:
89 bpy.utils.unregister_class(panel)
91 for panel in panels:
92 panel.bl_category = context.user_preferences.addons[__name__].preferences.category
93 bpy.utils.register_class(panel)
95 except Exception as e:
96 print("\n[{}]\n{}\n\nError:\n{}".format(__name__, message, e))
97 pass
100 class Measure_Pref(AddonPreferences):
101 # this must match the addon name, use '__package__'
102 # when defining this in a submodule of a python package.
103 bl_idname = __name__
105 category = StringProperty(
106 name="Tab Category",
107 description="Choose a name for the category of the panel",
108 default="Display",
109 update=update_panel
112 def draw(self, context):
113 layout = self.layout
115 row = layout.row()
116 col = row.column()
117 col.label(text="Tab Category:")
118 col.prop(self, "category", text="")
121 # Define menu
122 # noinspection PyUnusedLocal
123 def register():
124 bpy.utils.register_class(measureit_main.RunHintDisplayButton)
125 bpy.utils.register_class(measureit_main.AddSegmentButton)
126 bpy.utils.register_class(measureit_main.AddAreaButton)
127 bpy.utils.register_class(measureit_main.AddSegmentOrtoButton)
128 bpy.utils.register_class(measureit_main.AddAngleButton)
129 bpy.utils.register_class(measureit_main.AddArcButton)
130 bpy.utils.register_class(measureit_main.AddLabelButton)
131 bpy.utils.register_class(measureit_main.AddNoteButton)
132 bpy.utils.register_class(measureit_main.AddLinkButton)
133 bpy.utils.register_class(measureit_main.AddOriginButton)
134 bpy.utils.register_class(measureit_main.DeleteSegmentButton)
135 bpy.utils.register_class(measureit_main.DeleteAllSegmentButton)
136 bpy.utils.register_class(measureit_main.DeleteAllSumButton)
137 bpy.utils.register_class(measureit_main.MeasureitEditPanel)
138 bpy.utils.register_class(measureit_main.MeasureitMainPanel)
139 bpy.utils.register_class(measureit_main.MeasureitConfPanel)
140 bpy.utils.register_class(measureit_main.MeasureitRenderPanel)
141 bpy.utils.register_class(measureit_main.RenderSegmentButton)
142 bpy.utils.register_class(measureit_main.ExpandAllSegmentButton)
143 bpy.utils.register_class(measureit_main.CollapseAllSegmentButton)
144 bpy.utils.register_class(Measure_Pref)
145 update_panel(None, bpy.context)
146 # Define properties
147 Scene.measureit_default_color = FloatVectorProperty(
148 name="Default color",
149 description="Default Color",
150 default=(0.173, 0.545, 1.0, 1.0),
151 min=0.1,
152 max=1,
153 subtype='COLOR',
154 size=4)
155 Scene.measureit_font_size = IntProperty(name="Text Size",
156 description="Default text size",
157 default=14, min=10, max=150)
158 Scene.measureit_hint_space = FloatProperty(name='Separation', min=0, max=100, default=0.1,
159 precision=3,
160 description="Default distance to display measure")
161 Scene.measureit_gl_ghost = BoolProperty(name="All",
162 description="Display measures for all objects,"
163 " not only selected",
164 default=True)
165 Scene.measureit_gl_txt = StringProperty(name="Text", maxlen=256,
166 description="Short description (use | for line break)")
168 Scene.measureit_gl_precision = IntProperty(name='Precision', min=0, max=5, default=2,
169 description="Number of decimal precision")
170 Scene.measureit_gl_show_d = BoolProperty(name="ShowDist",
171 description="Display distances",
172 default=True)
173 Scene.measureit_gl_show_n = BoolProperty(name="ShowName",
174 description="Display texts",
175 default=False)
176 Scene.measureit_scale = BoolProperty(name="Scale",
177 description="Use scale factor",
178 default=False)
179 Scene.measureit_scale_factor = FloatProperty(name='Factor', min=0.001, max=9999999,
180 default=1.0,
181 precision=3,
182 description="Scale factor 1:x")
183 Scene.measureit_scale_color = FloatVectorProperty(name="Scale color",
184 description="Scale Color",
185 default=(1, 1, 0, 1.0),
186 min=0.1,
187 max=1,
188 subtype='COLOR',
189 size=4)
190 Scene.measureit_scale_font = IntProperty(name="Font",
191 description="Text size",
192 default=14, min=10, max=150)
193 Scene.measureit_scale_pos_x = IntProperty(name="X Position",
194 description="Margin on the X axis",
195 default=5,
196 min=0,
197 max=100)
198 Scene.measureit_scale_pos_y = IntProperty(name="Y Position",
199 description="Margin on the Y axis",
200 default=5,
201 min=0,
202 max=100)
203 Scene.measureit_gl_scaletxt = StringProperty(name="ScaleText", maxlen=48,
204 description="Scale title",
205 default="Scale:")
206 Scene.measureit_scale_precision = IntProperty(name='Precision', min=0, max=5, default=0,
207 description="Number of decimal precision")
208 Scene.measureit_ovr = BoolProperty(name="Override",
209 description="Override colors and fonts",
210 default=False)
211 Scene.measureit_ovr_font = IntProperty(name="Font",
212 description="Override text size",
213 default=14, min=10, max=150)
214 Scene.measureit_ovr_color = FloatVectorProperty(name="Override color",
215 description="Override Color",
216 default=(1, 0, 0, 1.0),
217 min=0.1,
218 max=1,
219 subtype='COLOR',
220 size=4)
221 Scene.measureit_ovr_width = IntProperty(name='Override width', min=1, max=10, default=1,
222 description='override line width')
224 Scene.measureit_ovr_font_rotation = IntProperty(name='Rotate', min=0, max=360, default=0,
225 description="Text rotation in degrees")
226 Scene.measureit_ovr_font_align = EnumProperty(items=(('L', "Left Align", "Use current render"),
227 ('C', "Center Align", ""),
228 ('R', "Right Align", "")),
229 name="Align Font",
230 description="Set Font Alignment")
231 Scene.measureit_units = EnumProperty(items=(('1', "Automatic", "Use scene units"),
232 ('2', "Meters", ""),
233 ('3', "Centimeters", ""),
234 ('4', "Milimiters", ""),
235 ('5', "Feet", ""),
236 ('6', "Inches", "")),
237 name="Units",
238 default="2",
239 description="Units")
240 Scene.measureit_hide_units = BoolProperty(name="hide_units",
241 description="Do not display unit of measurement on viewport",
242 default=False)
243 Scene.measureit_render = BoolProperty(name="Render",
244 description="Save an image with measures over"
245 " render image",
246 default=False)
247 Scene.measureit_render_type = EnumProperty(items=(('1', "*Current", "Use current render"),
248 ('2', "OpenGL", ""),
249 ('3', "Animation OpenGL", ""),
250 ('4', "Image", ""),
251 ('5', "Animation", "")),
252 name="Render type",
253 description="Type of render image")
254 Scene.measureit_sum = EnumProperty(items=(('99', "-", "Select a group for sum"),
255 ('0', "A", ""),
256 ('1', "B", ""),
257 ('2', "C", ""),
258 ('3', "D", ""),
259 ('4', "E", ""),
260 ('5', "F", ""),
261 ('6', "G", ""),
262 ('7', "H", ""),
263 ('8', "I", ""),
264 ('9', "J", ""),
265 ('10', "K", ""),
266 ('11', "L", ""),
267 ('12', "M", ""),
268 ('13', "N", ""),
269 ('14', "O", ""),
270 ('15', "P", ""),
271 ('16', "Q", ""),
272 ('17', "R", ""),
273 ('18', "S", ""),
274 ('19', "T", ""),
275 ('20', "U", ""),
276 ('21', "V", ""),
277 ('22', "W", ""),
278 ('23', "X", ""),
279 ('24', "Y", ""),
280 ('25', "Z", "")),
281 name="Sum in Group",
282 description="Add segment length in selected group")
284 Scene.measureit_rf = BoolProperty(name="render_frame",
285 description="Add a frame in render output",
286 default=False)
287 Scene.measureit_rf_color = FloatVectorProperty(name="Fcolor",
288 description="Frame Color",
289 default=(0.9, 0.9, 0.9, 1.0),
290 min=0.1,
291 max=1,
292 subtype='COLOR',
293 size=4)
294 Scene.measureit_rf_border = IntProperty(name='fborder ', min=1, max=1000, default=10,
295 description='Frame space from border')
296 Scene.measureit_rf_line = IntProperty(name='fline', min=1, max=10, default=1,
297 description='Line width for border')
299 Scene.measureit_glarrow_a = EnumProperty(items=(('99', "--", "No arrow"),
300 ('1', "Line",
301 "The point of the arrow are lines"),
302 ('2', "Triangle",
303 "The point of the arrow is triangle"),
304 ('3', "TShape",
305 "The point of the arrow is a T")),
306 name="A end",
307 description="Add arrows to point A")
308 Scene.measureit_glarrow_b = EnumProperty(items=(('99', "--", "No arrow"),
309 ('1', "Line",
310 "The point of the arrow are lines"),
311 ('2', "Triangle",
312 "The point of the arrow is triangle"),
313 ('3', "TShape",
314 "The point of the arrow is a T")),
315 name="B end",
316 description="Add arrows to point B")
317 Scene.measureit_glarrow_s = IntProperty(name="Size",
318 description="Arrow size",
319 default=15, min=6, max=500)
321 Scene.measureit_debug = BoolProperty(name="Debug",
322 description="Display information for debuging"
323 " (expand/collapse for enabling or disabling)"
324 " this information is only renderered for "
325 "selected objects",
326 default=False)
327 Scene.measureit_debug_select = BoolProperty(name="Selected",
328 description="Display information "
329 "only for selected items",
330 default=False)
331 Scene.measureit_debug_vertices = BoolProperty(name="Vertices",
332 description="Display vertex index number",
333 default=True)
334 Scene.measureit_debug_objects = BoolProperty(name="Objects",
335 description="Display object scene index number",
336 default=False)
337 Scene.measureit_debug_vert_loc = BoolProperty(name="Location",
338 description="Display vertex location",
339 default=False)
340 Scene.measureit_debug_object_loc = BoolProperty(name="Location",
341 description="Display object location",
342 default=False)
343 Scene.measureit_debug_edges = BoolProperty(name="Edges",
344 description="Display edge index number",
345 default=False)
346 Scene.measureit_debug_faces = BoolProperty(name="Faces",
347 description="Display face index number",
348 default=False)
349 Scene.measureit_debug_normals = BoolProperty(name="Normals",
350 description="Display face normal "
351 "vector and creation order",
352 default=False)
353 Scene.measureit_debug_normal_details = BoolProperty(name="Details",
354 description="Display face normal details",
355 default=True)
356 Scene.measureit_debug_font = IntProperty(name="Font",
357 description="Debug text size",
358 default=14, min=10, max=150)
359 Scene.measureit_debug_vert_color = FloatVectorProperty(name="Debug color",
360 description="Debug Color",
361 default=(1, 0, 0, 1.0),
362 min=0.1,
363 max=1,
364 subtype='COLOR',
365 size=4)
366 Scene.measureit_debug_face_color = FloatVectorProperty(name="Debug face color",
367 description="Debug face Color",
368 default=(0, 1, 0, 1.0),
369 min=0.1,
370 max=1,
371 subtype='COLOR',
372 size=4)
373 Scene.measureit_debug_norm_color = FloatVectorProperty(name="Debug vector color",
374 description="Debug vector Color",
375 default=(1.0, 1.0, 0.1, 1.0),
376 min=0.1,
377 max=1,
378 subtype='COLOR',
379 size=4)
380 Scene.measureit_debug_edge_color = FloatVectorProperty(name="Debug vector color",
381 description="Debug vector Color",
382 default=(0.1, 1.0, 1.0, 1.0),
383 min=0.1,
384 max=1,
385 subtype='COLOR',
386 size=4)
387 Scene.measureit_debug_obj_color = FloatVectorProperty(name="Debug vector color",
388 description="Debug vector Color",
389 default=(1.0, 1.0, 1.0, 1.0),
390 min=0.1,
391 max=1,
392 subtype='COLOR',
393 size=4)
394 Scene.measureit_debug_normal_size = FloatProperty(name='Len', min=0.001, max=9,
395 default=0.5,
396 precision=2,
397 description="Normal arrow size")
398 Scene.measureit_debug_width = IntProperty(name='Debug width', min=1, max=10, default=2,
399 description='Vector line thickness')
400 Scene.measureit_debug_precision = IntProperty(name='Precision', min=0, max=5, default=1,
401 description="Number of decimal precision")
402 Scene.measureit_debug_vert_loc_toggle = EnumProperty(items=(('1', "Local",
403 "Uses local coordinates"),
404 ('2', "Global",
405 "Uses global coordinates")),
406 name="Coordinates",
407 description="Choose coordinate system")
408 Scene.measureit_font_rotation = IntProperty(name='Rotate', min=0, max=360, default=0,
409 description="Default text rotation in degrees")
410 Scene.measureit_font_align = EnumProperty(items=(('L', "Left Align", "Use current render"),
411 ('C', "Center Align", ""),
412 ('R', "Right Align", "")),
413 name="Align Font",
414 description="Set Font Alignment")
416 # OpenGL flag
417 wm = WindowManager
418 # register internal property
419 wm.measureit_run_opengl = BoolProperty(default=False)
422 def unregister():
423 bpy.utils.unregister_class(measureit_main.RunHintDisplayButton)
424 bpy.utils.unregister_class(measureit_main.AddSegmentButton)
425 bpy.utils.unregister_class(measureit_main.AddAreaButton)
426 bpy.utils.unregister_class(measureit_main.AddSegmentOrtoButton)
427 bpy.utils.unregister_class(measureit_main.AddAngleButton)
428 bpy.utils.unregister_class(measureit_main.AddArcButton)
429 bpy.utils.unregister_class(measureit_main.AddLabelButton)
430 bpy.utils.unregister_class(measureit_main.AddNoteButton)
431 bpy.utils.unregister_class(measureit_main.AddLinkButton)
432 bpy.utils.unregister_class(measureit_main.AddOriginButton)
433 bpy.utils.unregister_class(measureit_main.DeleteSegmentButton)
434 bpy.utils.unregister_class(measureit_main.DeleteAllSegmentButton)
435 bpy.utils.unregister_class(measureit_main.DeleteAllSumButton)
436 bpy.utils.unregister_class(measureit_main.MeasureitEditPanel)
437 bpy.utils.unregister_class(measureit_main.MeasureitMainPanel)
438 bpy.utils.unregister_class(measureit_main.MeasureitConfPanel)
439 bpy.utils.unregister_class(measureit_main.MeasureitRenderPanel)
440 bpy.utils.unregister_class(measureit_main.RenderSegmentButton)
441 bpy.utils.unregister_class(measureit_main.ExpandAllSegmentButton)
442 bpy.utils.unregister_class(measureit_main.CollapseAllSegmentButton)
443 bpy.utils.unregister_class(Measure_Pref)
445 # Remove properties
446 del Scene.measureit_default_color
447 del Scene.measureit_font_size
448 del Scene.measureit_hint_space
449 del Scene.measureit_gl_ghost
450 del Scene.measureit_gl_txt
451 del Scene.measureit_gl_precision
452 del Scene.measureit_gl_show_d
453 del Scene.measureit_gl_show_n
454 del Scene.measureit_scale
455 del Scene.measureit_scale_factor
456 del Scene.measureit_scale_color
457 del Scene.measureit_scale_font
458 del Scene.measureit_scale_pos_x
459 del Scene.measureit_scale_pos_y
460 del Scene.measureit_gl_scaletxt
461 del Scene.measureit_scale_precision
462 del Scene.measureit_ovr
463 del Scene.measureit_ovr_font
464 del Scene.measureit_ovr_color
465 del Scene.measureit_ovr_width
466 del Scene.measureit_ovr_font_rotation
467 del Scene.measureit_ovr_font_align
468 del Scene.measureit_units
469 del Scene.measureit_hide_units
470 del Scene.measureit_render
471 del Scene.measureit_render_type
472 del Scene.measureit_sum
473 del Scene.measureit_rf
474 del Scene.measureit_rf_color
475 del Scene.measureit_rf_border
476 del Scene.measureit_rf_line
477 del Scene.measureit_glarrow_a
478 del Scene.measureit_glarrow_b
479 del Scene.measureit_glarrow_s
480 del Scene.measureit_debug
481 del Scene.measureit_debug_select
482 del Scene.measureit_debug_vertices
483 del Scene.measureit_debug_objects
484 del Scene.measureit_debug_edges
485 del Scene.measureit_debug_faces
486 del Scene.measureit_debug_normals
487 del Scene.measureit_debug_normal_details
488 del Scene.measureit_debug_font
489 del Scene.measureit_debug_vert_color
490 del Scene.measureit_debug_face_color
491 del Scene.measureit_debug_norm_color
492 del Scene.measureit_debug_edge_color
493 del Scene.measureit_debug_obj_color
494 del Scene.measureit_debug_normal_size
495 del Scene.measureit_debug_width
496 del Scene.measureit_debug_precision
497 del Scene.measureit_debug_vert_loc
498 del Scene.measureit_debug_object_loc
499 del Scene.measureit_debug_vert_loc_toggle
500 del Scene.measureit_font_rotation
501 del Scene.measureit_font_align
503 # remove OpenGL data
504 measureit_main.RunHintDisplayButton.handle_remove(measureit_main.RunHintDisplayButton, bpy.context)
505 wm = bpy.context.window_manager
506 p = 'measureit_run_opengl'
507 if p in wm:
508 del wm[p]
511 if __name__ == '__main__':
512 register()