Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.12 KB | None | 0 0
  1. ###!/usr/bin/env python
  2. bl_info = {
  3. "name": "AUTO_S",
  4. "author": "AlxMcKonst",
  5. "version": (1, 6, 0),
  6. "blender": (2, 77, 0),
  7. "location": "Mesh",
  8. "description": "My Collection automate scripts",
  9. "warning": "WIP",
  10. "wiki_url": "",
  11. "tracker_url": "",
  12. "category": "UI"}
  13.  
  14. # -*- coding: utf-8 -*-
  15. import bpy
  16. from bpy.types import Panel, Menu
  17.  
  18.  
  19. p = "c:\\MY_SCRIPTS\\Auto\\Auto\\"
  20.  
  21. #-----> """TEST""
  22. class TEST(bpy.types.Operator):
  23. """Test"""
  24. bl_idname = "scene.test"
  25. bl_label = "TEST MENU"
  26. bl_options = {"REGISTER", "UNDO"}
  27.  
  28. nm = bpy.props.IntProperty(
  29. name="PITCH",
  30. description="111",
  31. default=0,
  32. min=0
  33. )
  34.  
  35. def execute(self, context):
  36. imm = bpy.context.screen.areas[2].spaces[1].background_images
  37. d = []
  38.  
  39. try:
  40. for i in range(10):
  41. d.append(imm[i])
  42. except IndexError:
  43. print(d)
  44. try:
  45. imy = bpy.context.screen.areas[3].spaces[0].background_images[self.nm]
  46. imx = bpy.context.screen.areas[3].spaces[0].background_images[self.nm]
  47. cly = bpy.context.screen.areas[2].spaces[0].cursor_location[1] #* 2.884052426250225
  48. clx = bpy.context.screen.areas[2].spaces[0].cursor_location[0]
  49. # bpy.ops.view3d.viewnumpad(type='TOP', align_active=False)
  50. imy.offset_y = cly
  51. imx.offset_x = clx
  52. except IndexError:
  53. self.nm = len(d)-1
  54. return {"FINISHED"}
  55. return {"FINISHED"}
  56.  
  57. # rtrn = bpy.props.EmunProperty(
  58. # name = "000",
  59. # description = "000",
  60. # max = 3
  61. # )
  62. # def execute(self, context):
  63. # bpy.ops.view3d.view_orbit(angle=self.sptrn*0.1, type='ORBITLEFT')
  64.  
  65. # from time import monotonic as mm
  66. # mm0 = int(mm())
  67. # i=1
  68. # while self.rtrn:
  69. # b=1
  70. # dt = int(mm())+1
  71. # val = dt-mm0
  72. # i = i+1
  73. # if i==1254*1000:
  74. # bpy.ops.view3d.view_orbit(angle=val*0.1, type='ORBITLEFT')
  75. # i=1
  76. # print (1)
  77. # mm0 = 20*int(mm())
  78. # for i in range(int(mm())):
  79. # dt = int(20*mm())+1
  80. # val = dt-mm0
  81. # print (val)
  82. # bpy.ops.view3d.view_orbit(angle=val*0.1, type='ORBITLEFT')
  83.  
  84. #-----> """RotateObject(DUPLI)""
  85. class Robject(bpy.types.Operator):
  86. """Rotate&duble_object"""
  87. bl_idname = "scene.robject"
  88. bl_label = "Rotate & Duble Me"
  89. bl_options = {"REGISTER", "UNDO"}
  90.  
  91. grad = bpy.props.IntProperty(
  92. name="copies",
  93. description="copies",
  94. default=2,
  95. min=2,
  96. max=8
  97. )
  98. arrc = bpy.props.BoolProperty(
  99. name="ArroundCursor",
  100. description="ArCrs",
  101. #default=0
  102. )
  103. dstp = bpy.props.BoolProperty(
  104. name="LinkStop",
  105. description="LnkStp",
  106. default=0
  107. )
  108. drot = bpy.props.BoolProperty(
  109. name="ORIENT",
  110. description="drotate",
  111. default=0
  112. )
  113. def execute(self, context):
  114. if self.arrc == 1:
  115. bpy.context.space_data.pivot_point = 'CURSOR'
  116. else:
  117. bpy.context.space_data.pivot_point = 'ACTIVE_ELEMENT'
  118. for i in range(self.grad):
  119. bpy.ops.object.duplicate_move_linked(OBJECT_OT_duplicate={"linked":True,
  120. "mode":'TRANSLATION'},
  121. TRANSFORM_OT_translate={"value":(0, 0, 0),
  122. "constraint_axis":(False, False, False),
  123. "constraint_orientation":'GLOBAL',
  124. "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SPHERE',
  125. "proportional_size":2.14359, "snap":False, "snap_target":'CLOSEST',
  126. "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0),
  127. "gpencil_strokes":False, "texture_space":False, "remove_on_cancel":False, "release_confirm":False})
  128. bpy.ops.transform.rotate(value=(360/self.grad)*0.017453292519943,
  129. axis=(0, 0, 1),
  130. constraint_axis=(False, False, True),
  131. constraint_orientation='GLOBAL' if self.drot == 0 else 'LOCAL',
  132. mirror=False, proportional='DISABLED',
  133. proportional_edit_falloff='SPHERE',
  134. proportional_size=2.14359, release_confirm=True
  135. )
  136. bpy.context.selected_objects
  137. bpy.ops.object.delete(use_global=False)
  138. # bpy.data.objects[self.robj.name].select = True
  139. # bpy.context.scene.objects.active = self.robj
  140. return {"FINISHED"}
  141.  
  142. #-----> """Create_the_one_ring""
  143. class Crlwo(bpy.types.Operator):
  144. """create_the_one_ring
  145. _or_the_connection
  146. _of_the_two_rings_(bézier_curve)
  147. """
  148. bl_idname = "scene.crlwo"
  149. bl_label = "CrtCircle"
  150. bl_options = {"REGISTER", "UNDO"}
  151.  
  152.  
  153. bzc = bpy.props.FloatProperty(
  154. name="Indiameter",
  155. description="inner_diameter",
  156. default=1,
  157. min=0.0
  158. )
  159. bdc = bpy.props.FloatProperty(
  160. name="Diameter_prof",
  161. description="bevel_depth",
  162. default=1,
  163. min=0.0
  164. )
  165. lnc = bpy.props.BoolProperty(
  166. name="2Circle",
  167. description="2Circle",
  168. default=False
  169. )
  170.  
  171. trcl = bpy.props.FloatProperty(
  172. name = "Move Circl 'X'",
  173. description = "TRANSFORM_OT_translate={"'value'":(self.trcl, 0, 0)",
  174. default = 1.07748
  175. )
  176. vwc = bpy.props.BoolProperty(
  177. name="Algin View",
  178. description="view_align",
  179. default=False
  180. )
  181. flc = bpy.props.BoolProperty(
  182. name = "FillCurve",
  183. description = "FllCrv",
  184. default = 1
  185. )
  186. cqv = bpy.props.BoolProperty(
  187. name = "quadro",
  188. description = "Q",
  189. default = 1,
  190. #options={'HIDDEN' if flc[1]['default']!=1 else 'ANIMATABLE'},
  191. update=None
  192. )
  193. def execute(self, context):
  194. s = self
  195. CdR = (s.bzc + s.bdc)/2
  196. # bpy.ops.script.python_file_run(filepath = p + "TranspON.py")
  197. if self.flc==0:
  198. bpy.ops.curve.primitive_bezier_circle_add(
  199. radius=CdR,
  200. view_align=s.vwc,
  201. enter_editmode=False,
  202. )
  203. bpy.context.object.data.fill_mode = 'FULL'
  204. bpy.context.object.data.bevel_depth = s.bdc / 2
  205. bpy.context.object.data.bevel_resolution = 16 #s.brc
  206.  
  207. # leenk = s.lnc
  208. while s.lnc==True and self.flc==0:
  209. bpy.ops.object.duplicate_move_linked(OBJECT_OT_duplicate={"linked":True, "mode":'TRANSLATION'},
  210. TRANSFORM_OT_translate={"value":(s.trcl, 0, 0), "constraint_axis":(True, False, False),
  211. "constraint_orientation":'LOCAL', "mirror":False, "proportional":'DISABLED',
  212. "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False,
  213. "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0),
  214. "gpencil_strokes":False, "texture_space":False, "remove_on_cancel":False, "release_confirm":False})
  215. bpy.ops.transform.rotate(value=1.5708, axis=(0.397503, 0.917601, -2.2628e-007), constraint_axis=(True, False, False), constraint_orientation='LOCAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=6.11584, release_confirm=True)
  216.  
  217. break
  218. if bpy.context.active_object.type == 'CURVE' and self.flc==1:
  219. bpy.context.object.data.fill_mode = 'FULL'
  220. bpy.context.object.data.bevel_depth = s.bdc/2
  221. if self.cqv !=1:
  222. bpy.context.object.data.bevel_resolution = 16 #s.brc
  223. else:
  224. bpy.context.object.data.bevel_resolution = 0
  225. return {"FINISHED"}
  226.  
  227. #-----> """Props ops_Kursor"""
  228. class kurs(bpy.types.Operator):
  229. """Porps ops_Kursor"""
  230. bl_idname = "scene.kursor"
  231. bl_label = "Pos Kursor"
  232. bl_options = {"REGISTER", "UNDO"}
  233.  
  234. kr1 = bpy.props.BoolProperty(name="To_selected", description="K1", default=0)
  235. kr2 = bpy.props.BoolProperty( name="point_align", description="K2", default=0)
  236. kNull = bpy.props.BoolProperty(name="0.0.0", description="0.0.0", default=1)
  237. defo = bpy.props.BoolProperty(name="reset", description="res", default=0)
  238. krpnt = bpy.props.BoolProperty(name="LOCpoint_to_kursor", description="pnt2krsr", default=0)
  239. def execute(self, context):
  240. if self.kr1 == 1:
  241. #Cur01(scale)
  242. bpy.ops.view3d.snap_cursor_to_selected()
  243. bpy.context.space_data.pivot_point = 'CURSOR'
  244. bpy.ops.object.orientationvariable(variable="GLOBAL")
  245. #Cur02(move)
  246. bpy.context.space_data.use_pivot_point_align = self.kr2
  247. if self.defo == 1:
  248. bpy.context.space_data.use_pivot_point_align = False
  249. bpy.context.space_data.pivot_point = 'ACTIVE_ELEMENT'
  250. bpy.context.space_data.transform_orientation = 'LOCAL'
  251. self.kr1=self.kr2=self.kNull=self.defo=0
  252. # self.kr1=0
  253. # self.kNull=0
  254. # self.defo=0
  255. if self.kNull == 1:
  256. bpy.context.scene.cursor_location.xyz = 0
  257. bpy.context.space_data.pivot_point = 'CURSOR'
  258. bpy.context.space_data.transform_orientation = 'GLOBAL'
  259. self.kr1=self.kr2=self.kNull=0
  260. if self.krpnt == 1:
  261. bpy.ops.view3d.snap_cursor_to_selected()
  262. bpy.ops.object.editmode_toggle()
  263. bpy.ops.object.origin_set(type='ORIGIN_CURSOR')
  264. bpy.ops.object.editmode_toggle()
  265. self.krpnt = 0
  266.  
  267. return {"FINISHED"}
  268.  
  269. #-----> """dissolution"""
  270. class dissol(bpy.types.Operator):
  271. """dissolution"""
  272. bl_idname = "scene.dissol"
  273. bl_label = "dissolution"
  274. bl_options = {"REGISTER", "UNDO"}
  275.  
  276. def execute(self, context):
  277. # bpy.ops.script.python_file_run(filepath = p + "Dsel_Vrtx_ches.py")
  278. bpy.ops.mesh.select_linked(delimit={'SEAM'})
  279. bpy.ops.mesh.select_nth()
  280. bpy.ops.mesh.dissolve_mode(use_verts=True)
  281. bpy.ops.mesh.select_linked(delimit={'SEAM'})
  282. bpy.ops.mesh.looptools_space()
  283. return {"FINISHED"}
  284.  
  285. #-----> """Change active object"""
  286. class changobj(bpy.types.Operator):
  287. """Change active object"""
  288. bl_idname = "scene.changobj"
  289. bl_label = "Change_active_object"
  290. bl_options = {"REGISTER", "UNDO"}
  291.  
  292. chl = bpy.props.BoolProperty(
  293. name="Set active object",
  294. description="chl",
  295. default=0
  296. )
  297. chlst = bpy.props.IntProperty(
  298. name="List active object",
  299. description="chlst",
  300. default=0,
  301. # min=-(len(bpy.context.selected_objects)),
  302. max=-1
  303. )
  304. # lo = bpy.selection_osc
  305. def execute(self, context):
  306. try:
  307. Ob = bpy.context.object.select
  308. except IndexError:
  309. print(No_Object)
  310. # if Ob == True:
  311. lo = bpy.context.selected_objects
  312. # bpy.context.object.show_name = False
  313. if self.chl==0 and self.chlst<len(lo)-1:
  314. try:
  315. bpy.context.scene.objects.active = bpy.data.objects[lo[self.chlst].name]
  316. # bpy.context.object.show_name = True
  317. except IndexError:
  318. bpy.context.scene.objects.active = bpy.data.objects[lo[-1].name]
  319. # bpy.context.object.show_name = True
  320. self.chl=0
  321. self.chlst=0
  322. # else:
  323. # bpy.context.scene.objects.active = bpy.data.objects[lo[0].name]
  324. if self.chl!=0:
  325. bpy.context.scene.objects.active = bpy.data.objects[lo[0].name]
  326. self.chl=0
  327. self.chlst=0
  328.  
  329. # if self.chl !=0:
  330. # bpy.ops.script.python_file_run(filepath = p + "ChangeActiveObj.py")
  331. return {"FINISHED"}
  332.  
  333. #-----> """Join 1 object (objects) to the active object"""
  334. class AplyJion(bpy.types.Operator):
  335. """Join 1 object (objects) to the active object"""
  336. bl_idname = "scene.apjion"
  337. bl_label = "aply_Join_locRot_Obj"
  338. bl_options = {"REGISTER", "UNDO"}
  339.  
  340. CMs = bpy.props.BoolProperty(
  341. name="ORIGIN_CENTER_OF_MASS",
  342. description="CMs",
  343. default=0
  344. )
  345. def execute(self, context):
  346. obj = bpy.context.selected_objects
  347. obd = {i: obj[i] for i in range(len(obj))}
  348. def sel(SEL):
  349. import bmesh
  350. """Here second seleted all vertex"""
  351. bpy.ops.object.editmode_toggle()
  352. mesh = bmesh.from_edit_mesh(bpy.context.object.data)
  353. for v in mesh.verts:
  354. v.select = SEL
  355. for v in mesh.edges:
  356. v.select = SEL
  357. for v in mesh.faces:
  358. v.select = SEL
  359. ## trigger viewport update
  360. # bpy.context.scene.objects.active = bpy.context.scene.objects.active
  361. bpy.ops.object.editmode_toggle()
  362.  
  363. # >> > d = {i: jh[i] for i in range(len(jh))}
  364. # >> > d
  365. # {0: bpy.data.objects['Cube.000'], 1: bpy.data.objects['Cube.003']}
  366. #
  367. # >> > jh[0]
  368. # bpy.data.objects['Cube.000']
  369. if len(obj) >= 2:
  370. sel(True)
  371. ## Here first object made is active
  372. bpy.context.scene.objects.active = obd[1]
  373. sel(False)
  374.  
  375. # # bpy.ops.mesh.select_all(action='TOGGLE')
  376. # ## Selected acive seconde object
  377. bpy.context.scene.objects.active = obd[0]
  378. #
  379. # ## object.join
  380. bpy.ops.object.join()
  381. #
  382. # ## Edit mode del vertex
  383. bpy.ops.object.editmode_toggle()
  384. bpy.ops.mesh.delete(type='VERT')
  385. bpy.ops.object.editmode_toggle()
  386. bpy.context.object.name = obd[1].name
  387.  
  388. if self.CMs == 1:
  389. bpy.ops.object.origin_set(type='ORIGIN_CENTER_OF_MASS')
  390.  
  391.  
  392. #bpy.ops.script.python_file_run(filepath = p + "AplyJoinLoc.py")
  393. return {"FINISHED"}
  394.  
  395. #-----> """Sculpt"""
  396. class SculptMyDint(bpy.types.Operator):
  397. """
  398. My prop for Sculpt(activate Dintopo)
  399. Get the name of the sculpture brush.
  400. Written to the variable "aname"
  401. Create a pattern brush in quotes
  402. Enter parametters
  403. """
  404. bl_idname = "scene.scdint"
  405. bl_label = "Sculpt_MyDintopo"
  406. bl_options = {"REGISTER", "UNDO"}
  407.  
  408. myspec = bpy.props.BoolProperty(
  409. name="MY_SPEC",
  410. description="MSPC",
  411. default=0
  412. )
  413.  
  414. def execute(self, context):
  415. # Get the name of the sculpture brush. Written to the variable "aname"
  416. #bpy.ops.script.python_file_run(filepath = p + "Sculpt_MyDint.py")
  417. aname = bpy.context.scene.tool_settings.sculpt.brush.name
  418.  
  419. # Create a pattern brush in quotes
  420. B = "%s" % aname + ""
  421.  
  422. # Put options sculpting
  423. bpy.context.scene.tool_settings.sculpt.detail_refine_method = 'SUBDIVIDE_COLLAPSE'
  424. bpy.context.scene.tool_settings.sculpt.detail_type_method = 'CONSTANT'
  425. bpy.context.scene.tool_settings.sculpt.use_symmetry_x = False
  426. bpy.context.scene.tool_settings.sculpt.use_symmetry_y = False
  427. bpy.context.scene.tool_settings.sculpt.use_symmetry_z = False
  428. bpy.data.brushes[B].use_frontface = True
  429. if self.myspec == 1:
  430. bpy.data.brushes[B].strength = 0.5
  431. bpy.data.brushes[B].auto_smooth_factor = 0.6
  432. bpy.context.scene.tool_settings.unified_paint_settings.size = 40
  433. bpy.context.scene.tool_settings.sculpt.constant_detail = 10
  434.  
  435. md = bpy.context.mode
  436. if md == 'OBJECT':
  437. bpy.ops.sculpt.sculptmode_toggle()
  438. if bpy.context.sculpt_object.use_dynamic_topology_sculpting == False:
  439. bpy.ops.sculpt.dynamic_topology_toggle()
  440. if md == 'SCULPT' and self.myspec != 1:
  441. if bpy.context.sculpt_object.use_dynamic_topology_sculpting != False:
  442. bpy.ops.sculpt.dynamic_topology_toggle()
  443. bpy.ops.sculpt.sculptmode_toggle()
  444. return {"FINISHED"}
  445.  
  446. #-----> """AutoRend+FS"""
  447. class OpsRenderLrs(bpy.types.Operator):
  448. """My Prop For Render & Render Layers, activate FS"""
  449. bl_idname = "scene.autorend"
  450. bl_label = "AutoRend+FS"
  451. bl_options = {"REGISTER", "UNDO"}
  452.  
  453. rgsl = bpy.props.BoolProperty(
  454. name="RGSL",
  455. description="RGSL",
  456. default=0
  457. )
  458. rprop = bpy.props.BoolProperty(
  459. name="MySetR",
  460. description="MySetR",
  461. default=0
  462. )
  463. def execute(self, context):
  464. if self.rgsl == 1:
  465. bpy.context.scene.render.resolution_percentage = 100
  466. bpy.context.scene.render.use_antialiasing = True
  467. bpy.context.scene.render.antialiasing_samples = '16'
  468. bpy.context.scene.render.use_motion_blur = False
  469. bpy.context.scene.render.resolution_percentage = 100
  470. bpy.context.scene.render.alpha_mode = 'TRANSPARENT'
  471. bpy.context.space_data.viewport_shade = 'MATERIAL'
  472. bpy.context.scene.render.image_settings.file_format = 'PNG'
  473. bpy.context.scene.render.image_settings.color_mode = 'RGBA'
  474. bpy.context.scene.render.image_settings.compression = 0
  475. bpy.context.scene.render.use_freestyle = False
  476.  
  477. self.rgsl = 0
  478. if self.rprop == 1:
  479. bpy.ops.script.python_file_run(filepath= p + "AutoRend.py")
  480. self.rprop = 0
  481.  
  482. return {"FINISHED"}
  483.  
  484. #-----> """Gruop For Name Items"""
  485. class GruopForNameItems(bpy.types.Operator):
  486. """Create a group by the name(item) of the active object"""
  487. bl_idname = "scene.grpnmimts"
  488. bl_label = "GruopForNameItems"
  489.  
  490. def execute(self, context):
  491. obj = bpy.context.selected_objects
  492. # длина списока
  493. objl = len(obj)
  494. # снять выделение со всего
  495. bpy.ops.object.select_all(action='TOGGLE')
  496. for i in range(objl): # цикл от длины списка
  497. try:
  498. if obj != None:
  499. if obj != None:
  500. # удалитьт значение по идексу
  501. nm = obj.pop(0)
  502. # получение имени выделенного элемента
  503. nmpop = nm.name
  504. # выделяем обж по индексу
  505. obsl = bpy.data.objects[nmpop]
  506. obsl.select = True
  507. # делаем обж "активным"
  508. bpy.context.scene.objects.active = bpy.data.objects[nmpop]
  509. # показываем имя в окне вида и группируем по имени объекта
  510. bpy.context.object.show_name = True
  511. bpy.ops.group.create(name=nmpop)
  512. print(nmpop)
  513. # снимаем выделение
  514. obsl.select = False
  515. print('+')
  516. except IndexError:
  517. break
  518. # bpy.ops.script.python_file_run(filepath= p + "GruopForNameItems.py")
  519.  
  520. return {"FINISHED"}
  521.  
  522. #-----> """Name Items For Dupli Group Name"""
  523. class App_NmLink_ToEmpty(bpy.types.Operator):
  524. """Name dupltgruop + Replace name Empty"""
  525. bl_idname = "scene.rempty"
  526. bl_label = "App_NmLink_ToEmpty"
  527. bl_options = {"REGISTER", "UNDO"}
  528.  
  529. gsz = bpy.props.FloatProperty(name="SIZE_SPHERE", description="chlst", default=1.45, min=0)
  530.  
  531. def execute(self, context):
  532. """app_nameObj_to_Newgruop"""
  533. # bpy.ops.object.select_all(action='TOGGLE')
  534. for i in range(len(bpy.context.selected_objects)):
  535. n = bpy.context.selected_objects[i].name
  536. bpy.context.scene.objects.active = bpy.data.objects[n]
  537. e = bpy.context.active_object.dupli_group.name
  538. bpy.context.object.name = e
  539. bpy.context.object.show_name = True
  540. bpy.context.object.empty_draw_size = self.gsz
  541. bpy.context.object.empty_draw_type = 'SPHERE'
  542.  
  543. # bpy.ops.script.python_file_run(filepath= p + "App_NmLink_ToEmpty.py")
  544. return {"FINISHED"}
  545.  
  546. #-----> """ReScale & normalOut"""
  547. class Sacle_Nrml(bpy.types.Operator):
  548. """Aply sacle, outnormal"""
  549. bl_idname = "scene.rscnrm"
  550. bl_label = "ReScal & normalOut"
  551. bl_options = {"REGISTER", "UNDO"}
  552.  
  553. unlo = bpy.props.BoolProperty(
  554. name="Unlink",
  555. description="Unlnk",
  556. default=0
  557. )
  558. def execute(self, context):
  559. # Here object make_single_user and transform_apply
  560. if self.unlo == 1:
  561. bpy.ops.object.make_single_user(
  562. object=True,
  563. obdata=True,
  564. material=False,
  565. texture=False,
  566. animation=False
  567. )
  568. bpy.ops.object.transform_apply(
  569. location=False,
  570. rotation=False,
  571. scale=True
  572. )
  573. self.unlo=0
  574. def strt():
  575. import bmesh
  576. mesh=bmesh.from_edit_mesh(bpy.context.object.data)
  577. for v in mesh.verts:
  578. v.select = False
  579. for v in mesh.edges:
  580. v.select = False
  581. for v in mesh.faces:
  582. v.select = False
  583. # trigger viewport update
  584. bpy.context.scene.objects.active = bpy.context.scene.objects.active
  585. bpy.ops.mesh.select_all(action='TOGGLE')
  586. bpy.ops.mesh.normals_make_consistent(inside=False)
  587. bpy.context.object.data.show_normal_loop = False
  588. bpy.context.object.data.show_normal_vertex = False
  589. bpy.context.object.data.show_normal_face = False
  590. bpy.ops.mesh.select_all(action='TOGGLE')
  591. bpy.ops.object.editmode_toggle()
  592. # Here object seleted all vertex
  593. sedt = bpy.context.mode
  594. scl = bpy.context.object.scale.xyz.to_tuple(1)
  595. if sedt == 'OBJECT':
  596. if scl == (1.0, 1.0, 1.0): # detect object scale Vector((1.0, 1.0, 1.0))
  597. bpy.ops.object.editmode_toggle() # edit mode
  598. strt() # run def strt()
  599. print('scene.rscnrm_scale Ok', scl)
  600. else:
  601. bpy.ops.apply.transformscale()
  602. bpy.ops.object.editmode_toggle()
  603. strt()
  604. print('scene.rscnrm_scale Edit', scl)
  605. if sedt == 'EDIT_MESH':
  606. strt()
  607. # bpy.ops.script.python_file_run(filepath= p + "OutNorm.py")
  608. return {"FINISHED"}
  609.  
  610. #----->"""Bevel_0.2"""
  611. class BVLn2(bpy.types.Operator):
  612. """bevel(offset=0.2, segments=2)
  613. SELECT EDGE LOOP | | | | | | |
  614. """
  615. bl_idname = "scene.bvln"
  616. bl_label = "Bevel 0.2"
  617. bl_options = {"REGISTER", "UNDO"}
  618. bts = bpy.props.FloatProperty(name="depth/height", description="shrink_fatten", default=0.2)
  619. bss = bpy.props.IntProperty(name="subiv", description="subd", default=2, min=0)
  620. dmns = bpy.props.BoolProperty(name="Invert", description="INV", default=0)
  621. brx = bpy.props.BoolProperty(name="RELAX", description="looptools_relax", default=False)
  622. brd = bpy.props.FloatProperty(name="Remove_doubles", description="dbls", default=0.0)
  623.  
  624.  
  625. def execute(self, context):
  626. # bpy.ops.script.python_file_run(filepath= p + "Bvl0,2.py")
  627. Ob = bpy.context.object.select
  628. adtt = bpy.context.mode
  629.  
  630. if Ob == True:
  631. if adtt == 'EDIT_MESH':
  632. bpy.ops.mesh.subdivide(smoothness=0)
  633. bpy.ops.mesh.select_less()
  634. bpy.ops.mesh.bevel(
  635. offset=0.1,
  636. segments=self.bss,
  637. vertex_only=False
  638. )
  639. bpy.ops.mesh.select_less()
  640. bpy.ops.transform.shrink_fatten(value=(self.bts * -1) if self.dmns == 1 else self.bts)
  641. bpy.ops.mesh.remove_doubles(threshold=self.brd)
  642. if self.brx == True:
  643. bpy.ops.mesh.looptools_relax(
  644. input='selected',
  645. interpolation='linear',
  646. iterations='3',
  647. regular=False
  648. )
  649.  
  650. return {"FINISHED"}
  651.  
  652. #----->"""Bevel_0.2"""
  653. class BVLnSingl(bpy.types.Operator):
  654. """bevel(offset=0.2, segments=2) Var 2
  655. SELECT EDGE LOOP ========
  656. """
  657. bl_idname = "scene.bvlntwo"
  658. bl_label = "BnS_Plus"
  659. bl_options = {"REGISTER", "UNDO"}
  660. bts = bpy.props.FloatProperty(name="depth/height", description="shrink_fatten", default=0.2)
  661. bss = bpy.props.IntProperty(name="subiv", description="subd", default=2,min=0)
  662. brd = bpy.props.FloatProperty(name="Remove_doubles", description="dbls", default=0.0)
  663. dsp = bpy.props.BoolProperty(name="Super_Dept", description="SDPT", default=0)
  664. bvs = bpy.props.FloatProperty(name="Bevel", description="BVL", default=0)
  665. dms = bpy.props.BoolProperty(name="Invert", description="INV", default=0)
  666. brx = bpy.props.BoolProperty(name="RELAX", description="looptlsrlx", default=0)
  667. def execute(self, context):
  668. def edbl():
  669. """
  670. Bevel(0.2, 2 - subd)
  671. loop multi_select(False) edges
  672. """
  673. bpy.ops.mesh.bevel(offset=0.1 , segments=self.bss , vertex_only=False)
  674. bpy.ops.mesh.select_less()
  675. bpy.ops.transform.shrink_fatten(value=(self.bts * -1) if self.dms == 1 else self.bts)
  676. bpy.ops.mesh.remove_doubles(threshold=self.brd)
  677. if self.brx == True:
  678. bpy.ops.mesh.looptools_relax(input='selected', interpolation='linear', iterations='3', regular=False)
  679. if self.dsp == 1:
  680. bpy.ops.mesh.bevel(offset=0.1, segments=2, vertex_only=False)
  681. bpy.ops.mesh.select_less()
  682. bpy.ops.transform.shrink_fatten(value=0.2, use_even_offset=False, mirror=False, proportional='CONNECTED',
  683. proportional_edit_falloff='SMOOTH', proportional_size=0.0839017)
  684. Ob = bpy.context.object.select
  685. adtt = bpy.context.mode
  686. if Ob == True and adtt == 'EDIT_MESH':
  687. edbl()
  688. if self.dsp == 1:
  689. self.bss = 2
  690. bpy.ops.mesh.bevel(offset=self.bvs, segments=1, vertex_only=False)
  691. return {"FINISHED"}
  692.  
  693. #----->"""Normal out"""
  694. class normshow(bpy.types.Operator):
  695. """Normal out, show normal(0.6mm)"""
  696. bl_idname = "scene.normshow"
  697. bl_label = "Nout"
  698. bl_options = {"REGISTER", "UNDO"}
  699.  
  700. nr = bpy.props.FloatProperty(
  701. name = "normal size",
  702. description = "normal size",
  703. default = 0.6,
  704. min=0.000,
  705. max=0.9
  706. )
  707. # nrmu = bpy.props.BoolProperty(
  708. # name="out",
  709. # description="Out",
  710. # default = 1
  711. # )
  712. def execute(self, context):
  713. nr1 = bpy.context.scene.tool_settings.normal_size = self.nr
  714. bpy.context.object.data.show_normal_vertex = True
  715. bpy.context.object.data.show_normal_loop = True
  716. bpy.context.space_data.show_backface_culling = True
  717.  
  718. edm = bpy.context.mode
  719. if edm == 'OBJECT':
  720. bpy.ops.object.editmode_toggle()
  721. import bmesh
  722. mesh=bmesh.from_edit_mesh(bpy.context.object.data)
  723. for v in mesh.verts:
  724. v.select = False
  725. for v in mesh.edges:
  726. v.select = False
  727. for v in mesh.faces:
  728. v.select = False
  729. # trigger viewport update
  730. bpy.context.scene.objects.active = bpy.context.scene.objects.active
  731. bpy.ops.mesh.select_all(action='TOGGLE')
  732. bpy.ops.mesh.normals_make_consistent(inside = 1)
  733. nr1
  734. bpy.ops.mesh.select_all(action='TOGGLE')
  735. # bpy.ops.script.python_file_run(filepath= p + "Normal_out_0.6.py")
  736.  
  737. return {"FINISHED"}
  738.  
  739. #-----> """Bevel UP"""
  740. class B_UP(bpy.types.Operator):
  741. """Bevel UP to NULL"""
  742. bl_idname = "scene.bup"
  743. bl_label = "BVL_UP"
  744. bl_options = {"REGISTER", "UNDO"}
  745.  
  746. mlst = bpy.props.BoolProperty(
  747. name = "UpModifier",
  748. description = "UpNull",
  749. default = 0
  750. )
  751. bm0 = bpy.props.BoolProperty(
  752. name = "Clear_eddge",
  753. description = "ClearEdg",
  754. default = 0
  755. )
  756. bclmp = bpy.props.BoolProperty(
  757. name = "Clamp",
  758. description = "Clamp",
  759. default = 0
  760. )
  761. bedt = bpy.props.BoolProperty(
  762. name = "EDITMODE",
  763. description = "EDITMODE",
  764. default = 0
  765. )
  766. def execute(self, context):
  767. slo = bpy.context.selected_objects[0].name
  768. edm = bpy.context.mode
  769. bmf = bpy.context.object.modifiers.items() # list modifrs
  770. bmf2 = [i[0] for i in bmf] # a list of the names of the modifiers
  771. def bvlprms():
  772. """Bevel parametrs for 'BUP'"""
  773. # cretate modifrs "BEVEL"
  774. bpy.ops.object.modifier_add(type='BEVEL')
  775. bnm = bpy.context.object.modifiers[- 1].name # name a last modifrs
  776. # my paramtrs a "BEVEL"
  777. bpy.context.object.modifiers[bnm].use_clamp_overlap = False
  778. bpy.context.object.modifiers[bnm].limit_method = 'WEIGHT'
  779. bpy.context.object.modifiers[bnm].width = 0.5
  780. bpy.context.object.modifiers[bnm].segments = 6
  781. bpy.context.object.modifiers["Bevel"].show_in_editmode = False
  782. def up_mod():
  783. bmf = bpy.context.object.modifiers.items()
  784. """move up modifier on the length of the list"""
  785. bnm = bpy.context.object.modifiers[-1].name # name a last modifrs
  786. if len(bmf) >= 2:
  787. for i in range(len(bmf) - 1):
  788. bpy.ops.object.modifier_move_up(modifier=bnm)
  789. bpy.context.object.modifiers[bnm].show_expanded = False
  790. self.mlst = 0
  791.  
  792. if 'Bevel' in bmf2 and self.bclmp == 1:
  793. bpy.context.object.modifiers["Bevel"].use_clamp_overlap = True
  794. # EDITE MODE_BEVEL
  795. if 'Bevel' in bmf2: # CHECK FOR MODIFIER in the list and select the display mode
  796. if self.bedt == 1: # EDITE MODE_BEVEL
  797. bpy.context.object.modifiers["Bevel"].show_in_editmode = True
  798. else:
  799. bpy.context.object.modifiers["Bevel"].show_in_editmode = False
  800. # EDGE_BEVELWEIGHT == ON
  801. if edm == "EDIT_MESH" and self.bm0 !=1:
  802. bpy.ops.transform.edge_bevelweight(value=1)
  803. bpy.ops.mesh.select_mode(use_extend=False, use_expand=True, type='EDGE')
  804. # if self.mlst !=1: # and self.bstp != 1:
  805. # EDGE_BEVELWEIGHT == OFF
  806. if edm == "EDIT_MESH" and self.bm0 ==1:
  807. bpy.ops.transform.edge_bevelweight(value=-1)
  808. # self.bm0 =0
  809. bch = 0
  810. bct = 0
  811. if bmf ==[]: # verifacation items for a "[]" если спискок пуст запускаем функцию сохдания бевела
  812. bvlprms()
  813. bct = 1
  814. while bct !=1: # create "BEVEL" and UP in steck вычисляем длину списка
  815. it = bmf[bch][1].type
  816. if it != 'BEVEL':
  817. bch = bch+1
  818. if it == 'BEVEL':
  819. bct = 1
  820. break
  821. if bch >= len(bmf):
  822. bvlprms()
  823. print('add bevel')
  824. up_mod()
  825. # self.bstp = 0
  826. bct = 1
  827. break
  828.  
  829. if self.mlst ==1:
  830. up_mod()
  831. return {"FINISHED"}
  832.  
  833. #-----> """Bevel UP"""
  834. class SDUP(bpy.types.Operator):
  835. """Select_Dupli"""
  836. bl_idname = "scene.sdup"
  837. bl_label = "Sel_SDUP"
  838. bl_options = {"REGISTER", "UNDO"}
  839.  
  840. # dmv = bpy.props.BoolProperty(
  841. # name = "move",
  842. # description = "move",
  843. # default = 0
  844. # )
  845. # dinv = bpy.props.BoolProperty(
  846. # name="Invert_select",
  847. # description="invsel",
  848. # default=0
  849. # )
  850. Lc = bpy.props.BoolProperty(
  851. name="LOCAL",
  852. description="Local",
  853. default=0
  854. )
  855. LRt = bpy.props.BoolProperty(
  856. name="LOCAL_ROTATE",
  857. description="LRT",
  858. default=0
  859. )
  860.  
  861. def execute(self, context):
  862. null = {} # выдаёт случайный порядок ключей
  863. sel = bpy.context.selected_objects # список выделенных обьектов
  864. bpy.ops.object.select_all(action='TOGGLE') #
  865. name_null = []
  866. for i in range(len(sel)):
  867. sel[i].select = True
  868. seloc = sel[i].location.to_tuple(1) # locaton
  869. el = sel[i].rotation_euler
  870. selrot = el[0], el[1], el[2] # -------
  871. dt = {'loc': str(seloc), 'rot': str(selrot)} # dict
  872. sel[i].select = False
  873. null[str(sel[i].name)] = dt
  874. name_null.append(str(sel[i].name))
  875. print('\n\n')
  876. dupli = {}
  877. # print(null)
  878. ig = ( )
  879. for i in null: # выбираем один элемент из "главного" списка(1действие)
  880. bc = null.copy() # копия "главного" словаря
  881. it = null[i] # получение значения ключа "главного" списка
  882. # print(i)
  883. del bc[i] # удаление ключа("самого себя")"i". можно bc.pop(i)
  884. for k in bc: # выбираем один элемент из копии "главного" списка(n-действий)
  885. if not dupli.get(k):
  886. itc = bc[k] # получение значения ключа оригинального списка
  887. if it == itc: # сравнение списков
  888. # print('i',i)
  889. dupli[i] = null[i] # одно дейс
  890. def locrot(): # функция выделения
  891. for i in dupli:
  892. # dupli[i]
  893. bpy.data.objects[i].select = True
  894.  
  895. def fortune(): # функция перемещения дубликатов
  896. bpy.ops.transform.translate(value=(0, 0, -1.97685), constraint_axis=(False, False, True),
  897. constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED',
  898. proportional_edit_falloff='SMOOTH', proportional_size=8.95431,
  899. release_confirm=True)
  900. bpy.ops.scene.changobj()
  901. bpy.context.object.draw_type = 'WIRE'
  902. bpy.ops.object.copy_obj_drw()
  903. print('\n\n\n', len(dupli), '\n\n', dupli, '\n\n', it)
  904.  
  905. def loca():
  906. single = [] # не дублируемые обьекты
  907. coord = [] # координаты location выделенных
  908. # sel = bpy.context.selected_objects
  909. for i in range(len(sel)):
  910. sel[i].select = True
  911. for i in range(len(sel)):
  912. vec = sel[i].location.to_tuple(1)
  913. if vec not in coord:
  914. coord.append(vec)
  915. single.append(sel[i]) # добавляем в список имена обьектов для выделения
  916. if vec in coord:
  917. print(vec)
  918. print(coord, '\n', single)
  919.  
  920. bpy.ops.object.select_all(action='TOGGLE')
  921. # if self.dinv == 1:
  922. # for i in range(len(single)):
  923. # single[i].select = True
  924. # else:
  925. # for i in range(len(sel)):
  926. # if sel[i] not in single:
  927. # sel[i].select = True
  928. for i in range(len(sel)):
  929. if sel[i] not in single:
  930. sel[i].select = True
  931.  
  932. # if self.dmv and dupli: # переместить
  933. # fortune()
  934. # self.dmv = 0
  935.  
  936. if self.Lc == 1: # положение
  937. loca()
  938. self.Lc = 0
  939. self.report({'INFO'}, "LOC_MODE: I found %d objects" % len(bpy.context.selected_objects))
  940. print("LOC_MODE: %d objects" % len(bpy.context.selected_objects))
  941. if self.LRt == 1: # положение и вращение
  942. locrot()
  943. self.LRt = 0
  944. self.report({'INFO'}, "COMB_MODE:I found %d objects" % len(bpy.context.selected_objects))
  945. print("COMB_MODE: %d objects" % len(bpy.context.selected_objects))
  946. return {"FINISHED"}
  947.  
  948.  
  949. ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
  950.  
  951. class AUTPanel(bpy.types.Panel):
  952.  
  953. bl_label = "AP"
  954. bl_space_type = 'VIEW_3D'
  955. bl_region_type = 'UI'
  956.  
  957. #-----> """menu Draw Render & Simply"""
  958. def draw_header(self, context):
  959. #-----> """buttom simplify"""
  960. rd = context.scene.render
  961. view = context.space_data
  962. # sympli On_Off
  963. self.layout.prop(rd, "use_simplify",text="",
  964. icon='POSE_HLT' if bpy.context.scene.render.use_simplify == True else 'ARMATURE_DATA'
  965. )
  966. #-----> """buttom RenderView"""
  967. # ViewRender On_Off
  968. self.layout.prop(view, "show_only_render", text="",
  969. icon='RESTRICT_VIEW_OFF' if bpy.context.space_data.show_only_render == True else 'RESTRICT_VIEW_ON'
  970. )
  971. self.layout.prop(view, "use_matcap", text="",
  972. icon='MATCAP_01' if bpy.context.space_data.use_matcap == True else 'SOLID'
  973. )
  974. rdm = 1
  975. bpy.context.space_data.matcap_icon = '0'+'%s' %rdm
  976. # SSAO
  977. view = context.space_data
  978. scene = context.scene
  979. gs = scene.game_settings
  980. obj = context.object
  981. fx_settings = view.fx_settings
  982.  
  983. self.layout.prop(fx_settings, "use_ssao", text="",
  984. icon='LINK' if fx_settings.use_ssao else 'INLINK'
  985. )
  986. #-----> """Draw subdiwision menu"""s
  987. def draw(self, context):
  988. layout = self.layout
  989. rd = context.scene.render # shade menu ))
  990. # layout.active = rd.use_simplify
  991. split = layout.split()
  992. col = split.column()
  993. if bpy.context.scene.render.use_simplify == True:
  994. col.prop(rd, "simplify_subdivision", text="Subdivision")
  995. col = split.column(align=True)
  996.  
  997. # if bpy.context.scene.render.use_simplify == True:
  998. #-----> """WIRE_ZONE"""
  999. layout = self.layout
  1000. obj = bpy.context.object
  1001. # ПОКА ОСТАВИТЬ ЭТОТ КУСОК ДЛЯ ДАЛЬНЕЙШЕГО РАЗБИРАТЕЛЬСТВА С ОШИБКАМИ!!!
  1002. if obj:
  1003. obj_type = obj.type
  1004. is_geometry = (obj_type in {'MESH', 'CURVE', 'SURFACE', 'META', 'FONT'})
  1005. is_wire = (obj_type in {'CAMERA', 'EMPTY'})
  1006. is_empty_image = (obj_type == 'EMPTY' and obj.empty_draw_type == 'IMAGE')
  1007. is_dupli = (obj.dupli_type != 'NONE')
  1008. split = layout.split()
  1009. col = split.column()
  1010. col.prop(obj, "draw_type", text="")
  1011. col = split.column(align=True)
  1012. # Makes no sense for cameras, armatures, etc.!
  1013. # but these settings do apply to dupli instances
  1014. if is_geometry or is_dupli:
  1015. col.prop(obj, "show_wire", text="W",) # text="Wire"
  1016. col = split.column(align=True)
  1017. if obj_type == 'MESH' or is_dupli:
  1018. col.prop(obj, "show_all_edges", text="A")
  1019. col = split.column(align=True)
  1020. if is_geometry:
  1021. col.prop(obj, "show_x_ray", text="X") # text="X-Ray"
  1022. #-----> """Draw SSAO menu"""
  1023. view = context.space_data
  1024. scene = context.scene
  1025. gs = scene.game_settings
  1026. obj = context.object
  1027. fx_settings = view.fx_settings
  1028. if view.viewport_shade not in {'BOUNDBOX', 'WIREFRAME'}:
  1029. sub = col.column()
  1030. sub.active = view.region_3d.view_perspective == 'CAMERA'
  1031. if fx_settings.use_ssao:
  1032. ssao_settings = fx_settings.ssao
  1033. col.column(align=True)
  1034. subcol = split.column(align=True)
  1035. subcol.prop(ssao_settings, "factor")
  1036. subcol = split.column(align=True)
  1037. subcol.prop(ssao_settings, "distance_max")
  1038. subcol = split.column(align=True)
  1039. subcol.prop(ssao_settings, "samples")
  1040.  
  1041. #-----> """Draw AUTO menu"""
  1042. row = layout.row()
  1043. layout = self.layout
  1044. split = layout.split()
  1045. col = split.column(align=True)
  1046. slct = bpy.context.selected_objects
  1047. edm = bpy.context.mode
  1048. ob = context.object
  1049. if edm != 'SCULPT':
  1050. col.operator("scene.autorend", text="RL", icon="RENDERLAYERS")
  1051. col = split.column(align=True)
  1052. col.operator("scene.kursor", text="XYZ", icon="CURSOR")
  1053. col = split.column(align=True)
  1054. col.operator("scene.test", text="TST", icon="RADIO")
  1055. split = layout.split()
  1056. col = split.column(align=True)
  1057. try:
  1058. tp = bpy.context.selected_objects[0].type
  1059. except IndexError:
  1060. tp = 0
  1061. if edm == 'SCULPT':
  1062. split = layout.split()
  1063. col = split.column(align=True)
  1064.  
  1065. # Name Brush
  1066. aname = bpy.context.scene.tool_settings.sculpt.brush.name
  1067. # Create a pattern brush in quotes
  1068. Btool = "%s" % aname + ""
  1069. if tp != 'EMPTY' and edm!='EDIT_MESH':
  1070. col.operator("scene.scdint", text="DIN" if edm != 'SCULPT' else Btool,
  1071. icon="BRUSH_FILL" if edm != 'SCULPT' else 'SCULPTMODE_HLT')
  1072. if slct != []:
  1073. if tp != 'EMPTY' and edm != 'SCULPT' and edm!='EDIT_MESH':
  1074. col.operator("scene.normshow", text="Nout", icon="INLINK")
  1075. col.operator("scene.grpnmimts", text="Gruop", icon="GROUP")
  1076. nmc=bpy.context.selected_objects[0].name
  1077. col.operator("scene.changobj", text='Co' , icon="OUTLINER_DATA_META")
  1078. col.operator("scene.crlwo", text='CW' , icon="MESH_TORUS")
  1079. if slct != []:
  1080. col = split.column(align=True)
  1081. if tp == 'EMPTY':
  1082. # col = split.column(align=True)
  1083. layout.operator("scene.rempty", text="Name", icon="OUTLINER_OB_EMPTY")
  1084. layout.operator("scene.crlwo", text='CW' , icon="MESH_TORUS")
  1085. if ob.dupli_type == 'GROUP':
  1086. layout.prop(ob, "dupli_group", text="Group")
  1087. if slct != [] and edm == 'OBJECT':
  1088. if tp != 'EMPTY':
  1089. col.operator("scene.rscnrm", text="Restore", icon="MESH_ICOSPHERE")
  1090. row = layout.row(align=True)
  1091. col.operator("scene.sdup", text="SRCH", icon="MOD_ARRAY")
  1092. col.operator("scene.apjion", text="JO", icon="OBJECT_DATAMODE")
  1093. col.operator("scene.robject", text="Rot&Dub", icon="FORCE_VORTEX")
  1094. col.operator("scene.bup", text="BUP", icon="MOD_BEVEL")
  1095. if slct == []:
  1096. col.operator("scene.crlwo", text='CW' , icon="MESH_TORUS")
  1097. #-----> """Block EDIT_MESH"""
  1098. if edm == 'EDIT_MESH':
  1099. # split = layout.split(percentage=0.0, align=True)
  1100. col.operator("scene.rscnrm", text="Restore", icon="MESH_ICOSPHERE")
  1101. col = split.column(align=True)
  1102. col.operator("scene.bvln", text="Bv | |", icon="EDGESEL")
  1103. col = split.column(align=True)
  1104. col.operator("scene.bvlntwo", text="Bv ==", icon="EDGESEL")
  1105. col = split.column(align=True)
  1106. col.operator("scene.dissol", text="DS", icon="SNAP_VERTEX")
  1107. col = split.column(align=True)
  1108. col.operator("scene.bup", text="BUP", icon="MOD_BEVEL")
  1109.  
  1110. #-----> """End"""
  1111.  
  1112. def register():
  1113. bpy.utils.register_class(SDUP)
  1114. bpy.utils.register_class(Crlwo)
  1115. bpy.utils.register_class(Robject)
  1116. bpy.utils.register_class(TEST)
  1117. bpy.utils.register_class(kurs)
  1118. bpy.utils.register_class(AUTPanel)
  1119. bpy.utils.register_class(SculptMyDint)
  1120. bpy.utils.register_class(OpsRenderLrs)
  1121. bpy.utils.register_class(GruopForNameItems)
  1122. bpy.utils.register_class(App_NmLink_ToEmpty)
  1123. bpy.utils.register_class(Sacle_Nrml)
  1124. bpy.utils.register_class(BVLn2)
  1125. bpy.utils.register_class(normshow)
  1126. bpy.utils.register_class(AplyJion)
  1127. bpy.utils.register_class(dissol)
  1128. bpy.utils.register_class(changobj)
  1129. bpy.utils.register_class(BVLnSingl)
  1130. bpy.utils.register_class(B_UP)
  1131.  
  1132. def unregister():
  1133. bpy.utils.unregister_class(B_UP)
  1134. bpy.utils.unregister_class(BVLnSingl)
  1135. bpy.utils.unregister_class(changobj)
  1136. bpy.utils.unregister_class(dissol)
  1137. bpy.utils.unregister_class(AplyJion)
  1138. bpy.utils.unregister_class(normshow)
  1139. bpy.utils.unregister_class(BVLn2)
  1140. bpy.utils.unregister_class(Sacle_Nrml)
  1141. bpy.utils.unregister_class(App_NmLink_ToEmpty)
  1142. bpy.utils.unregister_class(GruopForNameItems)
  1143. bpy.utils.unregister_class(OpsRenderLrs)
  1144. bpy.utils.unregister_class(SculptMyDint)
  1145. bpy.utils.unregister_class(AUTPanel)
  1146. bpy.utils.unregister_class(kurs)
  1147. bpy.utils.unregister_class(TEST)
  1148. bpy.utils.unregister_class(Robject)
  1149. bpy.utils.unregister_class(Crlwo)
  1150. bpy.utils.unregister_class(SDUP)
  1151.  
  1152. if __name__ == "__main__":
  1153. register()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement