def update_info(self, event=None): s, t, w, h, clean_s, clean_t = sculpty.map_size( self.x_faces.get(), self.y_faces.get(), self.levels.get()) self.info_frame.config(text="Map Size - %d x %d" % (w, h)) self.info_text.set(sculpty.lod_info(w, h)[:-1]) if sculpty.check_clean(w, h, self.x_faces.get(), self.y_faces.get(), self.clean_lods.get()): self.clean_lods_input.configure( background=gui.theme.others['panel'], foreground=gui.theme.defaults['foreground']) pow2 = [2, 4, 8, 16, 32, 64, 128, 256] if self.x_faces.get() in pow2 and self.y_faces.get() in pow2: self.clean_lods_input.configure(state=DISABLED) else: self.clean_lods_input.configure(state=NORMAL) else: self.clean_lods_input.configure( background=gui.theme.defaults['foreground'], foreground=gui.theme.others['panel'], state=NORMAL) if self.shape_name.get() not in ['Plane', 'Hemi']: if self.x_faces.get() < 3: clean_s = False self.create_button.configure(state=DISABLED) if self.y_faces.get() < 3: clean_t = False self.create_button.configure(state=DISABLED) elif self.x_faces.get() > 2: self.create_button.configure(state=NORMAL) else: self.create_button.configure(state=NORMAL) if clean_s and clean_t: self.levels_input.configure( background=gui.hex_color(gui.theme.ui.textfield), foreground=gui.theme.defaults['foreground']) else: self.levels_input.configure( background=gui.theme.defaults['foreground'], foreground=gui.hex_color(gui.theme.ui.textfield)) if clean_s: self.x_faces_input.configure( background=gui.hex_color(gui.theme.ui.textfield), foreground=gui.theme.defaults['foreground']) else: self.x_faces_input.configure( background=gui.theme.defaults['foreground'], foreground=gui.hex_color(gui.theme.ui.textfield)) if clean_t: self.y_faces_input.configure( background=gui.hex_color(gui.theme.ui.textfield), foreground=gui.theme.defaults['foreground']) else: self.y_faces_input.configure( background=gui.theme.defaults['foreground'], foreground=gui.hex_color(gui.theme.ui.textfield))
def update_info(self, event=None): s, t, w, h, clean_s, clean_t = sculpty.map_size(self.x_faces.get(), self.y_faces.get(), self.levels.get()) self.info_frame.config(text="Map Size - %d x %d" % (w, h)) self.info_text.set(sculpty.lod_info(w, h)[:-1]) if sculpty.check_clean(w, h, self.x_faces.get(), self.y_faces.get(), self.clean_lods.get()): self.clean_lods_input.configure( background=gui.theme.others["panel"], foreground=gui.theme.defaults["foreground"] ) pow2 = [2, 4, 8, 16, 32, 64, 128, 256] if self.x_faces.get() in pow2 and self.y_faces.get() in pow2: self.clean_lods_input.configure(state=DISABLED) else: self.clean_lods_input.configure(state=NORMAL) else: self.clean_lods_input.configure( background=gui.theme.defaults["foreground"], foreground=gui.theme.others["panel"], state=NORMAL ) if self.shape_name.get() not in ["Plane", "Hemi"]: if self.x_faces.get() < 3: clean_s = False self.create_button.configure(state=DISABLED) if self.y_faces.get() < 3: clean_t = False self.create_button.configure(state=DISABLED) elif self.x_faces.get() > 2: self.create_button.configure(state=NORMAL) else: self.create_button.configure(state=NORMAL) if clean_s and clean_t: self.levels_input.configure( background=gui.hex_color(gui.theme.ui.textfield), foreground=gui.theme.defaults["foreground"] ) else: self.levels_input.configure( background=gui.theme.defaults["foreground"], foreground=gui.hex_color(gui.theme.ui.textfield) ) if clean_s: self.x_faces_input.configure( background=gui.hex_color(gui.theme.ui.textfield), foreground=gui.theme.defaults["foreground"] ) else: self.x_faces_input.configure( background=gui.theme.defaults["foreground"], foreground=gui.hex_color(gui.theme.ui.textfield) ) if clean_t: self.y_faces_input.configure( background=gui.hex_color(gui.theme.ui.textfield), foreground=gui.theme.defaults["foreground"] ) else: self.y_faces_input.configure( background=gui.theme.defaults["foreground"], foreground=gui.hex_color(gui.theme.ui.textfield) )
def add(self): Blender.Window.WaitCursor(1) editmode = Blender.Window.EditMode() if editmode: Blender.Window.EditMode(0) name = self.shape_name.get() basename = name.split(os.sep)[-1] if self.shape_file: baseimage = Blender.Image.Load(self.shape_file) sculpt_type = sculpty.map_type(baseimage) else: sculpt_type = name.upper() baseimage = None gui.debug(11, "Add sculptie (%s) of type %s" % (name, sculpt_type), SCRIPT) scene = Blender.Scene.GetCurrent() for ob in scene.objects: ob.sel = False try: mesh = sculpty.new_mesh( basename, sculpt_type, self.x_faces.get(), self.y_faces.get(), self.levels.get(), self.clean_lods.get(), min(0.5, max(self.radius.get(), 0.05)), ) s, t, w, h, clean_s, clean_t = sculpty.map_size(self.x_faces.get(), self.y_faces.get(), self.levels.get()) image = create_new_image(basename, w, h, 32) # print "add_mesh_sculpt_mesh: Packed image", image.getName() sculpty.bake_lod(image) ob = scene.objects.new(mesh, basename) mesh.flipNormals() ob.sel = True ob.setLocation(Blender.Window.GetCursorPos()) sculpty.set_map(mesh, image) if baseimage: sculpty.update_from_map(mesh, baseimage) if self.levels.get(): if self.sub_type.get(): mods = ob.modifiers mod = mods.append(Blender.Modifier.Types.SUBSURF) mod[Blender.Modifier.Settings.LEVELS] = self.levels.get() mod[Blender.Modifier.Settings.RENDLEVELS] = self.levels.get() mod[Blender.Modifier.Settings.UV] = False if not self.subdivision.get(): mod[Blender.Modifier.Settings.TYPES] = 1 else: mesh.multires = True mesh.addMultiresLevel(self.levels.get(), ("simple", "catmull-clark")[self.subdivision.get()]) mesh.sel = True if self.subdivision.get(): for f in mesh.faces: f.smooth = True # adjust scale for subdivision minimum, maximum = sculpty.get_bounding_box(ob) x = 1.0 / (maximum.x - minimum.x) y = 1.0 / (maximum.y - minimum.y) try: z = 1.0 / (maximum.z - minimum.z) except: z = 0.0 if sculpt_type == "TORUS Z": z = min(0.5, max(self.radius.get(), 0.05)) * z elif sculpt_type == "TORUS X": x = min(0.5, max(self.radius.get(), 0.05)) * x elif sculpt_type == "HEMI": z = 0.5 * z tran = Blender.Mathutils.Matrix([x, 0.0, 0.0], [0.0, y, 0.0], [0.0, 0.0, z]).resize4x4() mesh.transform(tran) # align to view try: quat = None if Blender.Get("add_view_align"): quat = Blender.Mathutils.Quaternion(Blender.Window.GetViewQuat()) if quat: mat = quat.toMatrix() mat.invert() mat.resize4x4() ob.setMatrix(mat) except: pass if self.save_settings.get() or self.save_defaults.get(): settings = { "x_faces": self.x_faces.get(), "y_faces": self.y_faces.get(), "levels": self.levels.get(), "subdivision": self.subdivision.get(), "sub_type": self.sub_type.get(), "clean_lods": self.clean_lods.get(), "radius": self.radius.get(), "shape_name": self.shape_name.get(), "shape_file": self.shape_file, "quads": self.quads.get(), "save": self.save_settings.get(), } Blender.Registry.SetKey(REGISTRY, settings, self.save_defaults.get()) except RuntimeError: raise Blender.Window.EditMode(editmode) Blender.Window.WaitCursor(0) self.master.quit()
def add(self): Blender.Window.WaitCursor(1) editmode = Blender.Window.EditMode() if editmode: Blender.Window.EditMode(0) name = self.shape_name basename = name.split(os.sep)[-1] if self.shape_file: baseimage = Blender.Image.Load(self.shape_file) sculpt_type = sculpty.map_type(baseimage) else: sculpt_type = name.upper() baseimage = None gui.debug(11, "Add sculptie (%s) of type %s" % (name, sculpt_type), "add_mesh_sculpt_mesh") scene = Blender.Scene.GetCurrent() for ob in scene.objects: ob.sel = False try: mesh = sculpty.new_mesh(basename, sculpt_type, self.x_faces, self.y_faces, self.levels, self.clean_lods, min(0.5, max(self.radius, 0.05))) s, t, w, h, clean_s, clean_t = sculpty.map_size(self.x_faces, self.y_faces, self.levels) image = create_new_image(basename, w, h, 32) sculpty.bake_lod(image) ob = scene.objects.new(mesh, basename) mesh.flipNormals() ob.sel = True ob.setLocation(Blender.Window.GetCursorPos()) sculpty.set_map(mesh, image) if baseimage: sculpty.update_from_map(mesh, baseimage) if self.levels: if self.sub_type: mods = ob.modifiers mod = mods.append(Blender.Modifier.Types.SUBSURF) mod[Blender.Modifier.Settings.LEVELS] = self.levels mod[Blender.Modifier.Settings.RENDLEVELS] = self.levels mod[Blender.Modifier.Settings.UV] = False if not self.subdivision: mod[Blender.Modifier.Settings.TYPES] = 1 else: mesh.multires = True mesh.addMultiresLevel(self.levels, ('simple', 'catmull-clark')[self.subdivision]) mesh.sel = True if self.subdivision: for f in mesh.faces: f.smooth = True # adjust scale for subdivision minimum, maximum = sculpty.get_bounding_box(ob) x = 1.0 / (maximum.x - minimum.x) y = 1.0 / (maximum.y - minimum.y) try: z = 1.0 / (maximum.z - minimum.z) except: z = 0.0 if sculpt_type == "TORUS Z": z = min(0.5, max(self.radius, 0.05)) * z print "Create a Torus Z with radius ", z elif sculpt_type == "TORUS X": x = min(0.5, max(self.radius, 0.05)) * x print "Create a Torus X with radius ", x elif sculpt_type == "HEMI": z = 0.5 * z tran = Blender.Mathutils.Matrix([x, 0.0, 0.0], [0.0, y, 0.0], [0.0, 0.0, z]).resize4x4() mesh.transform(tran) # align to view try: quat = None if Blender.Get('add_view_align'): quat = Blender.Mathutils.Quaternion( Blender.Window.GetViewQuat()) if quat: mat = quat.toMatrix() mat.invert() mat.resize4x4() ob.setMatrix(mat) except: pass except RuntimeError: raise Blender.Window.EditMode(editmode) Blender.Window.WaitCursor(0) return ob
def update_info(self, event=None): s, t, w, h, clean_s, clean_t = sculpty.map_size(self.x_faces, self.y_faces, self.levels)
def add(self): Blender.Window.WaitCursor(1) name = self.map_type.cget('text') if name[:1] == os.sep: basename = name.split(os.sep)[1] baseimage = Blender.Image.Load(os.path.join(sculpty.lib_dir, name[1:]) + '.png') sculpt_type = sculpty.map_type(baseimage) else: basename = name sculpt_type = name.upper() baseimage = None print "Create a [", name, "] of type ", sculpt_type scene = Blender.Scene.GetCurrent() for ob in scene.objects: ob.sel = False try: mesh = sculpty.new_mesh( basename,sculpt_type, self.x_faces.get(), self.y_faces.get(), self.levels.get(), self.clean_lods.get(), 0.25) #todo: 0.25 radius needs gui add.. s, t, w, h, clean_s, clean_t = sculpty.map_size(self.x_faces.get(), self.y_faces.get(), self.levels.get()) image = Blender.Image.New(basename, w, h, 32) sculpty.bake_lod(image) ob = scene.objects.new(mesh, basename) mesh.flipNormals() ob.sel = True ob.setLocation(Blender.Window.GetCursorPos()) sculpty.set_map(mesh, image) if baseimage: sculpty.update_from_map(mesh, baseimage) if self.levels.get(): if self.sub_type.get(): mods = ob.modifiers mod = mods.append(Blender.Modifier.Types.SUBSURF) mod[Blender.Modifier.Settings.LEVELS] = self.levels.get() mod[Blender.Modifier.Settings.RENDLEVELS] = self.levels.get() mod[Blender.Modifier.Settings.UV] = False if not self.subdivision.get(): mod[Blender.Modifier.Settings.TYPES] = 1 else: mesh.multires = True mesh.addMultiresLevel(self.levels.get(), ('simple', 'catmull-clark')[self.subdivision.get()]) mesh.sel = True # adjust scale for subdivision minimum, maximum = sculpty.get_bounding_box(ob) x = 1.0 / (maximum.x - minimum.x) y = 1.0 / (maximum.y - minimum.y) try: z = 1.0 / (maximum.z - minimum.z) except: z = 0.0 if sculpt_type == "TORUS": z = 0.25 * z #todo: radius again elif sculpt_type == "HEMI": z = 0.5 * z tran = Blender.Mathutils.Matrix([ x, 0.0, 0.0 ], [0.0, y, 0.0], [0.0, 0.0, z]).resize4x4() mesh.transform(tran) # align to view try: quat = None if Blender.Get('add_view_align'): quat = Blender.Mathutils.Quaternion(Blender.Window.GetViewQuat()) if quat: mat = quat.toMatrix() mat.invert() mat.resize4x4() ob.setMatrix(mat) except: pass except RuntimeError: #todo tkinter this Blender.Draw.PupBlock("Unable to create sculptie", ["Please decrease face counts","or subdivision levels"]) Blender.Window.WaitCursor(0) self.master.quit() # self.master.destroy() makes blender crash occasionally (thread problems)
def add_sculptie( sculpt_type, faces_x=8, faces_y=8, multires=2, clean_lods=True, subsurf=False, catmull=True ): Blender.Window.WaitCursor(1) basename = ("Sphere", "Torus", "Plane", "Cylinder", "Hemi")[sculpt_type -1] scene = Blender.Scene.GetCurrent() for ob in scene.objects: ob.sel = False rdict = Blender.Registry.GetKey('ImportSculptie', True) # True to check on disk also if rdict: # if found, get the values saved there try: settings['radius'] = rdict['radius'] except: settings['radius'] = 0.25 if sculpt_type == TORUS: radius = Blender.Draw.Create( settings['radius'] ) Blender.Window.WaitCursor(0) retval = Blender.Draw.PupBlock( "Torus Options", [( "Radius: ", radius, 0.05, 0.5 )] ) Blender.Window.WaitCursor(1) settings['radius'] = radius.val Blender.Registry.SetKey('ImportSculptie', settings, True) # save latest settings mesh = sculpty.new_mesh( basename, ["none","SPHERE","TORUS","PLANE","CYLINDER","HEMI"][sculpt_type], faces_x, faces_y, multires, clean_lods, settings['radius']) s, t, w, h, clean_s, clean_t = sculpty.map_size( faces_x, faces_y, multires ) image = Blender.Image.New( basename, w, h, 32 ) sculpty.bake_lod(image) ob = scene.objects.new( mesh, basename ) if sculpt_type != PLANE: mesh.flipNormals() ob.sel = True ob.setLocation( Blender.Window.GetCursorPos() ) if sculpt_type == PLANE: mesh.flipNormals() sculpty.set_map( mesh, image ) if multires: if subsurf: mods = ob.modifiers mod = mods.append(Blender.Modifier.Types.SUBSURF) mod[Blender.Modifier.Settings.LEVELS] = multires mod[Blender.Modifier.Settings.RENDLEVELS] = multires mod[Blender.Modifier.Settings.UV] = False if not catmull: mod[Blender.Modifier.Settings.TYPES] = 1 else: mesh.multires = True mesh.addMultiresLevel(multires, ('simple', 'catmull-clark')[catmull]) mesh.sel = True # adjust scale for subdivision minimum, maximum = sculpty.get_bounding_box( ob ) x = 1.0 / (maximum.x - minimum.x) y = 1.0 / (maximum.y - minimum.y) try: z = 1.0 / (maximum.z - minimum.z) except: z = 0.0 if sculpt_type == TORUS: z = settings['radius'] * z elif sculpt_type == HEMI: z = 0.5 * z tran = Blender.Mathutils.Matrix( [ x, 0.0, 0.0 ], [0.0, y, 0.0], [0.0, 0.0, z] ).resize4x4() mesh.transform( tran ) # align to view try: quat = None if Blender.Get('add_view_align'): quat = Blender.Mathutils.Quaternion(Blender.Window.GetViewQuat()) if quat: mat = quat.toMatrix() mat.invert() mat.resize4x4() ob.setMatrix(mat) except: pass Blender.Window.WaitCursor(0) return ob