def assign_new_image(ob, could_be_mirror=False): mesh = ob.getData(False, True) name = ob.getName() activeUV = mesh.activeUVLayer mesh.activeUVLayer = "sculptie" image = mesh.faces[0].image try: width = image.getSize()[0] height = image.getSize()[1] except: if image == None: print "No image data available for object", name else: print "Can not get image data from object", name,"image",image.getName() print "Need to Resculptify object ..." sculptify(ob, force_new_image=True) mesh = ob.getData(False, True) image = mesh.faces[0].image #print "image",sel.name,"is assigned to ", ob.getName() #print "Resculptify created image", image.name, "of type", image.source if could_be_mirror: adjust_image_name(ob,image) return image object_name = ob.getName().split(os.sep)[-1] new_image = create_new_image(object_name, width, height, 32) selected_verts = mesh.verts.selected() mesh.sel = True set_map(mesh, new_image) mesh.sel = False for i in selected_verts: mesh.verts[i].sel=1 mesh.update() mesh.activeUVLayer = activeUV if could_be_mirror: adjust_image_name(ob,new_image) print "assign_new_image()ob.name:",ob.name,"new_image:",new_image.name return new_image
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) 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(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 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