Files
envi-code/SourceCode/Code2026/tg_shs/shs_pipebase/THImpHvacReducer.h
T
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

192 lines
9.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 暖通变径实现类
//
// ┏━━━━━━━━━━━┓ ┏━┳━━━┳━┓
// ┃ ┃ ┃ ┃ ③┃ ┃
// ③①━━____ ┃ ┃ ┃ ① ┃ ┃
// ┃ ~~~~___ ┃ ┃ ┃ ┃ ┃
// ┗___ ~~~ ━②④ ┃ ┗━②━┛ ┃
// ~~~___ ┃ ┃ / \ ┃
// ~~__ ┃ ┃ / \ ┃
// ~~__ ┃ ┃/ \┃
// ~~┛ ┗━━━━━━━┛
//
// 夹点说明:
// ①: 变径左端点,移动点
// ②: 变径右端点,移动点
// ③: 左端命令激活点/上下命令激活点
// ④: 右端命令激活点
#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> &sectionRecord, 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__)