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

376 lines
18 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.
// 暖通弯头实现类
//
// 弯头示意图:
// 水平放置: 垂直放置:
// ┏━━━━━━━━━━━┓ ┏━━━━━┓
// ┃ ┃ ┃ ④ ┃
// ┃ ┃ ┃ ┃
// ④①━━━━━━━━③ ┃ ┃ ① ┃
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ③ ┃
// ┗━━━━━┓ ┃ ┃ ┣━━━━━┫
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ┃
// ┗━━②━━┛ ┗━━②━━┛
// ⑤ ⑤
//
// 夹点说明:
// ①: 弯头左端移动点
// ②: 弯头下端移动点
// ③: 中心命令激活点
// ④: 左端命令激活点
// ⑤: 下端命令激活点
#ifndef __THIMPHVACELBOW_H__
#define __THIMPHVACELBOW_H__
#if _MSC_VER > 1000
#pragma once
#endif
#include "TImpSpecFitting.h"
class THImpHvacElbow : public TImpSpecFitting
{
public:
THImpHvacElbow();
virtual ~THImpHvacElbow();
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 &dc) const;
virtual Acad::ErrorStatus ExplodeOrDraw3d(XExplodeDraw &dc) 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 THImpHvacElbow::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;
// mcl add 2011.1.17 剖切功能。 注意 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:
// 得到边线宽
double GetEdgeLineWidth() const;
// 得到中心线宽
double GetCentLineWidth() const;
// 得到端线宽
double GetEndLineWidth() const;
//得到单线遮挡线宽
BOOL SetSingleDashWidth(double& dDiameterS,double& dDiameterE) const;
// 弯头是否水平放置
BOOL IsHorzAlignment() const;
// 弯头是否垂直放置
BOOL IsVertAlignment() const;
// 弯头是否倾斜放置
BOOL IsInclineAlignment() const;
// 是否是单线弯头
BOOL IsSingleLine() const;
BOOL HasBaseLine() const;
// 是否是弧形弯头
BOOL IsArcuate() 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);
// 内外圆弧
//三维绘制函数
void ExplodeOrDrawAllArcuate3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeAllArcuatePolyCurve() const;
// 构建二维图形
BOOL MakeAllArcuate2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeAllArcuatePolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内外圆弧消声
//三维绘制函数
void ExplodeOrDrawAllArcWrap3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeAllArcWrapPolyCurve() const;
// 构建二维图形
BOOL MakeAllArcWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeAllArcWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 消声弯头
//三维绘制函数
void ExplodeOrDrawAllArcInWrap3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeAllArcInWrapPolyCurve() const;
// 构建二维图形
BOOL MakeAllArcInWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeAllArcInWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 分段拟合
//三维绘制函数
void ExplodeOrDrawSegmental3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeSegmentalPolyCurve() const;
// 构建二维图形
BOOL MakeSegmental2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建分段拟合倾斜二维图形
BOOL MakeSegmental2DInc(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeSegmentalPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内斜线
//三维绘制函数
void ExplodeOrDrawIncline3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeInclinePolyCurve() const;
// 构建二维图形
BOOL MakeIncline2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeInclinePolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内斜线消声
//三维绘制函数
void ExplodeOrDrawInclineWrap3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeInclineWrapPolyCurve() const;
// 构建二维图形
BOOL MakeInclineWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeInclineWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内斜线隔板消声
//三维绘制函数
void ExplodeOrDrawInclineBoard3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeInclineBoardPolyCurve() const;
// 构建二维图形
BOOL MakeInclineBoard2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeInclineBoardPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内斜线导流
//三维绘制函数
void ExplodeOrDrawInclineLead3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeInclineLeadPolyCurve() const;
// 构建二维图形
BOOL MakeInclineLead2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeInclineLeadPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内弧线
//三维绘制函数
void ExplodeOrDrawArcuate3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeArcuatePolyCurve() const;
// 构建二维图形
BOOL MakeArcuate2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeArcuatePolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内弧线消声
//三维绘制函数
void ExplodeOrDrawArcuateWrap3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeArcuateWrapPolyCurve() const;
// 构建二维图形
BOOL MakeArcuateWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeArcuateWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内弧线隔板消声
//三维绘制函数
void ExplodeOrDrawArcuateBoard3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeArcuateBoardPolyCurve() const;
// 构建二维图形
BOOL MakeArcuateBoard2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeArcuateBoardPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内弧线筛板消声
//三维绘制函数
void ExplodeOrDrawArcuateSieve3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeArcuateSievePolyCurve() const;
// 构建二维图形
BOOL MakeArcuateSieve2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeArcuateSievePolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内弧线导流
//三维绘制函数
void ExplodeOrDrawArcuateLead3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeArcuateLeadPolyCurve() const;
// 构建二维图形
BOOL MakeArcuateLead2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeArcuateLeadPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内外直角
//三维绘制函数
void ExplodeOrDrawAllOrtho3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeAllOrthoPolyCurve() const;
// 构建二维图形
BOOL MakeAllOrtho2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeAllOrthoPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内外直角消声
//三维绘制函数
void ExplodeOrDrawOrthoWrap3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeOrthoWrapPolyCurve() const;
// 构建二维图形
BOOL MakeOrthoWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeOrthoWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
// 内外直角导流
//三维绘制函数
void ExplodeOrDrawOrthoLead3d(XExplodeDraw &mode) const;
// 构建外轮廓
AcDbPolyline* MakeOrthoLeadPolyCurve() const;
// 构建二维图形
BOOL MakeOrthoLead2DCurves(TComplexCurve& cplCurve,int &nType) const;
// 构建外轮廓所围平面的3DFace组
BOOL MakeOrthoLeadPolyCurveFaces(AcDbVoidPtrArray& arFaces);
Acad::ErrorStatus OnCHorEqualRMoveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
//AllArcuate的辅助函数
//三维模型
void ExplodeOrDrawAllArcuate3dRec(XExplodeDraw &mode) const;
void ExplodeOrDrawAllArcuate3dCir(XExplodeDraw &mode) const;
void GetPtsAllArcuate3dRec(AcGePoint3dArray &arptSides,AcGePoint3d & pt,AcGeVector3d & vtStr,AcGeVector3d & vtNormal,double& dWidth,double& dThick) const;
//求弯头的圆心,即开始点终止点,垂直切线方向的交点。
BOOL GetIntersectWith(AcGePoint3d &pt1,AcGePoint3d &pt2,AcGeVector3d &vt1,AcGeVector3d &vt2,AcGePoint3d &ptIntersect) const;
//求弯头圆弧上的中心点。
BOOL GetPtOnArc(AcGePoint3d &ptStart,AcGePoint3d &ptCorner,AcGePoint3d &ptEnd,double &dPlusEdge) const;
//BEGIN=======================================================================================================================================================================
//扩展后的计算弯头圆弧上的点
BOOL GetPtOnArcExt(AcGePoint3d &ptStartArc, const AcGePoint3d &ptCorStart, AcGePoint3d &ptEndArc, const AcGePoint3d &ptCorEnd, AcGePoint3d &ptOnArcOut, double &dPlusEdge) const;
//修改时间:2009-11-19
//修改人 :王亚东
//修改原因:对GetPtOnArc进行扩展,用于计算中心线偏离情况下的圆弧上点
//END=========================================================================================================================================================================
//2D轮廓线
// ptStart,ptMid,ptEnd表示的一段曲线,向ptOnPlan投影,得到的曲线上的点放在arPt中返回,
BOOL GetPtsOnHidePlanFromInc(AcGePoint3d &ptStart, AcGePoint3d &ptMid, AcGePoint3d &ptEnd, AcGePoint3d &ptOnPlan, AcGePoint3dArray &arPt) const;
BOOL GetPrjPts(AcGePoint3dArray &arPtsU, AcGePoint3dArray &arPtsD) const;
BOOL DrawAllArcuate2DInc(TComplexCurve& cplCurve,int &nType) const;
BOOL GetAllArcuateCplCurveInc(TComplexCurve& cplCurve,int &nType,AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE,int& nWrapType) const;
BOOL DrawAllArcuate2DHor(TComplexCurve& cplCurve,int &nType) const;
BOOL DrawAllArcuate2DVer(TComplexCurve& cplCurve,int &nType) const;
BOOL GetAllArcuateCplCurveHor(TComplexCurve& cplCurve,int &nType,AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE,int& nWrapType) const;
BOOL GetAllArcuateCplCurveVerRec(TComplexCurve& cplCurve,int &nType,AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE,double& dThick, double& dEndThick) const; //修改时间:2009-12-29 修改人:王亚东 修改原因:添加方口弯头末端厚度参数
BOOL GetAllArcuateCplCurveVerRecForOffset(TComplexCurve& cplCurve, int &nType) const;
BOOL GetAllArcuateCplCurveVerCir(TComplexCurve& cplCurve,int &nType,AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
BOOL GetInclineCplCurveHor(TComplexCurve& cplCurve,int &nType,AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
BOOL GetPtsSegmentalHor(AcGePoint3dArray& pts) const;
BOOL GetArcuateCplCurveHor(TComplexCurve& cplCurve,int &nType,AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
BOOL GetAllOrthoCplCurveHor(TComplexCurve& cplCurve,int &nType,AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
//2DPolyline
AcDbPolyline* DrawAllArcuatePolyHorRec(AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
//BEGIN==================================================================================================================================================
AcDbPolyline* DrawAllArcuatePolyHorCir(AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS, double& dDiameterE) const;
//END====================================================================================================================================================
AcDbPolyline* DrawAllArcuatePolyIncCir(AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS, double& dDiameterE) const;
//BEGIN=======================================================================
//内外圆弧和非内外圆弧的方口弯头立式消影多段线生成函数
AcDbPolyline* DrawAllArcuatePolyVerRec(AcGePoint3d& ptStart, AcGePoint3d& ptCorner, AcGePoint3d& ptEnd, double& dPlusEdge, double& dDiameterS, double& dDiameterE, double& dThick, double &dEndThick) const;
AcDbPolyline* DrawNotAllArcuatePolyVerRec(AcGePoint3d& ptStart, AcGePoint3d& ptCorner, AcGePoint3d& ptEnd, double& dPlusEdge, double& dDiameterS, double& dDiameterE, double& dThick, double &dEndThick) const;
//修改时间:2010-1-6
//修改人 :王亚东
//修改原因:支持方口变径弯头的立式消影多段线生成
//END=========================================================================
AcDbPolyline* DrawAllArcuatePolyVerCir(AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dDiameterS, double& dDiameterE) const;
AcDbPolyline* DrawInclinePolyCurveHor(AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
AcDbPolyline* DrawArcuatePolyCurveHor(AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
AcDbPolyline* DrawAllOrthoPolyCurveHor(AcGePoint3d& ptStart, AcGePoint3d& ptCorner,AcGePoint3d& ptEnd,double& dPlusEdge,double& dDiameterS,double& dDiameterE) const;
//Polyline画弧,圆弧上位于起点与终点之间的一点,半径,开始点,终止点,线宽,Polyline开始index
BOOL CreatePlElbow(AcDbPolyline *p,AcGePoint3d& pt,double dradius,AcGePoint3d& pt1,AcGePoint3d& pt2,double dWidth,int index) const;
double AngleTo(AcGePoint3d pt,AcGePoint3d pt1,AcGePoint3d pt2) const;
Adesk::Boolean IsClockWise(AcGePoint3d pt1 ,AcGePoint3d pt2,AcGePoint3d pt3) const;
//Face面
BOOL DrawAllArcuatePolyCurveFacesHor(AcDbVoidPtrArray& arFaces);
BOOL DrawAllArcuatePolyCurveFacesVer(AcDbVoidPtrArray& arFaces);
BOOL DrawAllArcuatePolyCurveFacesInc(AcDbVoidPtrArray& arFaces);
BOOL GetPtsAllArcuateCurveFacesHor(AcGePoint3dArray& arpts,AcGePoint3d &ptStart,AcGePoint3d &ptCorner,AcGePoint3d &ptEnd,double& dDiameterS,double& dDiameterE,double &dPlusEdge) const;
void GetArcPoint(AcDbPolyline &polyLine, AcGePoint3dArray &ptArcArr) const;
BOOL MergerPline(AcDbPolyline* pPl,AcDbPolyline* pSrc) const;
void GetSideFace(TXShell& xShell, AcGePoint3d ptStart, double dStartWidth);
// 智能拖动处理发送消息
Acad::ErrorStatus MoveGripRandom(TDb::Position ePos, const AcGeVector3d& offset );
// 生成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; // 圆形
// 得到弯头端口圆截面投影下来的半个椭圆面(椭圆面向外)Lixl
BOOL GetEllipseFaces(AcDbVoidPtrArray& arFaces) const;
};
#endif //__THIMPHVACELBOW_H__