Files
envi-code/SourceCode/Code2026/tg_shs/shs_pipebase/THImpHvacOffset.h
T
2026-09-28 15:28:50 +08:00

235 lines
8.9 KiB
C++
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
// 暖乙子弯实现类
//
// 乙子弯示意图(角接类型, 其他类型详见管件类型.doc):
//
// 水平放置: 侧面垂直放置: 正面垂直放置:
// ┃ ┏━━━━━┓ ┏━━━━━┓
// ┃\ ┃ ┃ ┃ ┃
// ┃ \ ┃ ③ ┃ ┃ ┃
// ③ ① \ ┃ ① ┃ ③ ① ② ④
// ┃ \ ┃ ┃ ┃ ┃
// ┃ \ ┃ ┃ ┃ ┃
// \ ┃ ┣━━━━━┫ ┗━━━━━┛
// \ ┃ ┃ ┃
// \ ┃ ┃ ④ ┃
// \ ② ④ ┃ ② ┃
// \ ┃ ┃ ┃
// \┃ ┗━━━━━┛
//
//
// 夹点说明:
// ①②: 移动点
// ③④: 命令点,用于引出新管线
#if !defined(AFX_THIMPHVACOFFSET_H__)
#define AFX_THIMPHVACOFFSET_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "TImpSpecFitting.h"
class THImpHvacOffset : public TImpSpecFitting
{
public:
THImpHvacOffset();
virtual ~THImpHvacOffset();
protected:
//{{AFX_ARX_METHODS(THImpHvacOffset)
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 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 ExplodeOrDraw3d(XExplodeDraw &mode) const;
virtual Acad::ErrorStatus ExplodeOrDraw2d(XExplodeDraw &mode) const;
virtual AcDbPolyline* MakePolyCurve() const;
virtual BOOL MakeCurves(TComplexCurve& compCurve) const;
virtual BOOL GetCurvesInSide(TComplexCurve& compCurve) const;
virtual BOOL MakePolyCurveFaces(AcDbVoidPtrArray& arFaces);
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;
virtual AcGeVector3d normal() 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;
// add by 2011.02.10 剖切功能 注意 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 OnMoveGripPointMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs);
// 对象移动消息处理
BOOL OnTransformMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs);
// 尺寸调整消息处理
BOOL OnSizeMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs);
// 移动夹点处理
Acad::ErrorStatus MoveTransGripPointsAt(TDb::Position ePos, const AcGeVector3d& offset, BOOL bAutoWork);
// 命令夹点处理
Acad::ErrorStatus MoveCommandGripPointsAt(TDb::Position ePos, const AcGeVector3d& offset);
// 移动夹点,实现自由移动
Acad::ErrorStatus MoveGripRandom(TDb::Position ePos, const AcGeVector3d& offset );
// 辅助函数
// 获取接口尺寸数据type,size,size1
BOOL GetInterfaceSizeData(int nIndex, TInterface& pipeInterface) const;
// 是否水平放置
BOOL IsHorzAlignment() const;
// 是否侧面垂直放置
BOOL IsSideVertAlignment() const;
// 是否正面垂直放置
BOOL IsFaceVertAlignment() const;
// 是否是单线
BOOL IsSingleLine() const;
// 是否绘制中心线
BOOL IsBaseLine() const;
// 管向量
AcGeVector3d StartVect() const;
AcGeVector3d EndVect() const;
/*
0━7
┃ \
┃ \
S ┃ \
┃ \
┃ \
1━2 6━ 5
\ ┃
\ ┃
\ ┃
\ ┃ E
\ ┃
3━4
*/
void GetMidKeyPoints( AcGePoint3dArray &ptArr, BOOL bSingleLine = FALSE) const;
// 创建关键的两面16个点
BOOL GetTwoSideKeyPoints( AcGePoint3dArray &ptUpArr, AcGePoint3dArray &ptDownArr, BOOL bSingleLine = FALSE) const;
// 得到双弧类型中心弧线多段线各点
// 如有变径,在起始端变
// 0-7点说明:起始端、起始弧点、起始弧中点、中点、末端弧中点、末端弧点、末端点
/*
0----1\
--\--2--\
--\
 3
\--
\--4--\
5----6
*/
BOOL GetArcBaseKeyPt(AcGePoint3dArray &ptKeyArr) const;
// 以中线线弧点为基准,得到双弧类型两边多段线各点(左右从起始法向看),推到方法同弯头
// bSingleLine:是否是单线模式,用于polyline和3Dface,而单线三维也要求正常显示
BOOL GetArcTwoSideKeyPt(AcGePoint3dArray &ptArrLeft, AcGePoint3dArray &ptArrRight, BOOL bSingleLine = FALSE) const;
// 得到所有按分度角划分后的点
void GetAllMinAnglePt(AcGePoint3dArray &ptArrLeftPart, AcGePoint3dArray &ptArrRightPart, BOOL bSingleLine = FALSE) const;
// 是否能够绘制正确的乙子弯
BOOL IsCanDraw() const;
// 检验特性表修改参数是否合法
BOOL ValidOpmCanDraw(const CString &csKey, TDb::OPMInfo* pInfo);
// 获取边线、中线/端部线宽
double GetEdgeLineWidth() const;
double GetCentLineWidth() const;
double GetEndLineWidth() const;
// 3D 绘制
Acad::ErrorStatus ExplodeOrDrawRectArcuate3d(XExplodeDraw &mode) const ; // 矩形双弧
Acad::ErrorStatus ExplodeOrDrawRectLinear3d(XExplodeDraw &mode) const ; // 矩形角接
Acad::ErrorStatus ExplodeOrDrawCircleArcuate3d(XExplodeDraw &mode) const ; // 圆形双弧
Acad::ErrorStatus ExplodeOrDrawCircleLinear3d(XExplodeDraw &mode) const ; // 圆形角接
// 2D Curve 绘制
BOOL MakeHorizArcuate2DCurves(TComplexCurve& cplCurve, const int &nOutOrIn) const; // 双弧放置
BOOL MakeHorizLinear2DCurves(TComplexCurve& cplCurve, const int &nOutOrIn) const; // 角接放置
BOOL MakeSideVertRect2DCurves(TComplexCurve& cplCurve, const int &nOutOrIn) const; // 侧垂直矩形放置
BOOL MakeSideVertCircle2DCurves(TComplexCurve& cplCurve, const int &nOutOrIn) const; // 侧垂直圆形放置
BOOL MakeFaceVert2DCurves(TComplexCurve& cplCurve, const int &nOutOrIn) const; // 正垂直放置
// PolyCurve 绘制
AcDbPolyline* MakeHorizArcuatePolyCurves() const; // 水平双弧放置
AcDbPolyline* MakeHorizLinearPolyCurves() const; // 水平角接放置
AcDbPolyline* MakeSideVertRectPolyCurves() const; // 侧垂直矩形放置
AcDbPolyline* MakeSideVertCirclePolyCurves() const; // 侧垂直圆形放置
AcDbPolyline* MakeFaceVertPolyCurves() const; // 正垂直放置
// PolyCurves围成的 3Dface面 绘制
BOOL MakeHorizArcuateCurvesFaces(AcDbVoidPtrArray& arFaces) const; // 水平放置
BOOL MakeHorizLinearCurvesFaces(AcDbVoidPtrArray& arFaces) const; // 水平放置
BOOL MakeSideVertRectCurvesFaces(AcDbVoidPtrArray& arFaces) const; // 侧垂直矩形放置
BOOL MakeSideVertCircleCurvesFaces(AcDbVoidPtrArray& arFaces) const; // 侧垂直圆形放置
BOOL MakeFaceVertCurvesFaces(AcDbVoidPtrArray& arFaces) const; // 正垂直放置
AcDbObjectId GetBaseLayerId() const;
// 端部壳对象
int GetEndSideShell(TXShell& xShell);
// 获取角度双弧为半圆弧弧度,角接为倾斜角度
double GetAngle();
// 通过起始点及角度计算末点
AcGePoint3d GetEndPointByAngle();
// 通过起始点及长度参数等计算末点
AcGePoint3d GetEndPtByLength();
// 生成3D轮廓PL线 iFlag: 1 顶面 2 底面 3 前面 4 背面
BOOL Make3DOutline(TGGePoly2D& poly, int iFlag) const;
BOOL MakeRect3DOutline(TGGePoly2D& poly, int iFlag) const; // 方形
BOOL MakeCirc3DOutline(TGGePoly2D& poly, int iFlag) const; // 圆形
};
#endif // !defined(AFX_THIMPHVACOFFSET_H__)