Example #1
0
def addCustomScriptLink():
    """
	Adds a custom script link to the scene so that all script
	windows are redrawn whenever the scene is redrawn.
	"""

    txt = Text.New(SCRIPTLINK_NAME)
    txt.write('import Blender\n')
    txt.write('from Blender import Window\n')
    txt.write('Window.Redraw(Window.Types.SCRIPT)\n')
    Scene.GetCurrent().addScriptLink(SCRIPTLINK_NAME, 'Redraw')

    # do a full scene update
    Scene.GetCurrent().update(1)
Example #2
0
    def __init__(self, scene=None, objects=None):
        self.scene = None
        self.objects = None

        try:
            self.scene = Scene.Get(scene)
            self.objects = self.scene.objects
        except (NameError, TypeError):
            pass

        if type(scene) == type(Scene.GetCurrent()):
            self.scene = scene

        if objects:
            self.objects = objects
Example #3
0
def load_point_set(filename):
    """Read a point set and duplicate
	obj for each location.
	
	Insert every created object in sc
	"""
    Window.WaitCursor(True)

    sc = Scene.GetCurrent()
    ref_obj = sc.getActiveObject()

    #unselect everything except ref
    for obj in Object.GetSelected():
        obj.sel = 0

    ref_obj.sel = 1

    #read points
    pts = load(open(filename, 'rb'))

    for pid, vec in pts.iteritems():
        Object.Duplicate()
        obj = sc.getActiveObject()
        obj.setLocation(*vec)

    #return
    Window.RedrawAll()
Example #4
0
 def delRegion(self, img):
     r = self.isRegion(img)
     if not r: return False
     (n, x1, y1, width, height) = r
     mesh = self.obj.getData(mesh=True)
     panelimage = mesh.faces[0].image
     try:
         (pwidth, pheight) = panelimage.size
         xoff = float(x1) / pwidth
         yoff = float(y1) / pheight
         xscale = float(width) / pwidth
         yscale = float(height) / pheight
     except:
         xoff = yoff = 0
         xscale = yscale = 1
     # Reassign UV mappings back to panel image
     for obj in Scene.GetCurrent().objects:
         if obj != self.obj and obj.getType() == "Mesh":
             mesh2 = obj.getData(mesh=True)
             if mesh2.faceUV:
                 for face in mesh2.faces:
                     if face.image == img:
                         face.image = panelimage
                         face.uv = [
                             Vector(
                                 [xoff + v.x * xscale, yoff + v.y * yscale])
                             for v in face.uv
                         ]
             mesh2.update()
     mesh.faces[n].image = panelimage
     img.reload()  # blank old region
     self.obj.removeProperty('x%d' % n)
     self.obj.removeProperty('y%d' % n)
     return True
Example #5
0
def main():
    scn = Scene.GetCurrent()
    if not scn.objects.context:
        return

    PREF_LOC = Draw.Create(0.0)
    PREF_SIZE = Draw.Create(0.0)
    PREF_ROT = Draw.Create(0.0)
    PREF_LINK_AXIS = Draw.Create(0)
    PREF_X_AXIS = Draw.Create(1)
    PREF_Y_AXIS = Draw.Create(1)
    PREF_Z_AXIS = Draw.Create(1)

    pup_block = [\
    ('loc:', PREF_LOC, 0.0, 100.0, 'Amount to randomize the location'),\
    ('size:', PREF_SIZE, 0.0, 100.0,  'Amount to randomize the size'),\
    ('rot:', PREF_ROT, 0.0, 360.0, 'Amount to randomize the rotation'),\
    '',\
    ('Link Axis', PREF_LINK_AXIS, 'Use the same random value for each objects XYZ'),\
    ('X Axis', PREF_X_AXIS, 'Enable X axis randomization'),\
    ('Y Axis', PREF_Y_AXIS, 'Enable Y axis randomization'),\
    ('Z Axis', PREF_Z_AXIS, 'Enable Z axis randomization'),\
    ]

    if not Draw.PupBlock('Object Randomize', pup_block):
        return

    randomize(scn.objects.context, PREF_LOC.val, PREF_SIZE.val, PREF_ROT.val,
              PREF_LINK_AXIS.val, PREF_X_AXIS.val, PREF_Y_AXIS.val,
              PREF_Z_AXIS.val)
Example #6
0
def assign_all_objects_to_layer(layer):
    scn = Scene.GetCurrent()

    for ob in scn.objects:
        ob.layers = [
            layer,
        ]
Example #7
0
    def layer_objects_constraint(root_layout):
        object_filter = ObjectFilter(scene=Scene.GetCurrent())
        layers = root_layout.find_child(name='layers')

        assign_all_objects_to_layer(layer=20)

        for layer in layers.children:
            filtered_objects = None
            filters = layer.find_child(name='filters')
            layer_number = layer.find_child(name='layer_number')

            for child in filters.children:
                if child.name == 'filter':
                    filter_type = child.find_child(name='filter_type')
                    filter_name = child.find_child(name='filter_name')

                    if filter_type.value == 1:
                        print 'filter data'
                        filtered_objects = object_filter.data(
                            filter_name.value)
                    if filter_type.value == 2:
                        print 'filter name. TO BE IMPLEMENTED'
                        #filtered_objects = object_filter.name_is(filter_name.value)
                    if filter_type.value == 3:
                        print 'filter group. TO BE IMPLEMENTED'

            try:
                for ob in filtered_objects:
                    layers = ob.layers
                    layers.append(int(layer_number.label))
                    ob.layers = layers
            except TypeError:
                pass
Example #8
0
def main():
    scn = Scene.GetCurrent()
    ob = scn.objects.active

    if not ob or ob.type != 'Mesh':
        Draw.PupMenu('Error, no active mesh object, aborting.')
        return

    me = ob.getData(mesh=1)

    PREF_PEAKWEIGHT = Draw.Create(1.0)
    PREF_ACTIVE_ONLY = Draw.Create(1)
    PREF_KEEP_PROPORTION = Draw.Create(1)
    PREF_ARMATURE_ONLY = Draw.Create(0)

    pup_block= [\
    ('Peak Weight:', PREF_PEAKWEIGHT, 0.01, 1.0, 'Upper weight for normalizing.'),\
    ('Active Only', PREF_ACTIVE_ONLY, 'Only Normalize groups that have matching bones in an armature (when an armature is used).'),\
    ('Proportional', PREF_KEEP_PROPORTION, 'Scale other weights so verts (Keep weights with other groups in proportion).'),\
    ('Armature Only', PREF_ARMATURE_ONLY, 'Only Normalize groups that have matching bones in an armature (when an armature is used).'),\
    ]

    if not Draw.PupBlock('Clean Selected Meshes...', pup_block):
        return

    actWeightNormalize(me, ob, PREF_PEAKWEIGHT.val, PREF_ACTIVE_ONLY.val,
                       PREF_ARMATURE_ONLY.val, PREF_KEEP_PROPORTION.val)
Example #9
0
def main(param_file):
    Window.WaitCursor(1)
    
    camera_parameters = load_camera(param_file)

    emode = int(Window.EditMode())
    if emode: Window.EditMode(0)

    scene = Scene.GetCurrent()
    camera_data = create_camera(camera_parameters)
    scene.objects.new(camera_data)
    camera = Object.Get(camera_data.name)
    pose_camera(camera,  camera_parameters)
    scene.objects.camera = camera
    
    context = scene.getRenderingContext()
    context.imageSizeX(int(camera_parameters.getroot().get('Width')))
    context.imageSizeY(int(camera_parameters.getroot().get('Height')))

    scene.update()
    Window.RedrawAll()

    if emode: Window.EditMode(1)

    Window.WaitCursor(0)
def write(filename, objects):
    def veckey3d(v):
        return round(v.x, 6), round(v.y, 6), round(v.z, 6)

    def veckey2d(v):
        return round(v.x, 6), round(v.y, 6)

    print 'OBJ Export path: "%s"' % filename
    temp_mesh_name = '~tmp-mesh'

    time1 = sys.time()
    scn = Scene.GetCurrent()

    file = open(filename, "w")

    # Write Header
    file.write('# Blender3D v%s EOL Armature File: %s\n' %
               (Blender.Get('version'),
                Blender.Get('filename').split('/')[-1].split('\\')[-1]))
    file.write('# www.blender3d.org\n')

    # Get all armatures
    for ob_main in objects:
        for ob, ob_mat in BPyObject.getDerivedObjects(ob_main):
            write_armature(file, ob)
            write_poses(file, ob)

    file.close()

    print "Armature Export time: %.2f" % (sys.time() - time1)
Example #11
0
def write_poses(file,ob):
	if ob.getType() != "Armature":
		return
	scn = Scene.GetCurrent()
	context = scn.getRenderingContext()
	scene_frames = xrange(context.startFrame(), context.endFrame()+1)
	file.write('framecount %i\n' % len(scene_frames))
	for frame in scene_frames:
		Blender.Set('curframe', frame)
		file.write('frame: %i\n' % frame)
		pose = ob.getPose()
		for b in pose.bones.values():
			file.write('posebone: %s\n' % b.name)
			for i in b.localMatrix:
				file.write('lm: %.6f %.6f %.6f %.6f\n' % tuple(i))
			file.write('scale: %.6f %.6f %.6f\n' % tuple(b.size))
#	file.write('keyframes: %s\n' % ob.name)
#	for ipo in Blender.Ipo.Get():
#		if ipo.getNcurves() == 0:
#			continue
#		# adapted from the ogre 3D exporter
#		# too bad, there is no clean way to get the ipo for a bone :(
#		file.write('Ipo: %s\n' % ipo.name)
#		ipoName = ipo.getName()
#		for c in ipo.curves:
#			file.write('curve type: %s\n' % c.name)
	file.write('\n')
Example #12
0
def main():
    scn = Scene.GetCurrent()
    ob = scn.objects.active

    if not ob or ob.type != 'Mesh':
        Draw.PupMenu('Error, no active mesh object, aborting.')
        return

    me = ob.getData(mesh=1)
    act_group = me.activeGroup

    PREF_NAME = Draw.Create(act_group + '_copy')
    PREF_SEL_ONLY = Draw.Create(0)

    pup_block= [\
    ('', PREF_NAME, 0, 31, 'Name of group copy.'),\
    ('Only Selected', PREF_SEL_ONLY, 'Only include selected faces in the new grop.'),\
    ]

    if not Draw.PupBlock('New Name...', pup_block):
        return
    PREF_NAME = PREF_NAME.val
    PREF_SEL_ONLY = PREF_SEL_ONLY.val
    copy_act_vgroup(me, PREF_NAME, PREF_SEL_ONLY)

    try:
        me.activeGroup = PREF_NAME
    except:
        pass
Example #13
0
def mdd_import_ui(filepath):

    if BPyMessages.Error_NoFile(filepath):
        return

    scn = Scene.GetCurrent()
    ob_act = scn.objects.active

    if ob_act == None or ob_act.type != 'Mesh':
        BPyMessages.Error_NoMeshActive()
        return

    PREF_IPONAME = Blender.Draw.Create(
        filepath.split('/')[-1].split('\\')[-1].split('.')[0])
    PREF_START_FRAME = Blender.Draw.Create(1)
    PREF_JUMP = Blender.Draw.Create(1)

    block = [\
    ("Ipo Name: ", PREF_IPONAME, 0, 30, "Ipo name for the new shape key"),\
    ("Start Frame: ", PREF_START_FRAME, 1, 3000, "Start frame for the animation"),\
    ("Key Skip: ", PREF_JUMP, 1, 100, "KeyReduction, Skip every Nth Frame")\
    ]

    if not Blender.Draw.PupBlock("Import MDD", block):
        return
    orig_frame = Blender.Get('curframe')
    mdd_import(filepath, ob_act, PREF_IPONAME.val, PREF_START_FRAME.val,
               PREF_JUMP.val)
    Blender.Set('curframe', orig_frame)
Example #14
0
def main():
	scn= Scene.GetCurrent()
	ob= scn.objects.active
	
	if not ob or ob.type != 'Mesh':
		Draw.PupMenu('Error, no active mesh object, aborting.')
		return
	
	me= ob.getData(mesh=1)
	
	PREF_MAXDIST= Draw.Create(0.0)
	PREF_STRENGTH= Draw.Create(1.0)
	PREF_MODE= Draw.Create(0)
	PREF_ITERATIONS= Draw.Create(1)
	
	pup_block= [\
	('Bleed Dist:', PREF_MAXDIST, 0.0, 1.0, 'Set a distance limit for bleeding.'),\
	('Bleed Strength:', PREF_STRENGTH, 0.01, 1.0, 'Bleed strength between adjacent verts weight. 1:full, 0:None'),\
	('Iterations', PREF_ITERATIONS, 1, 20, 'Number of times to run the blending calculation.'),\
	('Contract (Shrink)', PREF_MODE, 'Shrink instead of growing.'),\
	]
	
	if not Draw.PupBlock('Grow/Shrink...', pup_block):
		return
	
	actWeightNormalize(me, PREF_MODE.val, PREF_MAXDIST.val, PREF_STRENGTH.val, PREF_ITERATIONS.val)
Example #15
0
def main():

    # Gets the current scene, there can be many scenes in 1 blend file.
    sce = Scene.GetCurrent()

    # Get the active object, there can only ever be 1
    # and the active object is always the editmode object.
    ob_act = sce.objects.active
    me = ob_act.getData(mesh=1)

    if not ob_act or ob_act.type != 'Mesh' or not me.faceUV:
        BPyMessages.Error_NoMeshUvActive()
        return

    # Saves the editmode state and go's out of
    # editmode if its enabled, we cant make
    # changes to the mesh data while in editmode.
    is_editmode = Window.EditMode()
    if is_editmode: Window.EditMode(0)

    Window.WaitCursor(1)

    t = sys.time()

    # Run the mesh editing function
    seams_from_islands(me)

    if is_editmode: Window.EditMode(1)

    # Timing the script is a good way to be aware on any speed hits when scripting
    print 'UV Seams from Islands finished in %.2f seconds' % (sys.time() - t)
    Window.WaitCursor(0)
Example #16
0
def sc_to_blender(sc):
    """Export each shape in the scene as a new object
	
	:Parameters:
	 - `sc` (Scene) - the scene to transform
	
	:Returns Type: None
	"""
    bldsc = Scene.GetCurrent()

    #fill with shapes
    t = time.time()
    d = Discretizer()
    for ind, shp in enumerate(sc):
        if ind % 10 == 0:
            print ind,
            sys.stdout.flush()
        ob = shp_to_blender(shp, d)
        bldsc.link(ob)
        ob.sel = True

    print
    print 'Time :', time.time() - t

    #return
    print "created"
    bldsc.update(1)
    Blender.Redraw()

    return ob
Example #17
0
 def __init__(self):
     self.obj = None
     try:
         self.obj = Object.Get(PanelRegionHandler.NAME)
         # Suppress regeneration of panels in v3.0x
         Scene.GetCurrent().clearScriptLinks(PanelRegionHandler.NAME)
     except:
         pass
def getparents():
    global lookup, hierarchy, firstlevel, has_sim, armature, bones, theobject

    if Window.EditMode():
        objects = [Scene.GetCurrent().objects.active]
    else:
        objects = Object.GetSelected()
    for theobject in objects:
        parent = theobject.parent
        if not parent or parent.getType() != 'Armature':
            Draw.PupMenu('Object "%s" is not a child of a bone.' %
                         theobject.name)
            return None
        bonename = theobject.getParentBoneName()
        if not bonename:
            Draw.PupMenu(
                'Object "%s" is the child of an armature. It should be the child of a bone.'
                % theobject.name)
            return None
        thisbones = parent.getData().bones
        if bonename in thisbones.keys():
            bone = thisbones[bonename]
        else:
            Draw.PupMenu('Object "%s" has a deleted bone as its parent.' %
                         theobject.name)
            return None
        if armature and (parent != armature or bone != bones[0]):
            Draw.PupMenu(
                'You have selected multiple objects with different parents.')
            return None
        else:
            armature = parent
            bones = [bone]

    if not bones: return
    bone = bones[0]
    while bone.parent:
        bones.append(bone.parent)
        bone = bone.parent

    try:
        has_sim = False
        (lookup, hierarchy) = getDatarefs()
        firstlevel = []
        for key in lookup:
            if lookup[key]:
                (path, n) = lookup[key]
                ref = path.split('/')
                if not ref[0] in firstlevel:
                    firstlevel.append(ref[0])
        if len(firstlevel) == 1:
            firstlevel = hierarchy['sim'].keys()
            has_sim = True
        firstlevel.sort(lambda x, y: -cmp(x.lower(), y.lower()))

    except IOError, e:
        Draw.PupMenu(str(e))
        return None
Example #19
0
    def render(self):
        scene = Scene.GetCurrent()
        script = imp.load_source(self.args['script'], self.args['script_path'])
        blender_initializer = script.BlenderInitializer()
        blender_initializer.set_up_render(self.args, scene)

        self.set_up_render_context(scene)

        blender_initializer.clean_up()
Example #20
0
    def addRegion(self, xoff, yoff, width, height):
        mesh = self.obj.getData(mesh=True)
        panelimage = mesh.faces[0].image
        name = 'PanelRegion'
        for img in Image.get():
            # try to re-use existing deleted panel region
            if img.size == [
                    width, height
            ] and img.source == Image.Sources.GENERATED and img.filename == name and not self.isRegion(
                    img):
                break
        else:
            img = Image.New(name, width, height, 24)
        for y in range(height):
            for x in range(width):
                rgba = panelimage.getPixelI(xoff + x, yoff + y)
                if not rgba[3]:
                    img.setPixelI(x, y,
                                  (102, 102, 255, 255))  # hilite transparent
                else:
                    img.setPixelI(x, y, rgba[:3] + [255])
        img.pack()

        for n in range(1, PanelRegionHandler.REGIONCOUNT + 1):
            if mesh.faces[n].image == panelimage:
                mesh.faces[n].image = img
                self.obj.addProperty('x%d' % n, xoff)
                self.obj.addProperty('y%d' % n, yoff)
                (width, height) = img.size
                (pwidth, pheight) = panelimage.size
                xoff = float(xoff) / pwidth
                yoff = float(yoff) / pheight
                xscale = float(pwidth) / width
                yscale = float(pheight) / height
                # Assign UV mappings from panel image
                for obj in Scene.GetCurrent().objects:
                    if obj != self.obj and obj.getType() == "Mesh":
                        mesh2 = obj.getData(mesh=True)
                        if mesh2.faceUV:
                            for face in mesh2.faces:
                                if face.image == panelimage:
                                    uv = []
                                    for v in face.uv:
                                        x = (v.x - xoff) * xscale
                                        y = (v.y - yoff) * yscale
                                        if not -UV.LIMIT <= x <= 1 + UV.LIMIT or not -UV.LIMIT <= y <= 1 + UV.LIMIT:
                                            break
                                        uv.append(
                                            Vector(min(max(x, 0), 1),
                                                   min(max(y, 0), 1)))
                                    else:
                                        face.uv = uv
                                        face.image = img
                            mesh2.update()
                break
        return img
def create_topomesh(filename):
    Window.WaitCursor(True)

    #current object
    sc = Scene.GetCurrent()
    ref_obj = sc.getActiveObject()

    save_topomesh(filename, ref_obj.data)

    Window.RedrawAll()
Example #22
0
def setSubsurf():
    scn = Scene.GetCurrent()  # link object to current scene
    for potential_ob in scn.objects:
        if potential_ob.name == 'myObj':
            ob = potential_ob
            break

    mods = ob.modifiers
    mod = mods.append(Modifier.Types.SUBSURF)
    mod[Modifier.Settings.LEVELS] = 1
    mod[Modifier.Settings.RENDLEVELS] = 2
Example #23
0
 def NewObject(flag):
 	global ob, me, sc
 	if flag == 1: DumpData()
 	DeselectAllObjects()
 	sc = Scene.GetCurrent()
 	cursorpos = Window.GetCursorPos()
 	ob = Object.New('Mesh', 'Cyl_')
 	me = NMesh.New('MyCylMesh')
 	ob.setLocation(cursorpos)
 	ob.link(me)
 	sc.link(ob)
Example #24
0
def act_mesh_ob():
    scn = Scene.GetCurrent()
    ob = scn.objects.active
    if ob == None or ob.type != 'Mesh':
        BPyMessages.Error_NoMeshActive()
        return

    if ob.getData(mesh=1).multires:
        BPyMessages.Error_NoMeshMultiresEdit()
        return

    return ob
Example #25
0
def write_ui(filePath):

    Window.EditMode(0)
    slashPos = filePath.rfind('\\')
    directory = filePath[:slashPos + 1]
    filename = filePath[slashPos + 1:]

    if not filename.lower().endswith('.drk'):
        filename += '.drk'

    if not BPyMessages.Warning_SaveOver(filePath):
        return

    context = Scene.GetCurrent().getRenderingContext()
    orig_frame = Blender.Get('curframe')
    Blender.Set('curframe', context.startFrame())
    write(directory, filename, Scene.GetCurrent().objects)
    Blender.Set('curframe', orig_frame)

    # Restore old active scene.
    Window.WaitCursor(0)
def create_topomesh(filename):
    Window.WaitCursor(True)

    #link to object
    obj = Object.New('Mesh', 'myObj')

    #link to scene
    sc = Scene.GetCurrent()
    sc.link(obj)

    me = load_topomesh(filename, obj)

    Window.RedrawAll()
Example #27
0
def render(path="//myRenderdir/", imageName="001.tga"):
    scn = Scene.GetCurrent()
    context = scn.getRenderingContext()

    Render.EnableDispWin()
    context.extensions = True
    context.renderPath = path
    context.sizePreset(Render.PC)

    context.imageType = Render.TARGA
    context.render()
    context.saveRenderedImage(imageName)
    Render.CloseRenderWindow()
Example #28
0
def loadmodel(file, words, data):
  def nwprop(file, words, data):
    data['nwnprops'].write('SCENE.%s=%s\n'%(words[0], words[1]))
  modeldict={'beginmodelgeom': loadgeometry, 'donemodel': linereaderbreak,
        'classification': nwprop, 'supermodel': nwprop, 'newanim': loadanim}
  data={'scene': Scene.getCurrent(), 'nwnprops': Text.New('nwnprops'),
          'animnextframe': 2, 'nwnanims': Text.New('nwnanims'), 'fps': 30}
  raise ExitLineReader(linereader(file, modeldict, data))
  # Seems I can't modify the frame settings.
  #data['scene'].startFrame(1)
  #data['scene'].currentFrame(1)
  #data['scene'].endFrame(data['animnextframe']-1)
  data['scene'].update()
Example #29
0
def removeCustomScriptLink():
    """
	Removes the custom script link (if it is present) from the
	scene.
	"""

    try:
        txt = Text.Get(SCRIPTLINK_NAME)
    except NameError:  # script link not found
        return

    scene = Scene.GetCurrent()
    slinks = scene.getScriptLinks('Redraw')
    if slinks is not None:
        scene.clearScriptLinks()
        if SCRIPTLINK_NAME in slinks:
            slinks.remove(SCRIPTLINK_NAME)
        for link in slinks:
            scene.addScriptLink(link, 'Redraw')

    Text.unlink(txt)

    # do a full scene update
    Scene.GetCurrent().update(1)
Example #30
0
def export(filename):
    trace("Exporting to file: '" + filename)

    verbose("Configuration:")
    indent()
    verbose("_rotationLimit='%f'" % _rotationLimit)
    verbose("_quaternionWLimit='%f'" % _quaternionWLimit)
    unindent()

    exporter = XamlExporter()
    fileout = open(filename, 'w')
    try:
        exporter.writeScene(Scene.GetCurrent(), fileout)
    finally:
        fileout.close()
Example #31
0
def saveblend():
	"""
	Save the current .blend file as a temporary file.
	@returns: (scn,context,scenename,name)

	scn is the current scene object
	context the current rendering context
	scenename the name of the current scene
	name the name of the temporary file

	@warning: sideeffect: sets displaymode to 0 (=rendering in imagewindow) to
	prevent rendering window popping up
	"""
	Blender.PackAll()
	from tempfile import mkstemp
	fd,name = mkstemp(suffix = '.blend')
	os.close(fd)
	Blender.Set('compressfile',True)
	Blender.Save(name,1)
	scn = Scene.getCurrent()
	scenename = scn.getName()
	context = scn.getRenderingContext()
	context.displayMode=0 #to prevent an additional render window popping up
	return (scn,context,scenename,name)
for line in lines[1:i-1] :
    lineSplit = line.split()
    orientationTimeStamp.append( float(lineSplit[0]) / 1000000000.0 )
    orientationXValues.append( float(lineSplit[1]) )
    orientationYValues.append( float(lineSplit[2]) )
    orientationZValues.append( float(lineSplit[3]) )
for line in lines[i+1:] :
    lineSplit = line.split()
    accelerationTimeStamp.append( float(lineSplit[0]) / 1000000000.0 )
    accelerationXValues.append( float(lineSplit[1]) )
    accelerationYValues.append( float(lineSplit[2]) )
    accelerationZValues.append( float(lineSplit[3]) )

#Create the camera

cur = Scene.getCurrent()

cam = Camera.New('persp')
cam.lens = 35.0
cam.setDrawSize(1.0)
obj = Object.New('Camera')
obj.name = "imported_camera"
obj.link(cam)
cur.link(obj)
cur.setCurrentCamera(obj)

ipo = Blender.Ipo.New('Object','camera_ipo')
obj.setIpo(ipo)

locx = ipo.addCurve('LocX')
locx.setInterpolation('Linear')
Example #33
0
# Get properties from the 'nwnprops' text.
Props.parse()

# Get logging.
logfile = Props.getlogfile()
if logfile:
	openlogfile(logfile)

# Some banner stuff right here...
putlog(NBLog.SPAM, "NeverBlender Blender->MDL export script")
putlog(NBLog.SPAM, "by Urpo Lankinen, 2003")

# Get the scene, and figure out which objects are whose children.
geometry = Props.getgeometry()
if(not geometry):
	scn = Scene.getCurrent()
else:
	putlog(NBLog.INFO, "Getting geometry from %s" % geometry)
	scn = Scene.Get(geometry)
	if(not scn):
		putlog(NBLog.CRITICAL,
		       "Error: Can't find the scene with the geometry.")
		exit
scnobjchilds = SceneHelpers.scenechildren(scn)

# Get the base object name.
model = Props.getbaseobjectname()
putlog(NBLog.INFO, "Base object: %s" % model)
# Some sanity checking...
if not scnobjchilds.has_key(model):
	putlog(NBLog.CRITICAL, 
Example #34
0
    def exporter(self, strNomFichierXML):
        print "----- debut export ----"
        # Récupération du fichier XML à patcher et vérification de son existence
        if not os.path.isfile(strNomFichierXML):
            strM = "Attention|Le fichier XML n'existe pas (%s)" % (strNomFichierXML)
            Draw.PupMenu(strM)
            print strM
            return

            # Récupération de réglages complémentaires
        EXPORT_FICHIERS_OBJ_VISU = Draw.Create(0)
        EXPORT_FICHIERS_OBJ_COLLISION = Draw.Create(0)

        # Récupération des options de l'utilisateur
        pup_block = []
        pup_block.append("Choix des informations à exporter :")
        pup_block.append(
            (
                "Maillages visualisation",
                EXPORT_FICHIERS_OBJ_VISU,
                "Enregistrer les maillages dans le dossier de visualisation",
            )
        )
        pup_block.append(
            (
                "Maillages collision",
                EXPORT_FICHIERS_OBJ_COLLISION,
                "Enregistrer les maillages dans le dossier de collision",
            )
        )
        if not Draw.PupBlock("Choix des informations à exporter", pup_block):
            return

            # Parcours de la scène à la recherche des objets à traiter
        Window.WaitCursor(1)
        scene = Scene.getCurrent()
        lst_obj = scene.objects

        fxStr = Xstring()
        fxFichier = Xfile()
        fxExportFichiers3D = CExport_fichiers3D()

        # - parcours des objets de la scène et mise à jour du fichier XML
        solide = Solide()
        solide.setParametresXML(strNomFichierXML)
        for obj in lst_obj:
            # obj = lst_obj[0]
            if obj.getType() == "Mesh":
                strNom = obj.getName()
                print strNom
                solide.setParametresObjet(obj)
                solide.afficher()

                strNomFichierObj_visuel = fxFichier.concatenerChemins(self.strChemin_modeles_visuels_, strNom + ".obj")
                strNomFichierObj_collision = fxFichier.concatenerChemins(
                    self.strChemin_modeles_collision_, strNom + ".obj"
                )
                if EXPORT_FICHIERS_OBJ_VISU.val == 1:
                    fxExportFichiers3D.writeObj(obj, strNomFichierObj_visuel)
                else:
                    print 'Pas d\'enregistrement du fichier "%s"' % (strNomFichierObj_visuel)
                if EXPORT_FICHIERS_OBJ_COLLISION.val == 1:
                    fxExportFichiers3D.writeObj(obj, strNomFichierObj_collision)
                else:
                    print 'Pas d\'enregistrement du fichier "%s"' % (strNomFichierObj_collision)

                    # - Patch du fichier XML (positions, couleurs, min et max pour les "regular grid")
                solide.mettre_fichier_XML_a_jour()  # ---->>>>>>>>

        Window.WaitCursor(0)
        return
Example #35
0
def G3DLoader(filename):            #Main Import Routine
    global imported, sceneID
    print "\nNow Importing File    : " + filename
    fileID = open(filename,"rb")
    header = G3DHeader(fileID)
    print "\nHeader ID             : " + header.id
    print "Version               : " + str(header.version)
    if header.id != "G3D":
        print "This is Not a G3D Model File"
        fileID.close
        return
    if header.version not in (3, 4):
        print "The Version of this G3D File is not Supported"
        fileID.close
        return
    in_editmode = Blender.Window.EditMode()             #Must leave Editmode when active
    if in_editmode: Blender.Window.EditMode(0)
    sceneID=Scene.getCurrent()                          #Get active Scene
    scenecontext=sceneID.getRenderingContext()          #To Access the Start/Endframe its so hidden i searched till i got angry :-)
    basename=str(Blender.sys.makename(filename,"",1))   #Generate the Base Filename without Path + extension
    imported = []
    maxframe=0
    if header.version == 3:
        modelheader = G3DModelHeaderv3(fileID)
        print "Number of Meshes      : " + str(modelheader.meshcount)
        for x in xrange(modelheader.meshcount):
            meshheader = G3DMeshHeaderv3(fileID)
            meshheader.isv4 = False    
            print "\nMesh Number           : " + str(x+1)
            print "framecount            : " + str(meshheader.framecount)
	    print "normalframecount      : " + str(meshheader.normalframecount)
	    print "texturecoordframecount: " + str(meshheader.texturecoordframecount)
	    print "colorframecount       : " + str(meshheader.colorframecount)
	    print "pointcount            : " + str(meshheader.vertexcount)
	    print "indexcount            : " + str(meshheader.indexcount)
	    print "texturename           : " + str(meshheader.texturefilename)
            print "hastexture            : " + str(meshheader.hastexture)
            print "istwosided            : " + str(meshheader.istwosided)
            print "customalpha           : " + str(meshheader.customalpha)
            meshheader.meshname = basename+str(x+1)     #Generate Meshname because V3 has none
            if meshheader.framecount > maxframe: maxframe = meshheader.framecount #Evaluate the maximal animationsteps
	    meshdata = G3DMeshdataV3(fileID,meshheader)
	    createMesh(filename,meshheader,meshdata)
        fileID.close
        print "Imported Objects: ",imported
        scenecontext.startFrame(1)      #Yeah finally found this Options :-)
        scenecontext.endFrame(maxframe) #Set it correctly to the last Animationstep :-))))
        Blender.Set("curframe",1)       #Why the Heck are the above Options not here accessible ????
        anchor = Object.New("Empty",basename) #Build an "empty" to Parent all meshes to it for easy handling
        sceneID.link(anchor)                #Link it to current Scene
        anchor.makeParent(imported)         #Make it Parent for all imported Meshes
        anchor.sel = 1                      #Select it
        if in_editmode: Blender.Window.EditMode(1) # Be nice and restore Editmode when was active
        return
    if header.version == 4:
        modelheader = G3DModelHeaderv4(fileID)
        print "Number of Meshes      : " + str(modelheader.meshcount)
        for x in xrange(modelheader.meshcount):
            meshheader = G3DMeshHeaderv4(fileID)
            meshheader.isv4 = False    
            print "\nMesh Number           : " + str(x+1)
	    print "meshname              : " + str(meshheader.meshname)
	    print "framecount            : " + str(meshheader.framecount)
	    print "vertexcount           : " + str(meshheader.vertexcount)
	    print "indexcount            : " + str(meshheader.indexcount)
	    print "diffusecolor          : %1.6f %1.6f %1.6f" %meshheader.diffusecolor
	    print "specularcolor         : %1.6f %1.6f %1.6f" %meshheader.specularcolor
	    print "specularpower         : %1.6f" %meshheader.specularpower
	    print "opacity               : %1.6f" %meshheader.opacity
	    print "properties            : " + str(meshheader.properties)
	    print "textures              : " + str(meshheader.textures)
	    print "texturename           : " + str(meshheader.texturefilename)
            if len(meshheader.meshname) ==0:    #When no Meshname in File Generate one
                meshheader.meshname = basename+str(x+1)
            if meshheader.framecount > maxframe: maxframe = meshheader.framecount #Evaluate the maximal animationsteps
   	    meshdata = G3DMeshdataV4(fileID,meshheader)
	    createMesh(filename,meshheader,meshdata)
        fileID.close
        scenecontext.startFrame(1)      #Yeah finally found this Options :-)
        scenecontext.endFrame(maxframe) #Set it correctly to the last Animationstep :-))))
        Blender.Set("curframe",1)       #Why the Heck are the above Options not here accessible ????
        anchor = Object.New("Empty",basename) #Build an "empty" to Parent all meshes to it for easy handling
        sceneID.link(anchor)                #Link it to current Scene
        anchor.makeParent(imported)         #Make it Parent for all imported Meshes
        anchor.sel = 1                      #Select it
        if in_editmode: Blender.Window.EditMode(1) # Be nice and restore Editmode when was active
        print "Created a empty Object as 'Grip' where all imported Objects are parented to"
        print "To move the complete Meshes only select this empty Object and move it"
        print "All Done, have a good Day :-)\n\n"
        return
Example #36
0
def Import(fileName):
	log.info("Starting ...")
	
	log.info("Importing MD3 model: %s", fileName)
	
	pathName = StripGamePath(StripModel(fileName))
	log.info("Shader path name: %s", pathName)
	
	modelName = StripExtension(StripPath(fileName))
	log.info("Model name: %s", modelName)
	
	# read the file in
	file = open(fileName,"rb")
	md3 = md3Object()
	md3.Load(file, log)
	md3.Dump(log)
	file.close()
	
	scene = Scene.getCurrent()
	
	for k in range(0, md3.numSurfaces):
		surface = md3.surfaces[k]
		
		# create a new mesh
		mesh = Mesh.New(surface.name)
		#uv = []
		uvList = []

		# make the verts
		for i in range(0, surface.numVerts):
			mesh.verts.extend( [surface.verts[i].xyz] )
	
		# make the faces
		for i in range(0, surface.numTriangles):
			mesh.faces.extend( surface.triangles[i].indexes )

		# use faceUV
		mesh.faceUV=True

		# extend ignores redundant faces
		log.info("Redundant faces for %s: %i", surface.name , surface.numTriangles-len(mesh.faces) )

		# make the UV list
		for tex_coord in surface.uv:
			u = tex_coord.u
			v = tex_coord.v
			uv = Mathutils.Vector([u,v])
			uvList.append(uv)

		# import uv
		log.info("uv")
		for i in range(0, len(mesh.faces)):
			uvData = []
			uvData.append(uvList[surface.triangles[i].indexes[0]])
			uvData.append(uvList[surface.triangles[i].indexes[1]])
			uvData.append(uvList[surface.triangles[i].indexes[2]])
			mesh.faces[i].uv = uvData
			# set smooth
			mesh.faces[i].smooth=1

		# add object
		log.info("addobj")
		meshObject = Object.New('Mesh',surface.name)
		meshObject.link(mesh)
		scene.link(meshObject)
		
		# animate the verts through keyframe animation
		log.info("anim")
		for i in range(0, surface.numFrames):
			
			# update the vertices
			for j in range(0, surface.numVerts):
				# i*sufrace.numVerts+j=where in the surface vertex list the vert position for this frame is
				#x = surface.verts[(i * surface.numVerts) + j].xyz[0]
				#y = surface.verts[(i * surface.numVerts) + j].xyz[1]
				#z = surface.verts[(i * surface.numVerts) + j].xyz[2]
	
				# put the vertex in the right spot
				#mesh.verts[j].co[0] = x
				#mesh.verts[j].co[1] = y
				#mesh.verts[j].co[2] = z
				xyz = Mathutils.Vector(surface.verts[(i * surface.numVerts) + j].xyz)
				mesh.verts[j].co = xyz
				
			meshObject.insertShapeKey()

		#select all and remove doubles
		mesh.sel=1
		mesh.remDoubles(0.0)

		# create materials for surface
		log.info("shade")
		for i in range(0, surface.numShaders):
			
			# create new material if necessary
			matName = StripExtension(StripPath(surface.shaders[i].name))
			if matName == "" :
				matName = "no_texture"
			
			try:
				mat = Material.Get(matName)
			except:
				log.info("Creating new material: %s", matName)
				mat = Material.New(matName)
			
				# create new texture
				texture = Texture.New(matName)
				texture.setType('Image')
			
				# try .tga by default
				imageName = StripExtension(GAMEDIR + surface.shaders[i].name) + '.tga'
				try:
					image = Image.Load(imageName)
				
					texture.image = image
				except:
					try:
						imageName = StripExtension(imageName) + '.png'
						image = Image.Load(imageName)
					
						texture.image = image
					except:
						try:
							imageName = StripExtension(imageName) + '.jpg'
							image = Image.Load(imageName)
						
							texture.image = image
						except:
							log.warning("Unable to load image: %s", imageName)
				
				# texture to material
				mat.setTexture(0, texture, Texture.TexCo.UV, Texture.MapTo.COL)
	
			# append material to the mesh's list of materials
			mesh.materials += [mat]
			mesh.update()

	for key in Key.Get() :
		key.ipo = Ipo.New('Key', "bleh" + "_ipo")
		index = 1
		for curveName in key.ipo.curveConsts :
			# print curveName
			key.ipo.addCurve(curveName)
			key.ipo[curveName].interpolation = IpoCurve.InterpTypes.CONST
			key.ipo[curveName].addBezier((0, 0))
			key.ipo[curveName].addBezier((index, 1))
			key.ipo[curveName].addBezier((index + 1, 0))
			index+=1
	#for key in Key.Get() :
	#	print key.ipo.curveConsts

	log.info("tags")
	# create tags
	for i in range(0, md3.numTags):
		tag = md3.tags[i]
		# this should be an Empty object
		blenderTag = Object.New("Empty", tag.name);
		# set ipo
		ipo = Ipo.New('Object', tag.name + "_ipo")
		locX = ipo.addCurve('LocX')
		locY = ipo.addCurve('LocY')
		locZ = ipo.addCurve('LocZ')
		rotX = ipo.addCurve('RotX')
		rotY = ipo.addCurve('RotY')
		rotZ = ipo.addCurve('RotZ')
		locX.interpolation=IpoCurve.InterpTypes.LINEAR
		locY.interpolation=IpoCurve.InterpTypes.LINEAR
		locZ.interpolation=IpoCurve.InterpTypes.LINEAR
		rotX.interpolation=IpoCurve.InterpTypes.LINEAR
		rotY.interpolation=IpoCurve.InterpTypes.LINEAR
		rotZ.interpolation=IpoCurve.InterpTypes.LINEAR
		#set ipo for tag
		blenderTag.setIpo(ipo)
		scene.link(blenderTag)
		blenderTag.setLocation(tag.origin)

	# FIXME this imports only the baseframe tags
	for i in range(0, md3.numFrames):

		for j in range(0, md3.numTags):
			tag = md3.tags[i * md3.numTags + j]
			#Blender.Set("curframe", i)
			#tagName = tag.name# + '_' + str(i)
			#blenderTag = Object.New("Empty", tagName);
			#tags.append(blenderTag)
			#scene.link(blenderTag)
			#blenderTag = tags[j]
			blenderTag = Object.Get(tag.name)
			ipo = Ipo.Get(tag.name + "_ipo")
			locX = ipo[Ipo.OB_LOCX]
			locY = ipo[Ipo.OB_LOCY]
			locZ = ipo[Ipo.OB_LOCZ]
			rotX = ipo[Ipo.OB_ROTX]
			rotY = ipo[Ipo.OB_ROTY]
			rotZ = ipo[Ipo.OB_ROTZ]

			# Note: Quake3 uses left-hand geometry
			forward = [tag.axis[0], tag.axis[1], tag.axis[2]]
			left = [tag.axis[3], tag.axis[4], tag.axis[5]]
			up = [tag.axis[6], tag.axis[7], tag.axis[8]]
		
			transform = MatrixSetupTransform(forward, left, up, tag.origin)
			transform2 = Blender.Mathutils.Matrix(transform[0], transform[1], transform[2], transform[3])
			rotation = Blender.Mathutils.Matrix(forward, left, up)
			rot_Euler = rotation.toEuler()
			#rot_Euler.unique()
			#blenderTag.setMatrix(transform2)
			#print "org: ", tag.origin
			locX.addBezier((i+1, tag.origin[0]))
			locY.addBezier((i+1, tag.origin[1]))
			locZ.addBezier((i+1, tag.origin[2]))
			rotX.addBezier((i+1, DEG2RAD(rot_Euler.x)))
			rotY.addBezier((i+1, DEG2RAD(rot_Euler.y)))
			rotZ.addBezier((i+1, DEG2RAD(rot_Euler.z)))
			#blenderTag.setLocation(tag.origin)
			#blenderTag.insertKey(i,"relative")

	# locate the Object containing the mesh at the cursor location
	if md3.numSurfaces:
		cursorPos = Blender.Window.GetCursorPos()
		#meshObject.setLocation(float(cursorPos[0]), float(cursorPos[1]), float(cursorPos[2]))
		meshObject.setLocation(float(cursorPos[0]), float(cursorPos[1]), float(cursorPos[2]))