#ifndef __TEImpCabReducer_H__ #define __TEImpCabReducer_H__ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "TImpSpecFitting.h" class TEImpCabReducer : public TImpSpecFitting { public: TEImpCabReducer(); virtual ~TEImpCabReducer(); public: // 接口描述对象 virtual BOOL GetInterface(int nIndex,TInterface& pipeInterface) const; virtual BOOL GetInterface(const AcGePoint3d& ptCon,TInterface& pipeInterface) const; virtual BOOL HasInterface(const AcGePoint3d& ptCon,const AcGeVector3d& vtDir); virtual int GetInterfaceCount() const; // 建立接口关联关系 virtual BOOL SetInterfaceRelation(const AcGePoint3d& ptConnect,const AcDbObjectId& idConnect); // 移除接口关联关系 virtual BOOL RemoveInterfaceRelation(const AcGePoint3d& ptConnect,const AcDbObjectId& idConnect); // 接口更改通知 virtual BOOL NotifyInterfaceToModify(const TInterfaceModifyMsg& iModiMsg,TInterfaceModifyMsgs& iModiMsgs); virtual TDb::Position ExplainGripIndex(int nIndex) const; virtual void GetKindName(CString& sName); public: virtual BOOL GetCurvesInSide(TComplexCurve& compCurve) const; virtual BOOL MakePolyCurveFaces(AcDbVoidPtrArray& arFaces); virtual BOOL MakeCurves(TComplexCurve& cplCurve) const; BOOL NoneConectLineIfNeed(TComplexCurve& cplCurve) const; virtual AcDbPolyline* MakePolyCurve() const; virtual void GetTips(CMapStringToString& mapLable2Tip) const; //获取三维的壳对象 virtual int GetXBaseShell(TXShell& xShell); //获取体的范围方块 virtual int GetBodyBox(AcDbExtents& ext); virtual CString GetXml() const; virtual CString GetXml(const AcGeMatrix3d& mat) const; // add by 2011.02.21 剖切功能 注意 GetSection内不应将std::vector参数清空 virtual bool GetSection(const AcDbFace &face, const AcGeVector3d &vtPlaneSecDir, std::vector §ionRecord, AcDbVoidPtrArray& arFillPtrs) const; // 剖切用,返回Z坐标最高、最低点 virtual Acad::ErrorStatus GetExtents(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const; public: //{{AFX_ARX_METHODS(TEImpCabReducer) virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &mode) const; virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &mode) const; virtual Acad::ErrorStatus getGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const; virtual Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform); virtual Acad::ErrorStatus getOsnapPoints(AcDb::OsnapMode osnapMode, INT_PTR gsSelectionMark, const AcGePoint3d& pickPoint, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray& geomIds) const; virtual void list() const; virtual Acad::ErrorStatus getClassID(CLSID* pClsid) const; //}}AFX_ARX_METHODS protected: static void FreeBuffer(AcDbVoidPtrArray& arCurves); BOOL OnMoveGripPointMsgNotify(const TInterfaceModifyMsg& iModiMsg,TInterfaceModifyMsgs& iModiMsgs); BOOL OnTransformByMsgNotify(const TInterfaceModifyMsg& iModiMsg,TInterfaceModifyMsgs& iModiMsgs); BOOL OnSizeMsgNotify(const TInterfaceModifyMsg& iModiMsg,TInterfaceModifyMsgs& iModiMsgs); private: // 槽式下平异径接头的夹点移动动作 Acad::ErrorStatus OnBottomHorDifRMoveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset); // 获取垂足点 BOOL GetVerticalFootPoint(const AcGePoint3d& pickPoint, const AcGePoint3d& lastPoint, AcGePoint3d& ptVerFoot) const; //获取中心线 BOOL GetReducerMidLine(TComplexCurve& compCurve) const; // 获取最近点 BOOL GetNearestPoint(const AcGePoint3d& pickPoint, AcGePoint3d& ptNear) const; // 判断当前视口是否为3d BOOL EnsureCurViewPortIs3D(const AcGeVector3d& vtNormal) const; // 槽式下平异径3d BOOL ExplodeOrDraw3dDifR(XExplodeDraw &mode) const; // 槽式下平普通异径3d BOOL ExplodeOrDraw3dNorDifR(XExplodeDraw &mode) const; // 槽式下平偏移异径3d BOOL ExplodeOrDraw3dOffDifR(XExplodeDraw &mode) const; // 槽式下平异径2d void MakeCurvesOfHorDifR2D(TComplexCurve& cplCurve,int& nNum) const; // 槽式下平普通异径2d void MakeCurvesOfHorNorDifR2D(TComplexCurve& cplCurve,int& nNum) const; // 槽式下平偏移异径2d void MakeCurvesOfHorOffDifR2D(TComplexCurve& cplCurve,int& nNum) const; // makepolyface void MakePolyCurveFacesOfBHDifR(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfBHDifRZNor(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfBHDifRNoZNor(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfNorDifR(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfNorDifRZNor(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfNorDifRNoZNor(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfOffDifR(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfOffDifRZNor(AcDbVoidPtrArray& arFaces); void MakePolyCurveFacesOfOffDifRNoZNor(AcDbVoidPtrArray& arFaces); //MakePolyCurve void MakePolyCurveOfBHDifR(AcDbPolyline*& pPl) const; void MakePolyCurveOfNorDifR(AcDbPolyline*& pPl) const; void MakePolyCurveOfOffDifR(AcDbPolyline*& pPl) const; void FormatPolyline(AcDbPolyline*& pPl,TComplexCurve& cplCurve,int nNum) const; AcDbFace* CreateAcDbFace(const AcGePoint3d& pt1,const AcGePoint3d& pt2,const AcGePoint3d& pt3,const AcGePoint3d& pt4); BOOL GetIndexOfPointIsOn(TComplexCurve& cplCurv,const AcGePoint3d& ptOn,int& nIndex) const; CString GetCurrentTypeName() const; //通过点得到最大范围 int GetBoxExtendByPts(const AcGePoint3dArray &arPts,AcDbExtents& ext); //获取外壳 int GetXBaseShellNorDifR(TXShell& xShell); int GetXBaseShellOffDifR(TXShell& xShell); //获取体的范围方块 int GetBodyBoxNorDifR(AcDbExtents& ext); int GetBodyBoxOffDifR(AcDbExtents& ext); Acad::ErrorStatus ExplodeOrDraw3dOfC(XExplodeDraw &mode) const; Acad::ErrorStatus ExplodeOrDraw3dOfT(XExplodeDraw &mode) const; Acad::ErrorStatus ExplodeOrDraw3dOfP(XExplodeDraw &mode) const; BOOL ExplodeOrDraw3dOffDifROfT(XExplodeDraw &mode) const; BOOL ExplodeOrDraw3dNorDifROfT(XExplodeDraw &mode) const; void DrawCube(XExplodeDraw &mode,const AcGeVector3d &vtDir, const AcGePoint3dArray &ptArr, double dThick) const; }; #endif // __TEImpCabReducer_H__