191 lines
8.5 KiB
C++
191 lines
8.5 KiB
C++
// 暖通变径实现类
|
||||
|
|
//
|
|||
|
|
// ┏━━━━━━━━━━━┓ ┏━┳━━━┳━┓
|
|||
|
|
// ┃ ┃ ┃ ┃ ③┃ ┃
|
|||
|
|
// ③①━━____ ┃ ┃ ┃ ① ┃ ┃
|
|||
|
|
// ┃ ~~~~___ ┃ ┃ ┃ ┃ ┃
|
|||
|
|
// ┗___ ~~~ ━②④ ┃ ┗━②━┛ ┃
|
|||
|
|
// ~~~___ ┃ ┃ / \ ┃
|
|||
|
|
// ~~__ ┃ ┃ / \ ┃
|
|||
|
|
// ~~__ ┃ ┃/ \┃
|
|||
|
|
// ~~┛ ┗━━━━━━━┛
|
|||
|
|
//
|
|||
|
|
// 夹点说明:
|
|||
|
|
// ①: 变径左端点,移动点
|
|||
|
|
// ②: 变径右端点,移动点
|
|||
|
|
// ③: 左端命令激活点/上下命令激活点
|
|||
|
|
// ④: 右端命令激活点
|
|||
|
|
|
|||
|
|
|
|||
|
|
#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<TObjSectionRecord>参数清空
|
|||
|
|
virtual bool GetSection(const AcDbFace &face, const AcGeVector3d &vtPlaneSecDir,
|
|||
|
|
std::vector<TObjSectionRecord> §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__)
|