// 暖通变径实现类 // // ┏━━━━━━━━━━━┓ ┏━┳━━━┳━┓ // ┃ ┃ ┃ ┃ ③┃ ┃ // ③①━━____ ┃ ┃ ┃ ① ┃ ┃ // ┃ ~~~~___ ┃ ┃ ┃ ┃ ┃ // ┗___ ~~~ ━②④ ┃ ┗━②━┛ ┃ // ~~~___ ┃ ┃ / \ ┃ // ~~__ ┃ ┃ / \ ┃ // ~~__ ┃ ┃/ \┃ // ~~┛ ┗━━━━━━━┛ // // 夹点说明: // ①: 变径左端点,移动点 // ②: 变径右端点,移动点 // ③: 左端命令激活点/上下命令激活点 // ④: 右端命令激活点 #if !defined(__THIMPHVACREDUCER_H__) #define __THIMPHVACREDUCER_H__ #include "TImpSpecFitting.h" class THImpHvacReducer : public TImpSpecFitting { public: THImpHvacReducer(); virtual ~THImpHvacReducer(); protected: //{{AFX_ARX_METHODS(THImpHvacElbow) virtual BOOL IsValid(TDbXDataMap* pXMap); virtual void GetKindName(CString& sName); virtual int GetInterfaceCount() const; virtual BOOL GetInterface(int nIndex,TInterface& pipeInterface) const; virtual BOOL GetInterface(const AcGePoint3d& ptConnect,TInterface& pipeInterface) const; virtual BOOL HasInterface(const AcGePoint3d& ptConnect,const AcGeVector3d& vtDir); 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 Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &mode) const; virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &mode) const; virtual AcDbPolyline* MakePolyCurve() const; virtual BOOL MakeCurves(TComplexCurve& cplCurve) const; virtual BOOL GetCurvesInSide(TComplexCurve& compCurve) const; virtual BOOL MakePolyCurveFaces(AcDbVoidPtrArray& arFaces); virtual Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform); virtual TDb::Position ExplainGripIndex(int nIndex) const; virtual Acad::ErrorStatus getStretchPoints(AcGePoint3dArray& stretchPoints) const; virtual Acad::ErrorStatus getGripPoints(AcGePoint3dArray& gripPoints, AcDbIntArray& osnapModes, AcDbIntArray& geomIds) const; 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 Acad::ErrorStatus moveStretchPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus moveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); virtual Acad::ErrorStatus getClassID(CLSID* pClsid) const; virtual BOOL OPMInfo(LPCTSTR pszName, TDb::OPMInfo* pInfo); virtual void GetTips(CMapStringToString& mapLable2Tip) const; virtual void list() const; //}}AFX_ARX_METHODS public: //获取三维的壳对象 virtual int GetXBaseShell(TXShell& xShell); //获取体的范围方块 virtual int GetBodyBox(AcDbExtents& ext); // add by hh 2010-12-27 导出XML // virtual CString GetXml() const; virtual CString GetXml(const AcGeMatrix3d& mat) const; // mcl add 2011.1.30 剖切功能。 注意 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; // add by hh 2014-08-06 支持管件与水管遮挡 virtual Acad::ErrorStatus GetClipBoundary(TGGePoly2D& poly)const; virtual bool IsMeClip() const; virtual bool IsClipMe(const TEntityBase* pEnt=NULL)const;//ok是否被裁剪 private: // 变径是否水平放置 BOOL IsHorzAlignment() const; // 变径是否垂直放置 BOOL IsVertAlignment() const; // 变径是否倾斜放置 BOOL IsInclineAlignment() const; // 是否是单线变径 BOOL IsSingleLine() const; // 返回两侧端面法向,起始侧面向外 AcGeVector3d GetSectNormal() const; // 获取接口尺寸数据type,size,size1 BOOL GetInterfaceSizeData(int nIndex, TInterface& pipeInterface) const; // 夹点移动消息处理 BOOL OnMoveGripPointMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs); // 对象移动消息处理 BOOL OnTransformMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs); // 尺寸调整消息处理 BOOL OnSizeMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs); //Acad::ErrorStatus OnCHorEqualRMoveGripPointsAt(const AcDbIntArray& indices, const AcGeVector3d& offset); // 绘制三维图形 void ExplodeRect2Rect3d(XExplodeDraw& mode) const; // 方对方 void ExplodeRect2Cir3d(XExplodeDraw& mode, BOOL bStartIsRound = FALSE) const; // 方对圆 void ExplodeCir2Rect3d(XExplodeDraw& mode) const; // 圆对方 void ExplodeCir2Cir3d(XExplodeDraw& mode) const; // 圆对圆 // 水平构建外轮廓 AcDbPolyline* MakeRect2RectPolyCurve() const; // 方对方 AcDbPolyline* MakeRect2CirPolyCurve() const; // 方对圆 AcDbPolyline* MakeCir2RectPolyCurve() const; // 圆对方 AcDbPolyline* MakeCir2CirPolyCurve() const; // 圆对圆 // 倾斜变径PolyCurve AcDbPolyline* MakeIncCir2CirPolyCurve() const; // 圆对圆 // 倾斜变径2D绘制 BOOL MakeIncCir2Cir2DCurves(TComplexCurve& cplCurve, int &nType) const; // 圆对圆 // 倾斜变径所围平面的3DFace组 BOOL MakeIncCir2CirPolyCurveFaces(AcDbVoidPtrArray& arFaces); // 圆对圆Face // 水平构建二维图形 nType:外轮廓还是内部线, 0:外轮廓, 1内部线 BOOL MakeRect2Rect2DCurves(TComplexCurve& cplCurve, int &nType) const; // 方对方 BOOL MakeRect2Cir2DCurves(TComplexCurve& cplCurve, int &nType, BOOL bStartIsRound = FALSE) const; // 方对圆 BOOL MakeCir2Rect2DCurves(TComplexCurve& cplCurve, int &nType) const; // 圆对方 BOOL MakeCir2Cir2DCurves(TComplexCurve& cplCurve, int &nType) const; // 圆对圆 // 水平构建外轮廓所围平面的3DFace组 BOOL MakeRect2RectPolyCurveFaces(AcDbVoidPtrArray& arFaces); // 方对方 BOOL MakeRect2CirPolyCurveFaces(AcDbVoidPtrArray& arFaces); // 方对圆 BOOL MakeCir2RectPolyCurveFaces(AcDbVoidPtrArray& arFaces); // 圆对方 BOOL MakeCir2CirPolyCurveFaces(AcDbVoidPtrArray& arFaces); // 圆对圆 // 垂直构建外轮廓 AcDbPolyline* MakePolyCurveVer() const; AcDbPolyline* MakeRect2RectPolyCurveVer() const; // 方对方 AcDbPolyline* MakeRect2CirPolyCurveVer() const; // 方对圆 AcDbPolyline* MakeCir2RectPolyCurveVer() const; // 圆对方 AcDbPolyline* MakeCir2CirPolyCurveVer() const; // 圆对圆 // 垂直构建二维图形 nType:外轮廓还是内部线, 0:外轮廓, 1内部线 BOOL MakeRect2Rect2DCurvesVer(TComplexCurve& cplCurve, int &nType) const; // 方对方 BOOL MakeRect2Cir2DCurvesVer(TComplexCurve& cplCurve, int &nType, BOOL bStartIsRound = FALSE) const; // 方对圆 BOOL MakeCir2Rect2DCurvesVer(TComplexCurve& cplCurve, int &nType) const; // 圆对方 BOOL MakeCir2Cir2DCurvesVer(TComplexCurve& cplCurve, int &nType) const; // 圆对圆 // 垂直构建外轮廓所围平面的3DFace组 void MakePolyCurveFacesVer(AcDbVoidPtrArray& arFaces); BOOL MakeRect2RectPolyCurveFacesVer(AcDbVoidPtrArray& arFaces); // 方对方 BOOL MakeRect2CirPolyCurveFacesVer(AcDbVoidPtrArray& arFaces); // 方对圆 BOOL MakeCir2RectPolyCurveFacesVer(AcDbVoidPtrArray& arFaces); // 圆对方 BOOL MakeCir2CirPolyCurveFacesVer(AcDbVoidPtrArray& arFaces); // 圆对圆 // 构建决定遮挡面, pt1, pt2, pt3分别为面上不同三点,vtNormal为法向,dEle返回距原点高度 // AcGePlane GetHidePlane(AcGePoint3d pt1, AcGePoint3d pt2, AcGePoint3d pt3, // const AcGeVector3d vtNormal, double &dEle) const; // 构建决定遮挡面, pt1面上点 AcGePlane GetStdPrjPlan( const AcGePoint3d &ptOnPlan ) const; // 获得外轮廓点 void GetOutVertex(AcGePoint3dArray& arPoint, TDb::HvacSectType eStart, TDb::HvacSectType eEnd) const; void GetOutVertex2(AcGePoint3dArray& arPoint, bool bGetStartVertex) const; // 获取边线、中线,端线宽 double GetEdgeLineWidth() const; double GetCentLineWidth() const; double GetEndLineWidth() const; // 法兰出头边,现在法兰单独连接,不需要了。 double GetPlusEdge() const; // 拖拽管件,支持转向等操作 Acad::ErrorStatus MoveGripRandom(TDb::Position ePos, const AcGeVector3d& offset ); // 自动获取末点位置, dSizeSub:两端较大尺寸差(宽度、厚度都有差值时按较大差值者) // vtEnd:末向量, dOffset::偏心距离, dPlus:法兰边 AcGePoint3d GetEndPtAuto(); // 角度法获取末点 dAngle:变径两边形成的角度 AcGePoint3d GetEndPtByangle(); // 长度法获取末点 dLen:变径在末端法向上的距离长度 AcGePoint3d GetEndPtByLen(); // 获取两端最大尺寸差 double GetMaxSizeSub(); }; #endif // !defined(__THIMPHVACREDUCER_H__)