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

233 lines
10 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(__THIMPHVACCROSS_H__)
#define __THIMPHVACCROSS_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "TImpSpecFitting.h"
class THImpHvacCross : public TImpSpecFitting
{
public:
THImpHvacCross();
virtual ~THImpHvacCross();
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 ExplodeOrDraw2d(XExplodeDraw &mode) const;
virtual Acad::ErrorStatus ExplodeOrDraw3d(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;
virtual AcGeVector3d normal() const;
virtual BOOL IsValidConst(TDbXDataMap* pXMap) 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.01.31 剖切功能 注意 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:
void GetInclineValidPts(AcGePoint3dArray &arPts) const;
// 计算圆口斜接及承插的标准结构长度
double InsertLength(double dEndWidth, double dBr1Width, double dBr2Width, double dFlange,
double dAngle, TDb::HvacCrossType eType = TDb::eInsertCross) const;
// 得到边线宽
double GetEdgeLineWidth() const;
// 得到中心线宽
double GetCentLineWidth() const;
// 得到端线宽
double GetEndLineWidth() const;
//得到单线遮挡线宽
BOOL SetSingleDashWidth(double& dSta,double& dEnd,double& dBr1,double& dBr2) const;
// 四通是否水平放置
BOOL IsHorzAlignment() const;
// 四通是否垂直放置
BOOL IsVertAlignment() const;
//主管垂直
BOOL IsStartVertAlignment() const;
//支管垂直
BOOL IsBr1VertAlignment() const;
// 是否是单线四通
BOOL IsSingleLine() const;
BOOL HasBaseLine() 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);
//三维模型
// 特殊
BOOL ExplodeOrDrawSpecial3d(XExplodeDraw &mode) const;
// 普通
void ExplodeOrDrawOrthoCross3d(XExplodeDraw &mode) const;
// 承插
void ExplodeOrDrawInsertCross3d(XExplodeDraw &mode) const;
// 斜接
void ExplodeOrDrawInclineCross3d(XExplodeDraw &mode) const;
// 圆角
void ExplodeOrDrawArcuateCross3d(XExplodeDraw &mode) const;
// 直角
void ExplodeOrDrawLinearCross3d(XExplodeDraw &mode) const;
// 交叉
void ExplodeOrDrawInterCross3d(XExplodeDraw &mode) const;
//二维曲线
// 普通
BOOL MakeOrthoCross2dCurves(TComplexCurve& cplCurve, int &nType) const;
// 承插
BOOL MakeInsertCross2dCurves(TComplexCurve& cplCurve, int &nType, BOOL bIntub = FALSE) const;
// 斜接
BOOL MakeInclineCross2dCurves(TComplexCurve& cplCurve, int &nType) const;
// 圆角
BOOL MakeArcuateCross2dCurves(TComplexCurve& cplCurve, int &nType, BOOL bIntub = FALSE) const;
// 直角
BOOL MakeLinearCross2dCurves(TComplexCurve& cplCurve, int &nType) const;
// 交叉
BOOL MakeInterCross2dCurves(TComplexCurve& cplCurve, int &nType) const;
//外轮廓Pline线
// 普通
AcDbPolyline* MakeOrthoCrossPolyCurve() const;
// 承插
AcDbPolyline* MakeInsertCrossPolyCurve() const;
// 斜接
AcDbPolyline* MakeInclineCrossPolyCurve() const;
// 圆角
AcDbPolyline* MakeArcuateCrossPolyCurve() const;
// 直角
AcDbPolyline* MakeLinearCrossPolyCurve() const;
// 交叉
AcDbPolyline* MakeInterCrossPolyCurve() const;
// 轮廓所围平面的Face数组
// 普通
BOOL MakeOrthoCrossPolyCurveFaces(AcDbVoidPtrArray& arFaces) const;
// 承插
BOOL MakeInsertCrossPolyCurveFaces(AcDbVoidPtrArray& arFaces) const;
// 斜接
BOOL MakeInclineCrossPolyCurveFaces(AcDbVoidPtrArray& arFaces) const;
// 圆角
BOOL MakeArcuateCrossPolyCurveFaces(AcDbVoidPtrArray& arFaces) const;
// 直角
BOOL MakeLinearCrossPolyCurveFaces(AcDbVoidPtrArray& arFaces) const;
// 交叉
BOOL MakeInterCrossPolyCurveFaces(AcDbVoidPtrArray& arFaces) const;
//辅助函数
BOOL GetInsertCirPts(AcGePoint3dArray& arPts) const;
//bDefault是否是isvaild函数调用
BOOL GetInclineCirPts(AcGePoint3dArray& arPts, BOOL bDefault = FALSE) const;
BOOL GetCrossPts(AcGePoint3dArray& arPts, BOOL bDefault = FALSE, BOOL bIs3D = FALSE) const;
BOOL GetCrossPtsCirRedu(AcGePoint3dArray& arPts) const;
BOOL GetIntersectCrossPts(AcGePoint3dArray& arPts, BOOL bDefault = FALSE) const;
BOOL GetArcuateCrossPts(AcGePoint3dArray& arPts, BOOL bDefault = FALSE) const;
BOOL GetIntersectWith(AcGePoint3d &pt1,AcGePoint3d &pt2,AcGeVector3d &vt1,AcGeVector3d &vt2,AcGePoint3d &ptIntersect) const;
BOOL GetIntersectWith(AcGePoint3d &pt1,AcGePoint3d &pt2,AcGePoint3d &pt3,AcGePoint3d &pt4,AcGePoint3d &ptIntersect) const;
BOOL GetCrossPtsVerCir(AcGePoint3dArray& arPts) const;
Adesk::Boolean IsClockWise(AcGePoint3d pt1 ,AcGePoint3d pt2,AcGePoint3d pt3) const;
void GetPlusEdgePts(AcGePoint3dArray &arPts, AcGePoint3d &ptStart, AcGeVector3d &vtStart, AcGeVector3d &vtNor, double dSWidth) const;
void GetArcPoint(AcDbPolyline &polyLine, AcGePoint3dArray &ptArcArr) const;
AcGePoint3d GetCenterPt() const;
AcGePoint3d GetPlusEdgeStartPt() const;
AcGePoint3d GetPlusEdgeEndPt() const;
AcGePoint3d GetPlusEdgeBra1Pt() const;
AcGePoint3d GetPlusEdgeBra2Pt() const;
//得到最终需要的点
AcGePoint3d GetFinalPt(AcGePoint3d ptStart,AcGePoint3d ptInter1,AcGePoint3d ptInter2,AcGePoint3d ptCor1,
AcGePoint3d ptCor2,AcGeVector3d vtStart,double dLength) const;
AcGePoint3d GetInterFinalPt(AcGePoint3d ptStart,AcGePoint3d ptInter1,AcGePoint3d ptInter2,AcGePoint3d ptCor1,
AcGePoint3d ptCor2,AcGeVector3d vtStart,double dLength) const;
AcGePoint3d GetInterBrPt(AcGePoint3d ptStart,AcGePoint3d ptInter1,AcGePoint3d ptInter2,AcGePoint3d ptCor1,
AcGePoint3d ptCor2,AcGeVector3d vtStart,double dLength) const;
//得到最终需要的点,End端点在直角类型下
AcGePoint3d GetFinalPtEnd(AcGePoint3d ptStart,AcGePoint3d ptInter1,AcGePoint3d ptInter2,AcGePoint3d ptCor1,
AcGePoint3d ptCor2,AcGeVector3d vtStart, double dPlusEnd = 50.0) const;
// 拖拽管件,支持转向等操作
Acad::ErrorStatus MoveGripRandom(TDb::Position ePos, const AcGeVector3d& offset );
// 判断该四通是不是能够支持联动
BOOL IsSupportAutoWork(const TInterfaceModifyMsg& iModiMsg);
// 删除主管及末管端法兰,用于插管式
void DealFlange();
void DealFlange( AcDbObjectId idFlange );
BOOL MoveDuctEnd(AcGePoint3d ptFrom, AcGePoint3d ptTo, AcDbObjectId idDuctd);
// 在主管及尾管端绘制法兰
void DrawFlange();
void DrawFlange(int nIndex, TDbHvacFitting* pFlange);
// 获取四通上下两面接口所在的8个点
BOOL GetInterfaceKeyPt(AcGePoint3dArray &ptUpArr, AcGePoint3dArray &ptDownArr) const;
// 判断两条风管是否允许生成构件
int AbleConnect(AcGeLine3d line1, AcGeLine3d line2, double dTick1, double dThick2) const;
// 生成3D轮廓PL线 iFlag: 1 顶面 2 底面 3 左前拐角 4 右前拐角 5 左后拐角 6右后拐角
BOOL Make3DOutline(TGGePoly2D& poly, int iFlag) const;
BOOL MakeRect3DOutline(TGGePoly2D& poly, int iFlag) const; // 方形
BOOL MakeCirc3DOutline(TGGePoly2D& poly, int iFlag) const; // 圆形
// 矫正接口点坐标
void AdjustInterfPoint(const AcGePoint3d& ptSrc, AcGePoint3d& ptDst);
};
#endif // !defined(__THIMPHVACCROSS_H__)