#ifndef shaveBrushManip_h #define shaveBrushManip_h // Shave and a Haircut // (c) 2019 Epic Games // US Patent 6720962 #include #include #include #include #include #include #include #if MAYA_API_VERSION < 20180000 class MDagPath; #endif class QWidget; class shaveBrushManip : public MPxManipContainer { friend class shaveBrushOverride; public: static MString drawDbClassification; static MString drawRegistrantId; //test need to invoke geometry override to update static MObject trigger; MObject thisObj; void dirtyDisplay(){MHWRender::MRenderer::setGeometryDrawDirty(thisMObject());} //void preDrawUI (const M3dView &view) //{ // MHWRender::MRenderer::setGeometryDrawDirty(thisMObject()); //} shaveBrushManip(); virtual ~shaveBrushManip(); virtual MStatus connectToDependNode(const MObject& node); virtual MStatus createChildren(); static void* creator() { return new shaveBrushManip; } virtual void draw( M3dView& view, const MDagPath& path, M3dView::DisplayStyle dStyle, M3dView::DisplayStatus dStatus ); static MStatus initialize(); void getBrushRadii(int& rx, int& ry) const; void leaveView(); void redrawBrush() { setBrushPos(mCX, mCY, true); } #if MAYA_API_VERSION >= 201600 virtual SchedulingType schedulingType() const { return kUntrusted; } #endif void setActive(bool active); void setBrushPos( int cx, int cy, bool forceRedraw = false, bool isMayaDraw = false ); void setBrushSize(float brushSize); void setFastBrush(bool fastBrush) { mFastBrush = fastBrush; } static MTypeId id; static MString nodeTypeName; protected: void calculateRadii(); void drawBrush() const; static void drawEllipse(int cx, int cy, unsigned rx, unsigned ry); static void drawMirroredVert(int cx, int cy, int x, int y); bool eraseBrush( M3dView& currentView, bool dontRestoreCurrentView = false ); bool findOldView(M3dView& view) const; bool isSameView(M3dView& view) const; void prepareView(M3dView& view); void restoreView(M3dView& view); void saveView(M3dView& view); static void swapGLBuffers(M3dView& view); float mBrushSize; bool mClearOld; int mCX; int mCY; bool mFastBrush; bool mIsActive; MObject mProxy; unsigned mRX; unsigned mRY; int mViewHeight; int mViewWidth; MNativeWindowHdl mWindow; QWidget* aWidget; #ifdef OSMac_ GLint mViewPosX; GLint mViewPosY; #endif }; class shaveBrushOverride : public MHWRender::MPxGeometryOverride { public: static MPxGeometryOverride* Creator(const MObject& obj) { return new shaveBrushOverride(obj); } virtual ~shaveBrushOverride(); virtual MHWRender::DrawAPI supportedDrawAPIs() const; virtual void updateDG(); virtual void updateRenderItems( const MDagPath& path, MHWRender::MRenderItemList& list); virtual void populateGeometry( const MHWRender::MGeometryRequirements& requirements, const MHWRender::MRenderItemList& renderItems, MHWRender::MGeometry& data ); virtual void cleanUp(); protected: shaveBrushOverride(const MObject& obj); shaveBrushManip* brush; }; #endif