コード例 #1
0
ファイル: studioMaya.py プロジェクト: rchals/subins_tutorials
 def set_bounding_box(self):
     m3d_view = OpenMayaUI.M3dView()
     for index in range(m3d_view.numberOf3dViews()):
         view = OpenMayaUI.M3dView()
         m3d_view.get3dView(index, view)
         view.setDisplayStyle(0)
         view.refresh()
コード例 #2
0
    def setUp(self):
        mayaSceneFile = '%s.ma' % self._testName
        mayaSceneFullPath = os.path.join(self._inputDir, mayaSceneFile)
        cmds.file(mayaSceneFullPath, open=True, force=True)

        # Create a new custom viewport.
        self._window = cmds.window(widthHeight=(500, 400))
        cmds.paneLayout()
        self._panel = cmds.modelPanel()
        cmds.modelPanel(self._panel, edit=True, camera='persp')
        cmds.modelEditor(cmds.modelPanel(self._panel, q=True,
                                         modelEditor=True),
                         edit=True,
                         displayAppearance='smoothShaded',
                         rnm='vp2Renderer')
        cmds.showWindow(self._window)

        # Force all views to re-draw. This causes us to block until the
        # geometry we're making live has actually been evaluated and is present
        # in the viewport. Otherwise execution of the test may continue and the
        # create tool may be invoked before there's any geometry there, in
        # which case the tool won't create anything.
        cmds.refresh()

        # Get the viewport widget.
        self._view = OMUI.M3dView()
        OMUI.M3dView.getM3dViewFromModelPanel(self._panel, self._view)
        self._viewWidget = wrapInstance(long(self._view.widget()), QWidget)
コード例 #3
0
    def getIntersectPoint(meshDagPath, mouseX, mouseY):

        meshMatrix = meshDagPath.inclusiveMatrix()
        invMtx = meshDagPath.inclusiveMatrixInverse()

        activeView = OpenMayaUI.M3dView().active3dView()
        nearPoint = OpenMaya.MPoint()
        farPoint = OpenMaya.MPoint()
        activeView.viewToWorld(mouseX, mouseY, nearPoint, farPoint)

        nearPoint *= invMtx
        farPoint *= invMtx

        fnMesh = OpenMaya.MFnMesh(meshDagPath)
        intersectPoints = OpenMaya.MPointArray()

        fnMesh.intersect(nearPoint, farPoint - nearPoint, intersectPoints)

        if not intersectPoints.length(): return None

        if intersectPoints.length() == 1:
            return intersectPoints[0] * meshMatrix
        elif intersectPoints.length() > 1:
            pointCenter = OpenMaya.MPoint(
                (intersectPoints[0].x + intersectPoints[1].x) / 2.0,
                (intersectPoints[0].y + intersectPoints[1].y) / 2.0,
                (intersectPoints[0].z + intersectPoints[1].z) / 2.0)
            return pointCenter * meshMatrix
コード例 #4
0
    def getIntersection(self):
        # Create mpoint variables
        pos = om.MPoint()  # 3D point with double-precision coordinates
        dir = om.MVector()  # 3D vector with double-precision coordinates
        vpX, vpY, _ = cmds.draggerContext(self.ctx, query=True, dragPoint=True)
        # This takes vpX and vpY as input and outputs position and direction
        # values for the active view.
        # - M3dView: provides methods for working with 3D model views
        # - active3dView(): Returns the active view in the form of a class
        # - viewToWorld: Takes a point in port coordinates and
        #                returns a corresponding ray in world coordinates
        omui.M3dView().active3dView().viewToWorld(int(vpX), int(vpY), pos, dir)

        #pos2 = om.MFloatPoint(pos.x, pos.y, pos.z) # Creating a 3 vector float point to use
        #raySource = om.MFloatPoint(pos2)
        raySource = om.MFloatPoint(pos)
        rayDirection = om.MFloatVector(dir)
        faceIds = None
        triIds = None
        idsSorted = False
        maxParamPtr = 99999999
        testBothDirections = False
        accelParams = None
        hitpoint = om.MFloatPoint()
        hitRayParam = None
        hitFacePtr = om.MScriptUtil().asIntPtr()
        hitTriangle = None
        hitBary1 = None
        hitBary2 = None

        intersection = self.fnMesh.closestIntersection(
            raySource, rayDirection, faceIds, triIds, idsSorted,
            om.MSpace.kWorld, maxParamPtr, testBothDirections, accelParams,
            hitpoint, hitRayParam, hitFacePtr, hitTriangle, hitBary1, hitBary2)
        return intersection, hitFacePtr
コード例 #5
0
    def __init__(self, editor):
        """Makes your interaction in viewport fast, by installing this event
        viewport changes to bounding box

        Args:
            editor(str): modelEditor

        Usage::

            >> tracker = BBBlastTracker('modelPanel1')
            >> tracker.install()
            >> tracker.uninstall()
            # OR
            >> BBBlastTracker.install_from_active_panel()

        """
        super(BBBlastTracker, self).__init__()

        self.editor = editor
        self.last_appearance = cmds.modelEditor(self.editor,
                                                q=True,
                                                displayAppearance=True)
        self.restore_on_release = True
        self.timer = None
        self.timeout = 0.05

        # get QWidget from the view
        view = apiUI.M3dView()
        apiUI.M3dView.getM3dViewFromModelPanel(self.editor, view)
        self.view = shiboken2.wrapInstance(long(view.widget()),
                                           QtWidgets.QWidget)
        self.__class__._all.append(self)
コード例 #6
0
ファイル: Red9_General.py プロジェクト: pritishd/PKD_Tools
def thumbnailApiFromView(filename,
                         width,
                         height,
                         compression='bmp',
                         modelPanel='modelPanel4'):
    '''
    grab the thumbnail direct from the buffer?
    TODO: not yet figured out how you crop the data here?
    '''
    import maya.OpenMaya as OpenMaya
    import maya.OpenMayaUI as OpenMayaUI

    #Grab the last active 3d viewport
    view = None
    if modelPanel is None:
        view = OpenMayaUI.M3dView.active3dView()
    else:
        try:
            view = OpenMayaUI.M3dView()
            OpenMayaUI.M3dView.getM3dViewFromModelEditor(modelPanel, view)
        except:
            #in case the given modelPanel doesn't exist!!
            view = OpenMayaUI.M3dView.active3dView()

    #read the color buffer from the view, and save the MImage to disk
    image = OpenMaya.MImage()
    view.readColorBuffer(image, True)
    image.resize(width, height, True)
    image.writeToFile(filename, compression)
    log.info('API Thumbname call path : %s' % filename)
コード例 #7
0
    def testObjectNormal(self):
        """
        Tests that an object created interactively by dragging in the viewport
        has the correct orientation based on the live surface normal.
        """
        from pxr import Gf

        # Load our reference assembly.
        UsdMaya.LoadReferenceAssemblies()

        # Create a new custom viewport.
        window = cmds.window(widthHeight=(500, 400))
        cmds.paneLayout()
        panel = cmds.modelPanel()
        cmds.modelPanel(panel, edit=True, camera='persp')
        cmds.modelEditor(cmds.modelPanel(panel, q=True, modelEditor=True),
                         edit=True,
                         displayAppearance='smoothShaded',
                         rnm='vp2Renderer')
        cmds.showWindow(window)

        # Get the viewport widget.
        view = OMUI.M3dView()
        OMUI.M3dView.getM3dViewFromModelPanel(panel, view)
        viewWidget = wrapInstance(long(view.widget()), QWidget)

        # Make our assembly live.
        cmds.makeLive('Block_2')

        # Enter interactive creation context.
        cmds.setToolTo('CreatePolyConeCtx')

        # Click in the center of the viewport widget.
        QTest.mouseClick(viewWidget, QtCore.Qt.LeftButton,
                         QtCore.Qt.NoModifier,
                         viewWidget.rect().center())

        # Find the cone (it should be called pCone1).
        self.assertTrue(cmds.ls('pCone1'))

        # Check the cone's rotation.
        # Because our scene is Z-axis up, the cone's Z-axis should be aligned
        # with Block_2's surface normal (though it might not necessarily have
        # the same exact rotation).
        rotationAngles = cmds.xform('pCone1', q=True, ro=True)
        rotation = (Gf.Rotation(Gf.Vec3d.XAxis(), rotationAngles[0]) *
                    Gf.Rotation(Gf.Vec3d.YAxis(), rotationAngles[1]) *
                    Gf.Rotation(Gf.Vec3d.ZAxis(), rotationAngles[2]))
        actualZAxis = rotation.TransformDir(Gf.Vec3d.ZAxis())

        expectedRotation = (Gf.Rotation(Gf.Vec3d.XAxis(), 75.0) *
                            Gf.Rotation(Gf.Vec3d.YAxis(), 90.0))
        expectedZAxis = expectedRotation.TransformDir(Gf.Vec3d.ZAxis())

        # Verify that the error angle between the two axes is less than
        # 0.1 degrees (less than ~0.0003 of a revolution, so not bad). That's
        # about as close as we're going to get.
        errorRotation = Gf.Rotation(actualZAxis, expectedZAxis)
        self.assertLess(errorRotation.GetAngle(), 0.1)
コード例 #8
0
    def getCam(self):
        # get current view
        currentView = omui.M3dView().active3dView()
        dag = om.MDagPath()
        cam = currentView.getCamera(dag)
        cam = om.MFnCamera(dag)

        return cam
コード例 #9
0
ファイル: curveConnector.py プロジェクト: kthulhu/Maya
    def getClickedParams(self):
        pressPosition = cmds.draggerContext(self.ctxName,
                                            query=True,
                                            anchorPoint=True)
        m3dView = OpenMayaUI.M3dView()
        active = m3dView.active3dView()
        cameraPath = OpenMaya.MDagPath()
        active.getCamera(cameraPath)
        clip = OpenMaya.MFnCamera(cameraPath).farClippingPlane()

        pos = OpenMaya.MPoint()
        dirV = OpenMaya.MVector()

        active.viewToWorld(int(pressPosition[0]), int(pressPosition[1]), pos,
                           dirV)

        itrDag = OpenMaya.MItDag(OpenMaya.MItDag.kDepthFirst,
                                 OpenMaya.MFn.kMesh)
        nearDist = None
        nearPos = None
        nearDagPath = None
        while (not itrDag.isDone()):
            dagPath = OpenMaya.MDagPath()
            itrDag.getPath(dagPath)
            if (dagPath.isVisible()):
                fnMesh = OpenMaya.MFnMesh(dagPath)
                p = OpenMaya.MFloatPoint()
                f = OpenMaya.MScriptUtil()
                f.createFromInt(0)
                t = OpenMaya.MScriptUtil()
                t.createFromInt(0)
                fp = f.asIntPtr()
                tp = t.asIntPtr()
                if (fnMesh.closestIntersection(OpenMaya.MFloatPoint(pos),
                                               OpenMaya.MFloatVector(dirV),
                                               None, None, True,
                                               OpenMaya.MSpace.kWorld, clip,
                                               True, None, p, None, fp, tp,
                                               None, None)):
                    d = (OpenMaya.MFloatPoint(pos) - p).length()
                    if (not nearDist):
                        nearDist = d
                        nearPos = p
                        nearDagPath = dagPath
                    elif (nearDist > d):
                        nearDist = d
                        nearPos = p
                        nearDagPath = dagPath

            itrDag.next()

        if (nearPos):
            n = OpenMaya.MVector()
            OpenMaya.MFnMesh(nearDagPath).getClosestNormal(
                OpenMaya.MPoint(nearPos), n, OpenMaya.MSpace.kWorld)
            return ClickedPos(nearPos, n, nearDagPath)
        else:
            return None
コード例 #10
0
    def drawViewports(self, *args):

        glRenderer = OpenMayaRender.MHardwareRenderer.theRenderer()
        glFT = glRenderer.glFunctionTable()
        currFrame = int(cmds.currentTime(query=True))

        for loopViewport in utilMod.getAllViewports():

            rendererName = cmds.modelEditor(loopViewport,
                                            query=True,
                                            rendererName=True)

            for loopMotionTrail in self.nodeInfo.keys():

                viewportCamera = cmds.modelEditor(
                    loopViewport, query=True,
                    camera=True) if self.cameraRelativeMode else None
                camera = viewportCamera if viewportCamera in self.cameraInfo.keys(
                ) and self.cameraRelativeMode else None
                points = self.getPointsArray(loopMotionTrail, currFrame,
                                             camera)
                pointArray = points["camera"] if camera else points["world"]
                loopKeysTimes = [] if not self.keysTimesDict.has_key(
                    loopMotionTrail) else self.keysTimesDict[loopMotionTrail]
                indexMap = self.getIndexMap(loopMotionTrail, loopKeysTimes,
                                            currFrame, pointArray)
                lineColor = self.nodeInfo[loopMotionTrail]["lineColor"]
                view = OpenMayaUI.M3dView()

                OpenMayaUI.M3dView.getM3dViewFromModelPanel(loopViewport, view)
                view.beginGL()
                glFT.glPushAttrib(OpenMayaRender.MGL_ALL_ATTRIB_BITS)
                glFT.glPushMatrix()
                glFT.glDepthRange(0, 0)
                glFT.glEnable(OpenMayaRender.MGL_LINE_SMOOTH)
                glFT.glEnable(OpenMayaRender.MGL_POINT_SMOOTH)
                glFT.glEnable(OpenMayaRender.MGL_BLEND)
                glFT.glDisable(OpenMayaRender.MGL_LIGHTING)
                glFT.glBlendFunc(OpenMayaRender.MGL_SRC_ALPHA,
                                 OpenMayaRender.MGL_ONE_MINUS_SRC_ALPHA)

                #DRAW
                if rendererName == "ogsRenderer":
                    self.drawLine(glFT, indexMap, pointArray, lineColor)
                    self.drawPoints(glFT, indexMap, pointArray)
                else:
                    self.drawPoints(glFT, indexMap, pointArray)
                    self.drawLine(glFT, indexMap, pointArray, lineColor)

                #WRAP
                glFT.glDisable(OpenMayaRender.MGL_BLEND)
                glFT.glDisable(OpenMayaRender.MGL_LINE_SMOOTH)
                glFT.glDisable(OpenMayaRender.MGL_POINT_SMOOTH)
                glFT.glEnable(OpenMayaRender.MGL_LIGHTING)
                glFT.glPopMatrix()
                glFT.glPopAttrib()
                view.endGL()
コード例 #11
0
def generateIcon( preset ):
	'''
	given a preset object, this method will generate an icon using the currently active viewport.  the
	path to the icon is returned
	'''
	sel = cmd.ls(sl=True)
	cmd.select(cl=True)
	panel = getMostLikelyModelView()
	if panel is None:
		raise AnimLibException('cannot determine which panel to use for icon generation')

	#store some initial settings, change them to what is required, and then restored at the very end
	settings = "-df", "-cv", "-ca", "-nurbsCurves", "-nurbsSurfaces", "-lt", "-ha", "-dim", "-pv", "-ikh", "-j", "-dy"
	initialStates = []

	for setting in settings:
		initialStates.append( mel.eval("modelEditor -q %s %s;" % (setting, panel)) )
		mel.eval("modelEditor -e %s 0 %s;" % (setting, panel))

	#this is WAY more involved than doing a playblast, but it also results in prettier icons...  seems like a reasonably tradeoff to me!
	view = OpenMayaUI.M3dView()
	OpenMayaUI.M3dView.getM3dViewFromModelPanel( panel, view )
	xUtil, yUtil, wUtil, hUtil = OpenMaya.MScriptUtil(), OpenMaya.MScriptUtil(), OpenMaya.MScriptUtil(), OpenMaya.MScriptUtil()
	x, y, w, h = xUtil.asUintPtr(), yUtil.asUintPtr(), wUtil.asUintPtr(), hUtil.asUintPtr()
	view.viewport( x, y, w, h )
	x, y, w, h = xUtil.getUint( x ), xUtil.getUint( y ), xUtil.getUint( w ), xUtil.getUint( h )

	#we want a square image, so we need to figure out how best to fit the viewport
	isLandscape = w > h
	if isLandscape:
		x = (w - h) / 2
		w = h
	else:
		y = (h - w) / 2
		h = w

	view.pushViewport( x, y, w, h )
	image = OpenMaya.MImage()
	try:
		view.refresh( False, True, True )
		view.readColorBuffer( image, True )
	finally:
		view.popViewport()

	image.resize( ICON_SIZE, ICON_SIZE )
	image.writeToFile( preset.icon(), ICON_FMT_STR )

	if not preset.icon().exists():
		raise AnimLibException( "icon wasn't written out!" )

	#restore initial state
	try:
		cmd.select(sel)
	except: pass

	for setting, initialState in zip(settings, initialStates):
		mel.eval("modelEditor -e %s %s %s;" % (setting, initialState, panel))
コード例 #12
0
ファイル: mayasceneviewport.py プロジェクト: tws0002/cross3d
	def __init__( self, scene, viewportID=None ): 
		super(MayaSceneViewport, self).__init__(scene, viewportID)
		
		if viewportID == None:
			self._nativePointer = omUI.M3dView.active3dView()
		else:
			self._nativePointer = omUI.M3dView()
			omUI.M3dView.get3dView(viewportID, self._nativePointer)
		self._name = cross3d.SceneWrapper._mObjName(self._nativeCamera())
コード例 #13
0
def getIntersect(vpX, vpY):
    pos = om.MPoint()
    intersect = om.MVector()
    omui.M3dView().active3dView().viewToWorld(int(vpX), int(vpY), pos,
                                              intersect)
    # 射线
    stPos = om.MFloatPoint(pos)
    intersect = om.MFloatVector(intersect)
    return stPos, intersect
コード例 #14
0
    def refreshViewports(self):

        G.deferredManager.removeFromQueue("MT_refreshViewports")

        for loopViewport in utilMod.getAllViewports():

            view = OpenMayaUI.M3dView()
            OpenMayaUI.M3dView.getM3dViewFromModelPanel(loopViewport, view)

            view.refresh(True, True)
コード例 #15
0
    def activeCam(self):
        try:
            maya3DViewHandle = omui.M3dView()
            activeView = maya3DViewHandle.active3dView()

            cameraDP = om.MDagPath()
            maya3DViewHandle.active3dView().getCamera(cameraDP)
            return cameraDP.fullPathName()
        except:
            return '|persp|perspShape'
コード例 #16
0
def thumbnailApiFromView(filename,
                         width,
                         height,
                         modelPanel=None,
                         compression='bmp'):
    '''
    grab the thumbnail direct from the buffer. This viewport capture method
    is apparently flagged as obsolete in the Maya API so this might need some investigation
    in the future!

    :param filename: path to store the image too
    :param width: width of the image to capture
    :param height: height of the image to capture
    :param modelPanel: panel to capture
    :param compression: base format for the image, default is 'bmp'
    '''
    import maya.OpenMaya as OpenMaya
    import maya.OpenMayaUI as OpenMayaUI

    # get modelPanel: always proved a reliable way to get the active modelPanel
    if not modelPanel or not cmds.modelPanel(modelPanel, exists=True):
        modelPanel = cmds.playblast(activeEditor=True).split('|')[-1]

    # Grab the last active 3d viewport
    view = None
    if modelPanel is None:
        view = OpenMayaUI.M3dView.active3dView()
    else:
        try:
            view = OpenMayaUI.M3dView()
            OpenMayaUI.M3dView.getM3dViewFromModelEditor(modelPanel, view)
        except:
            # in case the given modelPanel doesn't exist!!
            view = OpenMayaUI.M3dView.active3dView()
    view.refresh(False, True)  # refresh the current view only

    # read the colour buffer from the view, and save the MImage to disk

    # BUG fix: 28/11/19 : in Viewport2 the image is stored as float and the default format
    # of MImage is BGRA so we're now converting
    # https://around-the-corner.typepad.com/adn/2016/05/get-image-from-m3dviewreadcolorbuffer-in-viewport-2.html
    # http://discourse.techart.online/t/maya-python-super-weird-behaviour-of-m3dview/5649/4
    image = OpenMaya.MImage()
    if view.getRendererName() == view.kViewport2Renderer:
        image.create(view.portWidth(), view.portHeight(), 4,
                     OpenMaya.MImage.kFloat)
        view.readColorBuffer(image, True)
        image.convertPixelFormat(OpenMaya.MImage.kByte)
    else:
        view.readColorBuffer(image, True)
    image.resize(width, height, True)
    try:
        image.writeToFile(filename, compression)
    except StandardError, err:
        log.debug(err)
コード例 #17
0
 def __init__(self):
     OpenMayaMPx.MPxSelectionContext.__init__(self)
     self._setTitleString("moveTool")
     self.setImage("moveTool.xpm", OpenMayaMPx.MPxContext.kImage1)
     self.__currWin = 0
     self.__view = OpenMayaUI.M3dView()
     self.__startPos_x = 0
     self.__endPos_x = 0
     self.__startPos_y = 0
     self.__endPos_y = 0
     self.__cmd = None
コード例 #18
0
ファイル: capture.py プロジェクト: AlexGaida/agcapture
def get_model_editor_screen_port():
    """
	returns the model editor screen position
	:return: <>
	"""
    model_editor = 'modelPanel4'
    view = OpenMayaUI.M3dView()
    OpenMayaUI.M3dView.getM3dViewFromModelEditor(model_editor, view)
    view_y = view.portHeight()
    view_x = view.portWidth()
    return view_x, view_y
コード例 #19
0
    def testObjectPosition(self):
        """
        Tests that an object created interactively is positioned correctly on
        the live surface.
        """
        # Load our reference assembly.
        UsdMaya.LoadReferenceAssemblies()

        # Create a new custom viewport.
        window = cmds.window(widthHeight=(500, 400))
        cmds.paneLayout()
        panel = cmds.modelPanel()
        cmds.modelPanel(panel, edit=True, camera='persp')
        cmds.modelEditor(cmds.modelPanel(panel, q=True, modelEditor=True),
                         edit=True,
                         displayAppearance='smoothShaded',
                         rnm='vp2Renderer')
        cmds.showWindow(window)

        # Force all views to re-draw. This causes us to block until the
        # geometry we're making live has actually been evaluated and is present
        # in the viewport. Otherwise execution of the test may continue and the
        # create tool may be invoked before there's any geometry there, in
        # which case the tool won't create anything.
        cmds.refresh()

        # Get the viewport widget.
        view = OMUI.M3dView()
        OMUI.M3dView.getM3dViewFromModelPanel(panel, view)
        viewWidget = wrapInstance(long(view.widget()), QWidget)

        # Make our assembly live.
        cmds.makeLive('Block_1')

        # Enter interactive creation context.
        cmds.setToolTo('CreatePolyTorusCtx')

        # Click in the center of the viewport widget.
        QTest.mouseClick(viewWidget, QtCore.Qt.LeftButton,
                         QtCore.Qt.NoModifier,
                         viewWidget.rect().center())

        # Find the torus (it should be called pTorus1).
        self.assertTrue(cmds.ls('pTorus1'))

        # Check the torus's transform.
        # The Block_1 is originally 1 unit deep and centered at the origin, so
        # its original top plane is aligned at z=0.5.
        # It is scaled 5x, which makes the top plane aligned at z=2.5.
        # Then it is translated along z by 4.0, so its top plane is finally
        # aligned at z=6.5.
        translate = cmds.xform('pTorus1', q=True, t=True)
        self.assertAlmostEqual(translate[2], 6.5, places=3)
コード例 #20
0
def getCameraFarClip():
    '''
    Return current camera far clip
    '''
    maya3DViewHandle = omui.M3dView()
    activeView = maya3DViewHandle.active3dView()

    cameraDP = om.MDagPath()
    maya3DViewHandle.active3dView().getCamera(cameraDP)

    camFn = om.MFnCamera(cameraDP)
    return camFn.farClippingPlane();
コード例 #21
0
def parseArgs(transformName,
              view=None):
    """
    Checks input values.

    :param transformName: Name of a transform to nudge from.
    :type transformName: str
    :param view: Optional desired M3dView.
    :type view: OpenMaya.M3dView or Str

    :raises RuntimeError: If transformName isn't a transform or doesn't exist.
    :raises RuntimeError: If view set is not a view.

    :return: view
    :rtype: OpenMaya.M3dView
    """
    if not transformName:
        log.error("No transformName supplied.")
        raise

    if not cmds.objExists(transformName) or \
            not cmds.nodeType(transformName) == "transform":

        log.error("%s either does not exist or"
                  " isn't a transform.")
        raise

    if not view:
        log.debug("Getting active view...")
        view = OpenMayaUI.M3dView.active3dView()

    else:
        if not type(view) is OpenMayaUI.M3dView and type(view) is str:

            log.debug("Converting %s to OpenMayaUI.M3dView..." % view)

            viewStr = view
            view = OpenMayaUI.M3dView()

            try:
                OpenMayaUI.M3dView.getM3dViewFromModelPanel(
                    viewStr, view)

            except:
                log.error("%s is not a model panel or view." % view)
                raise

        else:
            log.error("%s is not a view." % view)
            raise

    return view
コード例 #22
0
ファイル: viewport.py プロジェクト: jonike/mvp
    def iter(cls):
        '''Yield all Viewport objects.

        usage::

            for view in Viewport.iter():
                print v.panel
        '''

        for index in range(cls.count()):
            m3dview = OpenMayaUI.M3dView()
            OpenMayaUI.M3dView.get3dView(index, m3dview)
            yield cls(m3dview)
コード例 #23
0
	def viewToWorld(self,x,y):
		# get current view
		currentView = omui.M3dView().active3dView()
		
		# empty objects
		resultPt = om.MPoint()
		resultVtr = om.MVector()
		
		# conversion
		currentView.viewToWorld(int(x),int(y),resultPt,resultVtr)
		
		# return
		return [resultPt.x,resultPt.y,resultPt.z],[resultVtr.x,resultVtr.y,resultVtr.z]
コード例 #24
0
 def pickerContext(self, *args):
     maya3DViewHandle = omui.M3dView()
     activeView = maya3DViewHandle.active3dView()
     self.Context = 'Context'
     self.meshSelection = cmds.ls(g=1)
     if cmds.draggerContext(self.Context, ex=1):
         cmds.deleteUI(self.Context)
     cmds.draggerContext(self.Context,
                         name=self.Context,
                         pressCommand=self.onPress,
                         releaseCommand=self.onRelease,
                         cursor='crossHair')
     cmds.setToolTo(self.Context)
コード例 #25
0
ファイル: sgCurve.py プロジェクト: jonntd/mayadev-1
    def getIntersectPoint(mouseX, mouseY, meshDagPath=None):

        activeView = OpenMayaUI.M3dView().active3dView()
        nearPoint = OpenMaya.MPoint()
        farPoint = OpenMaya.MPoint()
        activeView.viewToWorld(mouseX, mouseY, nearPoint, farPoint)

        if meshDagPath:
            meshMatrix = meshDagPath.inclusiveMatrix()
            invMtx = meshDagPath.inclusiveMatrixInverse()

            nearPoint *= invMtx
            farPoint *= invMtx

            fnMesh = OpenMaya.MFnMesh(meshDagPath)
            intersectPoints = OpenMaya.MPointArray()

            fnMesh.intersect(nearPoint, farPoint - nearPoint, intersectPoints)

            if not intersectPoints.length(): return None

            if intersectPoints.length() == 1:
                return intersectPoints[0] * meshMatrix
            elif intersectPoints.length() > 1:
                pointCenter = (OpenMaya.MVector(intersectPoints[0]) +
                               OpenMaya.MVector(intersectPoints[1])) / 2.0
                return pointCenter * meshMatrix
        else:
            activeView = OpenMayaUI.M3dView().active3dView()
            camDagPath = OpenMaya.MDagPath()
            activeView.getCamera(camDagPath)

            fnCam = OpenMaya.MFnCamera(camDagPath)
            focalLength = fnCam.focalLength()

            camVector = OpenMaya.MVector(farPoint) - OpenMaya.MVector(
                nearPoint)
            camVector.normalize()
            return camVector * focalLength + nearPoint
コード例 #26
0
 def SavePic_zwz(self, myModelPlane, Frame):
     view = apiUI.M3dView()
     apiUI.M3dView.getM3dViewFromModelPanel(myModelPlane, view)
     myCamera = mc.modelPanel(myModelPlane, q=True, camera=True)
     myCameraShortName = myCamera.split(":")[-1]
     myCameraShortName = myCameraShortName.replace('|','')
     img = om.MImage()
     view.readColorBuffer(img, True)
     myPath = '%s\\%s' % (self.movieFullPath, myCameraShortName)
     if not os.path.isdir(myPath):
         os.makedirs(myPath)
     fileName = str('%s\\%s.%04d.%s' % (myPath, myCameraShortName, Frame, self.TexModel)).encode('gb2312')
     img.writeToFile(fileName, self.TexModel)
コード例 #27
0
ファイル: capture.py プロジェクト: AlexGaida/agcapture
def get_model_editor_screen_position():
    """
	returns the model editor screen position
	:return:
	"""
    model_editor = 'modelPanel4'
    x = create_int_ptr()
    y = create_int_ptr()
    view = OpenMayaUI.M3dView()
    OpenMayaUI.M3dView.getM3dViewFromModelEditor(model_editor, view)
    view.getScreenPosition(x, y)
    view_x = get_int_from_int_ptr(x)
    view_y = get_int_from_int_ptr(y)
    return view_x, view_y
コード例 #28
0
def getViewportClick(screenX, screenY):
    '''
    return world position and direction of the viewport clicked point (returns point objects)
    '''
    maya3DViewHandle = omui.M3dView()
    activeView = maya3DViewHandle.active3dView()

    clickPos = om.MPoint()
    clickDir = om.MVector()

    activeView.viewToWorld(int(screenX), int(screenY), clickPos, clickDir)

    worldPos = point(clickPos.x, clickPos.y, clickPos.z)
    worldDir = point(clickDir.x, clickDir.y, clickDir.z)

    return worldPos,worldDir
コード例 #29
0
    def worldToView(self, mPt):
        # get current view
        currentView = omui.M3dView().active3dView()

        # empty objects
        xPos = om.MScriptUtil().asShortPtr()
        yPos = om.MScriptUtil().asShortPtr()

        # conversion
        value = currentView.worldToView(mPt, xPos, yPos)

        x = om.MScriptUtil().getShort(xPos)
        y = om.MScriptUtil().getShort(yPos)

        # return
        return x, y
コード例 #30
0
 def getIntersectPointAndNormal( mouseX, mouseY, meshGrps = [] ):
     
     activeView = OpenMayaUI.M3dView().active3dView()
     nearPoint = OpenMaya.MPoint()
     farPoint  = OpenMaya.MPoint()
     activeView.viewToWorld( mouseX, mouseY, nearPoint, farPoint )
     
     meshShapes = []
     for meshGrp in meshGrps:
         if cmds.nodeType( meshGrp ) == 'mesh':
             meshShapes.append( meshGrp )
         elif cmds.nodeType( meshGrp ) == 'transform':
             shapes = cmds.listRelatives( meshGrp, s=1, f=1 )
             for shape in shapes:
                 if cmds.getAttr( shape + '.io' ): continue
                 if cmds.nodeType( shape ) == 'mesh':
                     meshShapes.append( shape )
     
     allIntersectPointAndNormal = []
     for meshShape in meshShapes:
         meshDagPath = getDagPath( meshShape )
         meshMatrix = meshDagPath.inclusiveMatrix()
         invMtx = meshDagPath.inclusiveMatrixInverse()
         
         localNearPoint = nearPoint * invMtx
         localFarPoint  = farPoint * invMtx
         
         fnMesh = OpenMaya.MFnMesh( meshDagPath )
         intersectPoints = OpenMaya.MPointArray()
         fnMesh.intersect( localNearPoint, localFarPoint - localNearPoint, intersectPoints )
         if intersectPoints.length():
             normal = OpenMaya.MVector()
             fnMesh.getClosestNormal( intersectPoints[0], normal, OpenMaya.MSpace.kTransform )
             allIntersectPointAndNormal.append( [intersectPoints[0]*meshMatrix, normal.normal()*meshMatrix] )
     
     if allIntersectPointAndNormal:
         minDist = 100000000.0
         minDistIndex = 0
         for i in range( len(allIntersectPointAndNormal) ):
             point, normal = allIntersectPointAndNormal[i]
             dist = nearPoint.distanceTo( point )
             if dist < minDist:
                 minDist = dist
                 minDistIndex = i
         return allIntersectPointAndNormal[minDistIndex]
     else:
         return OpenMaya.MPoint(), OpenMaya.MVector(0,1,0)