- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Examples

# lineManipContainer.h

    //-
    // ==========================================================================
    // Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
    //
    // Use of this software is subject to the terms of the Autodesk
    // license agreement provided at the time of installation or download,
    // or which otherwise accompanies this software in either electronic
    // or hard copy form.
    // ==========================================================================
    //+

    #include <maya/MTypeId.h>
    #include <maya/MTypes.h>
    #include <maya/MPxManipulatorNode.h>
    #include <maya/MPxManipContainer.h>
    #include <maya/MFnPlugin.h>
    #include <maya/MObjectHandle.h>
    #include <maya/MPxCommand.h>
    #include <maya/MSyntax.h>
    #include <maya/MDagModifier.h>

    #include <maya/M3dView.h>
    #include <maya/MGLFunctionTable.h>

    #include "manipulatorMath.h"

    //
    // Manipulator class
    //
    class lineManip : public MPxManipulatorNode
    {
    public:
        lineManip();
        ~lineManip();

        // Important virtuals to implement
        virtual void draw(M3dView &view, const MDagPath &path,
                    M3dView::DisplayStyle style, M3dView::DisplayStatus status);

        virtual MStatus doPress( M3dView& view );
        virtual MStatus doDrag( M3dView& view );
        virtual MStatus doRelease( M3dView& view );

        // Standard required methods
        static void* creator();
        static MStatus initialize();

        // Utility method
        MStatus updateDragInformation();

        // Node id
        static MTypeId id;

        // Manipulator changes behaviour based on the setting
        // of these two booleans
        bool affectScale;
        bool affectTranslate;

    private:
        // GL component name used for drawing and picking
        MGLuint lineName;
        // Simple plane math class
        planeMath plane;
        // Modified mouse position
        MPoint mousePointGlName;
    };

    //
    // Manipulator container which will hold two lineManip nodes
    //
    class lineManipContainer : public MPxManipContainer
    {
    public:
        lineManipContainer();
        virtual ~lineManipContainer();

        // Important virtuals to implement
        virtual MStatus createChildren();
        virtual MStatus connectToDependNode(const MObject & node);
        virtual void draw(M3dView &view, const MDagPath &path,
                        M3dView::DisplayStyle style, M3dView::DisplayStatus status);

        // Utility method to return the nodeTranslation of
        // fDagPath
        MVector nodeTranslation() const;

        // Standard required methods
        static void * creator();
        static MStatus initialize();

        // Node id
        static MTypeId id;

    public:
        MDagPath fNodePath;
    };