示例#1
0
    def writeObj(self, file_name, progress = False, show_msg = True, scale = core.scene_scale()):
        all_parts = self.parts()
        part_num = len(all_parts)
        if progress:
            window = mc.window(t = 'Writing %s to obj' % self.set_name)
            mc.columnLayout()
            progressControl = mc.progressBar(maxValue = part_num, width = 300)
            mc.showWindow(window)

        f = open(file_name, 'w')
        vo = 1
        vto = 1
        vno = 1
        for i in range(len(all_parts)):
            part = all_parts[i]
            # part.toObjStream(f, group = part.name(reformat = True), v_offset = vo, vt_offset = vto, vn_offset = vno, show_msg = not progress)
            part.toObjStream(f, group = part.partName(), v_offset = vo, vt_offset = vto, vn_offset = vno, show_msg = not progress, scale = scale)
            vo += part.numPoints()
            vto += part.numUVs()
            vno += part.numNormals()
            if progress:
                mc.progressBar(progressControl, edit=True, step=1)

        f.close()
        if progress:
            mc.deleteUI(window)

        if show_msg:
            print "Write %s to obj done." % self.set_name
        return True
示例#2
0
 def allpoints(self, scale = core.scene_scale()):
     points = []
     for part in self.parts():
         mps = part.points()
         for i in range(mps.length()):
             point = mps[i]
             points.append([point[0] * scale, point[1] * scale, point[2] * scale])
     return points
示例#3
0
 def addFrame(self, frame = None, scale = core.scene_scale()):
     '''
     Houdini chanal list: tx ty tz rx ry rz focallength
     Nuke chanal list: frame tx ty tz rx ry rz fov
     '''
     t = self.getTranslate(scale = scale)
     r = self.getRotation()
     fl = self.getFocalLength()
     self.frames.append(t + r + [fl])
     # add nuke frame if gien the frame parm
     if frame:
         vf = self.getVfov()
         self.nuke_frames.append([frame] + t + r + [vf])
     return True
示例#4
0
    def writeObjs(self, folder,  progress = False, show_msg = True, scale = core.scene_scale()):
        all_parts = self.parts()
        part_num = len(all_parts)
        if progress:
            window = mc.window(t = 'Writing %s to obj' % self.set_name)
            mc.columnLayout()
            progressControl = mc.progressBar(maxValue = part_num, width = 300)
            mc.showWindow(window)

        for i in range(part_num):
            part = all_parts[i]
            part_obj_name = os.path.join(folder, '%s.obj' % part.partName())
            part.writeObj(part_obj_name, scale = scale)
            if progress:
                mc.progressBar(progressControl, edit=True, step=1)

        if progress:
            mc.deleteUI(window)

        if show_msg:
            print "Write %s to obj done." % self.set_name
        return True
示例#5
0
 def getTranslate(self, worldspace = True, scale = core.scene_scale()):
     t = mc.xform(self.name, q = True, t = True, ws = worldspace)
     return [t[0] * scale, t[1] * scale, t[2] * scale]
示例#6
0
 def writeObj(self, file_name, scale = core.scene_scale()):
     f = open(file_name, 'w')
     self.toObjStream(f, group = self.name(reformat = True), scale = scale)
     f.close()
示例#7
0
    def toObjStream(self, file_handle, group = None, v_offset = 1, vt_offset = 1, vn_offset = 1, show_msg = False, scale = core.scene_scale()):
        # write points  'v tx ty tz'
        hasUV = True

        points = self.points()
        for i in range(self.numPoints()):
            point = points[i]
            file_handle.write("v %f %f %f\n" % (point[0] * scale, point[1] * scale, point[2] * scale))
        # write uvs     'vt u v'
        u_list = mo.MFloatArray()
        v_list = mo.MFloatArray()
        self.fnMesh.getUVs(u_list, v_list)
        if u_list.length():
            for i in range(u_list.length()):
                file_handle.write("vt %f %f\n" % (u_list[i], v_list[i]))
        else:
            hasUV = False
            for i in range(self.numPoints()):
                file_handle.write("vt %f %f\n" % (0, 0))
        # write normals 'vn nx ny nz'
        normals = mo.MFloatVectorArray()
        self.fnMesh.getNormals(normals)
        for i in range(normals.length()):
            normal = normals[i]
            file_handle.write("vn %f %f %f\n" % (normal[0], normal[1], normal[2]))
        # write group   'g group_name'
        if group:
            file_handle.write("g %s\n" % group)
        # write faces   'f P1/uv1/N1 P2/uv2/N2 P3/uv3/N3'
        for fnum in range(self.numFaces()):
            verts = mo.MIntArray()
            self.fnMesh.getPolygonVertices(fnum, verts)
            nid = mo.MIntArray()
            self.fnMesh.getFaceNormalIds(fnum, nid)

            file_handle.write("f")
            for vnum in range(verts.length()):
                if hasUV:
                    try:
                        uv_util = mo.MScriptUtil(0)
                        uv_ptr = uv_util.asIntPtr()
                        self.fnMesh.getPolygonUVid(fnum, vnum, uv_ptr)
                        uvid = uv_util.getInt(uv_ptr)
                    except:
                        print '%s uv is wrong' % self.fullname
                        uvid = 0
                    file_handle.write(" %d/%d/%d" % (verts[vnum] + v_offset, uvid + vt_offset, nid[vnum] + vn_offset))
                else:
                    file_handle.write(" %d/%d/%d" % (verts[vnum] + v_offset, verts[vnum] + vt_offset, nid[vnum] + vn_offset))
            file_handle.write("\n")
        if show_msg:
            print "Write %s done" % self.name()
        return True
示例#8
0
 def channels(self, frame = None, scale = core.scene_scale()):
     '''chanal list: tx ty tz rx ry rz px py pz'''
     t = self.getTranslate(scale = scale)
     r = self.getRotation()
     s = self.getScale()
     return t + r + s