def thingIsMesh(thing): isMesh = False if mxs.classOf(thing) == mxs.XRefObject: thing = thing.actualBaseObject if mxs.classOf(thing) == mxs.Editable_Mesh: isMesh = True return isMesh
def addProceduralShake(self): listController = mxs.getPropertyController( self._nativePointer.controller, 'rotation') print mxs.classOf(listController) if not mxs.classOf(listController) == mxs.rotation_list: listController = mxs.rotation_list() mxs.setPropertyController(self._nativePointer.controller, 'rotation', listController) noise = mxs.Noise_rotation() noise.frequency = 0.05 noise.fractal = False noise.seed = random.randint(0, 10000000) # Got lazy here, did not have time to find the Python way to do it. maxScript = """fn setNoiseControllerStrength noiseController x y z = ( noiseController.noise_strength = [x, y, z] )""" mxs.execute(maxScript) weirdFactor = 57.296 mxs.setNoiseControllerStrength(noise, 0.4 / weirdFactor, 0.4 / weirdFactor, 0.1 / weirdFactor) mxs.setPropertyController(listController, 'Available', noise) return True
def setFilmWidth(self, width): """ \remarks Sets the film_width value for the camera. \param width <float> \return n/a """ if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.film_width = float(width) elif mxs.classOf(self._nativePointer) == mxs.Physical: self._nativePointer.film_width_mm = float(width) return True
def setWhiteBalance(self, whiteBalance): if isinstance(whiteBalance, QColor): if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.whiteBalance_preset = 3 self._nativePointer.whiteBalance = mxs.Color(*whiteBalance.getRgb()) return True elif mxs.classOf(self._nativePointer) == mxs.Physical: self._nativePointer.whiteBalance_type = 0 self._nativePointer.white_balance_custom = mxs.Color(*whiteBalance.getRgb()) return True return False
def motionBlur(self): """ Returns wheter or not this camera is enabling motion blur at render time. Returns: bool: Whether the camera renders motion blur. """ if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: return self._nativePointer.use_moBlur elif mxs.classOf(self._nativePointer) == mxs.Physical: return self._nativePointer.motion_blur_enabled else: return False
def setWhiteBalance(self, whiteBalance): if isinstance(whiteBalance, QColor): if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.whiteBalance_preset = 3 self._nativePointer.whiteBalance = mxs.Color( *whiteBalance.getRgb()) return True elif mxs.classOf(self._nativePointer) == mxs.Physical: self._nativePointer.whiteBalance_type = 0 self._nativePointer.white_balance_custom = mxs.Color( *whiteBalance.getRgb()) return True return False
def setAllVerts(obj, newVerts): if mxs.classOf(obj) == mxs.XRefObject: obj = obj.actualBaseObject if mxs.classOf(obj) in [mxs.Editable_Poly, mxs.PolyMeshObject]: maxAll = mxs.execute('#all') maxPos = [ mxs.point3(float(i[0]), float(i[1]), float(i[2])) for i in newVerts ] mxs.polyop.setVert(obj, maxAll, maxPos) else: for i, v in enumerate(newVerts): mxs.setVert(obj, i + 1, *v) return True
def saveCurrentLightProperty(self, propSet): for obj in self._nativeObjects(): if mxs.classOf(obj) == mxs.VRayLight: if propSet.value('primaryVisibility'): so = SceneObject(self._scene, obj) so.userProps()['previousInvisibleState'] = obj.invisible obj.invisible = True
def type(self): """ \remarks implements AbstractSceneAnimationController.controllerType method to return the controller type for this instance \return <cross3d.constants.ControllerType> """ return self._nativeToAbstractTypes.get( str(mxs.classOf(self._nativePointer)), 0)
def anisotropy(self): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: return self._nativePointer.anisotropy elif classOf == mxs.Physical: return self._nativePointer.bokeh_anisotropy return False
def setMotionBlur(self, motionBlur): """ Sets wheter or not this camera is enabling motion blur at render time. Args: motionBlur (bool): Whether the camera renders motion blur. Returns: True: Whether or not motion blur was set. """ if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.use_moBlur = motionBlur return True elif mxs.classOf(self._nativePointer) == mxs.Physical: self._nativePointer.motion_blur_enabled = motionBlur return True return False
def distortion(self): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: return self._nativePointer.distortion elif classOf == mxs.Physical: return self._nativePointer.distortion_cubic_amount return False
def blades(self): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: return self._nativePointer.blades_number elif classOf == mxs.Physical: return self._nativePointer.bokeh_blades_number return 0
def distortionType(self): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: return self._vRayDistortionTypes[self._nativePointer.distortion_type] elif classOf == mxs.Physical: return self._distortionTypes[self._nativePointer.distortion_type] return ''
def _typeOfNativeObject(cls, nativeObject): """ \remarks reimplements the AbstractSceneObject._typeOfNativeObject method to returns the ObjectType of the nativeObject applied \param <Py3dsMax.mxs.Object> nativeObject || None \return <bool> success """ # Checking for model. if mxs.classOf(nativeObject) == mxs.Point: userProps = UserProps(nativeObject) if 'model' in userProps: return ObjectType.Model output = cls._nativeToAbstractObjectType.get(str(mxs.classOf(nativeObject)), cls._nativeToAbstractObjectType.get(str(mxs.superClassOf(nativeObject)), AbstractSceneObject._typeOfNativeObject(nativeObject))) return output
def setVignettingEnabled(self, vignettingEnabled): if isinstance(vignettingEnabled, (bool, int, float)): classOff = mxs.classOf(self._nativePointer) if classOff == mxs.VRayPhysicalCamera: self._nativePointer.vignetting = vignettingEnabled elif classOff == mxs.Physical: self._nativePointer.vignetting_enabled = vignettingEnabled return False
def delete_scene(): """ pydoc """ mxs.actionMan.executeAction(0, "40021") # Selection: Select All for i in mxs.selection: # use mxs.Teapot refer to Teapot keyword in maxscript, cause there is # no such type in python if mxs.classOf(i) == mxs.Teapot and i.wireColor.B < 210: mxs.delete(i)
def distortionType(self): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: return self._vRayDistortionTypes[ self._nativePointer.distortion_type] elif classOf == mxs.Physical: return self._distortionTypes[self._nativePointer.distortion_type] return ''
def setDistortionType(self, distortionType): if isinstance(distortionType, basestring): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: self._nativePointer.distortion_type = self._vRayDistortionTypes.index(distortionType) return True elif classOf == mxs.Physical: self._nativePointer.distortion_type = self._distortionTypes.index(distortionType) return True return False
def setDistortion(self, distortion): if isinstance(distortion, (int, float)): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: self._nativePointer.distortion = distortion return True elif classOf == mxs.Physical: self._nativePointer.distortion_cubic_amount = distortion return True return False
def setAnisotropy(self, anisotropy): if isinstance(anisotropy, (int, float)): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: self._nativePointer.anisotropy = anisotropy return True elif classOf == mxs.Physical: self._nativePointer.bokeh_anisotropy = anisotropy return True return False
def setBlades(self, blades): if isinstance(blades, (int, float)): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: self._nativePointer.blades_number = int(blades) return True elif classOf == mxs.Physical: self._nativePointer.bokeh_blades_number = int(blades) return True return False
def _typeOfNativeObject(cls, nativeObject): """ \remarks reimplements the AbstractSceneObject._typeOfNativeObject method to returns the ObjectType of the nativeObject applied \param <Py3dsMax.mxs.Object> nativeObject || None \return <bool> success """ # Checking for model. if mxs.classOf(nativeObject) == mxs.Point: userProps = UserProps(nativeObject) if 'model' in userProps: return ObjectType.Model output = cls._nativeToAbstractObjectType.get( str(mxs.classOf(nativeObject)), cls._nativeToAbstractObjectType.get( str(mxs.superClassOf(nativeObject)), AbstractSceneObject._typeOfNativeObject(nativeObject))) return output
def _nativeKeys(self): """ \remarks implements the AbstractSceneAnimationController._nativeKeys method to collect a list of the current keys for this controller instance \return <list> [ <Py3dsMax.mxs.Key> nativeKey, .. ] """ # This method only supports controllers with keys. if mxs.classOf(self._nativePointer) in [mxs.bezier_float, mxs.linear_float]: return self._nativePointer.keys return []
def hasMultiPassEffects(self): """ \remarks returns whether multipass effects are active on this camera \return <bool> """ cls = mxs.classOf(self._nativePointer) if cls in (mxs.VRayPhysicalCamera, mxs.Physical): return self._nativePointer.use_DOF elif mxs.isProperty(self._nativePointer, 'mpassEnabled'): return self._nativePointer.mpassEnabled return False
def setDistortionType(self, distortionType): if isinstance(distortionType, basestring): classOf = mxs.classOf(self._nativePointer) if classOf == mxs.VRayPhysicalCamera: self._nativePointer.distortion_type = self._vRayDistortionTypes.index( distortionType) return True elif classOf == mxs.Physical: self._nativePointer.distortion_type = self._distortionTypes.index( distortionType) return True return False
def _nativeKeys(self): """ \remarks implements the AbstractSceneAnimationController._nativeKeys method to collect a list of the current keys for this controller instance \return <list> [ <Py3dsMax.mxs.Key> nativeKey, .. ] """ # This method only supports controllers with keys. if mxs.classOf( self._nativePointer) in [mxs.bezier_float, mxs.linear_float]: return self._nativePointer.keys return []
def selectVerts(obj, idx): selMod = None if list(obj.modifiers): if obj.modifiers[0] == mxs.Mesh_Select: selMod = obj.modifiers[0] elif obj.modifiers[0] == mxs.Poly_Select: selMod = obj.modifiers[0] if selMod is None: if mxs.classOf(obj) == mxs.Editable_Mesh: selMod = mxs.addModifier(obj, mxs.Mesh_Select) elif mxs.classOf(obj) == mxs.Editable_Poly: selMod = mxs.addModifier(obj, mxs.Poly_Select) if selMod is None: raise RuntimeError("Could not build selection") mxs.select(obj) mxs.subObjectLevel = 1 sel = [] if idx is None else [idx + 1] obj.selectedVerts = sel mxs.completeRedraw()
def addProceduralShake(self): listController = mxs.getPropertyController(self._nativePointer.controller, 'rotation') print mxs.classOf(listController) if not mxs.classOf(listController) == mxs.rotation_list: listController = mxs.rotation_list() mxs.setPropertyController(self._nativePointer.controller, 'rotation', listController) noise = mxs.Noise_rotation() noise.frequency = 0.05 noise.fractal = False noise.seed = random.randint(0, 10000000) # Got lazy here, did not have time to find the Python way to do it. maxScript = """fn setNoiseControllerStrength noiseController x y z = ( noiseController.noise_strength = [x, y, z] )""" mxs.execute(maxScript) weirdFactor = 57.296 mxs.setNoiseControllerStrength(noise, 0.4/weirdFactor, 0.4/weirdFactor, 0.1/weirdFactor) mxs.setPropertyController(listController, 'Available', noise) return True
def bladesEnabled(self): return self._nativePointer.use_blades if mxs.classOf( self._nativePointer) == mxs.VRayPhysicalCamera else False
def setBladesEnabled(self, bladesEnabled): if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.use_blades = bladesEnabled return True return False
def outputType(self): return self._vRayOutputTypes[self._nativePointer.type] if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera else ''
def setShutterOffset(self, shutterOffset): if isinstance(shutterOffset, (int, float)) and mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.shutter_offset = shutterOffset return True return False
def whiteBalance(self): if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: color = self._nativePointer.whiteBalance elif mxs.classOf(self._nativePointer) == mxs.Physical: color = self._nativePointer.white_balance_custom return QColor(color.r, color.g, color.b, color.a) if color else ''
def setShutterAngle(self, shutterAngle): if isinstance(shutterAngle, (int, float)) and mxs.classOf( self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.shutter_angle = shutterAngle return True return False
def shutterAngle(self): return self._nativePointer.shutter_angle if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera else 180
def setShutterAngle(self, shutterAngle): if isinstance(shutterAngle, (int, float)) and mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.shutter_angle = shutterAngle return True return False
def bladesEnabled(self): return self._nativePointer.use_blades if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera else False
def setShutterOffset(self, shutterOffset): if isinstance(shutterOffset, (int, float)) and mxs.classOf( self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.shutter_offset = shutterOffset return True return False
def vignettingEnabled(self): if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: return self._nativePointer.vignetting elif mxs.classOf(self._nativePointer) == mxs.Physical: return self._nativePointer.vignetting_enabled return False
def shutterOffset(self): return self._nativePointer.shutter_offset if mxs.classOf( self._nativePointer) == mxs.VRayPhysicalCamera else 0
def setExposureEnabled(self, exposureEnabled): if isinstance(exposureEnabled, (bool, int, float)) and mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.exposure = exposureEnabled return True return False
def shutterAngle(self): return self._nativePointer.shutter_angle if mxs.classOf( self._nativePointer) == mxs.VRayPhysicalCamera else 180
def setOutputType(self, outputType): if isinstance(outputType, basestring) and mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera: self._nativePointer.type = self._vRayOutputTypes.index(outputType) return True return False
def exposureEnabled(self): return self._nativePointer.exposure if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera else False
def shutterOffset(self): return self._nativePointer.shutter_offset if mxs.classOf(self._nativePointer) == mxs.VRayPhysicalCamera else 0