Files
envi-code/SourceCode/Code2026/tg_shs/shs_pipebase/THImpHvacElbow.h
T

375 lines
19 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
// 暖通弯头实现类
2026-09-28 15:28:50 +08:00
//
2026-10-04 00:04:20 +08:00
// 弯头示意图:
// 水平放置: 垂直放置:
// ┏━━━━━━━━━━━┓ ┏━━━━━┓
// ┃ ┃ ┃ ④ ┃
// ┃ ┃ ┃ ┃
// ④①━━━━━━━━③ ┃ ┃ ① ┃
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ③ ┃
// ┗━━━━━┓ ┃ ┃ ┣━━━━━┫
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ┃
// ┃ ┃ ┃ ┃ ┃
// ┗━━②━━┛ ┗━━②━━┛
// ⑤ ⑤
2026-09-28 15:28:50 +08:00
//
2026-10-04 00:04:20 +08:00
// 夹点说明:
// ①: 弯头左端移动点
// ②: 弯头下端移动点
// ③: 中心命令激活点
// ④: 左端命令激活点
// ⑤: 下端命令激活点
2026-09-28 15:28:50 +08:00
#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:
2026-10-04 00:04:20 +08:00
//获取三维的壳对象
2026-09-28 15:28:50 +08:00
virtual int GetXBaseShell(TXShell& xShell);
2026-10-04 00:04:20 +08:00
//获取体的范围方块
2026-09-28 15:28:50 +08:00
virtual int GetBodyBox(AcDbExtents& ext);
2026-10-04 00:04:20 +08:00
// add by hh 2010-12-27 导出XML
2026-09-28 15:28:50 +08:00
// virtual CString GetXml() const;
virtual CString GetXml(const AcGeMatrix3d& mat) const;
2026-10-04 00:04:20 +08:00
// mcl add 2011.1.17 剖切功能。 注意 GetSection内不应将std::vector<TObjSectionRecord>参数清空
2026-09-28 15:28:50 +08:00
virtual bool GetSection(const AcDbFace &face, const AcGeVector3d &vtPlaneSecDir,
std::vector<TObjSectionRecord> &sectionRecord, AcDbVoidPtrArray& arFillPtrs) const;
2026-10-04 00:04:20 +08:00
// 剖切用,返回Z坐标最高、最低点
2026-09-28 15:28:50 +08:00
virtual Acad::ErrorStatus GetExtents(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const;
2026-10-04 00:04:20 +08:00
// add by hh 2014-08-06 支持管件与水管遮挡
2026-09-28 15:28:50 +08:00
virtual Acad::ErrorStatus GetClipBoundary(TGGePoly2D& poly)const;
virtual bool IsMeClip() const;
2026-10-04 00:04:20 +08:00
virtual bool IsClipMe(const TEntityBase* pEnt=NULL)const;//ok是否被裁剪
2026-09-28 15:28:50 +08:00
private:
2026-10-04 00:04:20 +08:00
// 得到边线宽
2026-09-28 15:28:50 +08:00
double GetEdgeLineWidth() const;
2026-10-04 00:04:20 +08:00
// 得到中心线宽
2026-09-28 15:28:50 +08:00
double GetCentLineWidth() const;
2026-10-04 00:04:20 +08:00
// 得到端线宽
2026-09-28 15:28:50 +08:00
double GetEndLineWidth() const;
2026-10-04 00:04:20 +08:00
//得到单线遮挡线宽
2026-09-28 15:28:50 +08:00
BOOL SetSingleDashWidth(double& dDiameterS,double& dDiameterE) const;
2026-10-04 00:04:20 +08:00
// 弯头是否水平放置
2026-09-28 15:28:50 +08:00
BOOL IsHorzAlignment() const;
2026-10-04 00:04:20 +08:00
// 弯头是否垂直放置
2026-09-28 15:28:50 +08:00
BOOL IsVertAlignment() const;
2026-10-04 00:04:20 +08:00
// 弯头是否倾斜放置
2026-09-28 15:28:50 +08:00
BOOL IsInclineAlignment() const;
2026-10-04 00:04:20 +08:00
// 是否是单线弯头
2026-09-28 15:28:50 +08:00
BOOL IsSingleLine() const;
BOOL HasBaseLine() const;
2026-10-04 00:04:20 +08:00
// 是否是弧形弯头
2026-09-28 15:28:50 +08:00
BOOL IsArcuate() const;
2026-10-04 00:04:20 +08:00
// 获取接口尺寸数据type,size,size1
2026-09-28 15:28:50 +08:00
BOOL GetInterfaceSizeData(int nIndex, TInterface& pipeInterface) const;
2026-10-04 00:04:20 +08:00
// 夹点移动消息处理
2026-09-28 15:28:50 +08:00
BOOL OnMoveGripPointMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs);
2026-10-04 00:04:20 +08:00
// 对象移动消息处理
2026-09-28 15:28:50 +08:00
BOOL OnTransformMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs);
2026-10-04 00:04:20 +08:00
// 尺寸调整消息处理
2026-09-28 15:28:50 +08:00
BOOL OnSizeMsgNotify(const TInterfaceModifyMsg& iModiMsg, TInterfaceModifyMsgs& iModiMsgs);
2026-10-04 00:04:20 +08:00
// 内外圆弧
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawAllArcuate3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeAllArcuatePolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeAllArcuate2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeAllArcuatePolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内外圆弧消声
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawAllArcWrap3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeAllArcWrapPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeAllArcWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeAllArcWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 消声弯头
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawAllArcInWrap3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeAllArcInWrapPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeAllArcInWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeAllArcInWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 分段拟合
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawSegmental3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeSegmentalPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeSegmental2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建分段拟合倾斜二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeSegmental2DInc(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeSegmentalPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内斜线
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawIncline3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeInclinePolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeIncline2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeInclinePolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内斜线消声
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawInclineWrap3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeInclineWrapPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeInclineWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeInclineWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内斜线隔板消声
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawInclineBoard3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeInclineBoardPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeInclineBoard2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeInclineBoardPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内斜线导流
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawInclineLead3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeInclineLeadPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeInclineLead2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeInclineLeadPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内弧线
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawArcuate3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeArcuatePolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeArcuate2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeArcuatePolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内弧线消声
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawArcuateWrap3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeArcuateWrapPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内弧线隔板消声
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawArcuateBoard3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeArcuateBoardPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateBoard2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateBoardPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内弧线筛板消声
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawArcuateSieve3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeArcuateSievePolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateSieve2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateSievePolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内弧线导流
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawArcuateLead3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeArcuateLeadPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateLead2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeArcuateLeadPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内外直角
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawAllOrtho3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeAllOrthoPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeAllOrtho2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeAllOrthoPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内外直角消声
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawOrthoWrap3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeOrthoWrapPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeOrthoWrap2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeOrthoWrapPolyCurveFaces(AcDbVoidPtrArray& arFaces);
2026-10-04 00:04:20 +08:00
// 内外直角导流
//三维绘制函数
2026-09-28 15:28:50 +08:00
void ExplodeOrDrawOrthoLead3d(XExplodeDraw &mode) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓
2026-09-28 15:28:50 +08:00
AcDbPolyline* MakeOrthoLeadPolyCurve() const;
2026-10-04 00:04:20 +08:00
// 构建二维图形
2026-09-28 15:28:50 +08:00
BOOL MakeOrthoLead2DCurves(TComplexCurve& cplCurve,int &nType) const;
2026-10-04 00:04:20 +08:00
// 构建外轮廓所围平面的3DFace组
2026-09-28 15:28:50 +08:00
BOOL MakeOrthoLeadPolyCurveFaces(AcDbVoidPtrArray& arFaces);
Acad::ErrorStatus OnCHorEqualRMoveGripPointsAt(const AcDbIntArray& indices,const AcGeVector3d& offset);
2026-10-04 00:04:20 +08:00
//AllArcuate的辅助函数
//三维模型
2026-09-28 15:28:50 +08:00
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;
2026-10-04 00:04:20 +08:00
//求弯头的圆心,即开始点终止点,垂直切线方向的交点。
2026-09-28 15:28:50 +08:00
BOOL GetIntersectWith(AcGePoint3d &pt1,AcGePoint3d &pt2,AcGeVector3d &vt1,AcGeVector3d &vt2,AcGePoint3d &ptIntersect) const;
2026-10-04 00:04:20 +08:00
//求弯头圆弧上的中心点。
2026-09-28 15:28:50 +08:00
BOOL GetPtOnArc(AcGePoint3d &ptStart,AcGePoint3d &ptCorner,AcGePoint3d &ptEnd,double &dPlusEdge) const;
//BEGIN=======================================================================================================================================================================
2026-10-04 00:04:20 +08:00
//扩展后的计算弯头圆弧上的点
2026-09-28 15:28:50 +08:00
BOOL GetPtOnArcExt(AcGePoint3d &ptStartArc, const AcGePoint3d &ptCorStart, AcGePoint3d &ptEndArc, const AcGePoint3d &ptCorEnd, AcGePoint3d &ptOnArcOut, double &dPlusEdge) const;
2026-10-04 00:04:20 +08:00
//修改时间:2009-11-19
//修改人 :王亚东
//修改原因:对GetPtOnArc进行扩展,用于计算中心线偏离情况下的圆弧上点
2026-09-28 15:28:50 +08:00
//END=========================================================================================================================================================================
2026-10-04 00:04:20 +08:00
//2D轮廓线
// ptStart,ptMid,ptEnd表示的一段曲线,向ptOnPlan投影,得到的曲线上的点放在arPt中返回,
2026-09-28 15:28:50 +08:00
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;
2026-10-04 00:04:20 +08:00
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 修改人:王亚东 修改原因:添加方口弯头末端厚度参数
2026-09-28 15:28:50 +08:00
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=======================================================================
2026-10-04 00:04:20 +08:00
//内外圆弧和非内外圆弧的方口弯头立式消影多段线生成函数
2026-09-28 15:28:50 +08:00
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;
2026-10-04 00:04:20 +08:00
//修改时间:2010-1-6
//修改人 :王亚东
//修改原因:支持方口变径弯头的立式消影多段线生成
2026-09-28 15:28:50 +08:00
//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;
2026-10-04 00:04:20 +08:00
//Polyline画弧,圆弧上位于起点与终点之间的一点,半径,开始点,终止点,线宽,Polyline开始index
2026-09-28 15:28:50 +08:00
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;
2026-10-04 00:04:20 +08:00
//Face面
2026-09-28 15:28:50 +08:00
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);
2026-10-04 00:04:20 +08:00
// 智能拖动处理发送消息
2026-09-28 15:28:50 +08:00
Acad::ErrorStatus MoveGripRandom(TDb::Position ePos, const AcGeVector3d& offset );
2026-10-04 00:04:20 +08:00
// 生成3D轮廓PL线 iFlag: 1 顶面 2 底面 3 内弧 4 外弧
2026-09-28 15:28:50 +08:00
BOOL Make3DOutline(TGGePoly2D& poly, int iFlag) const;
2026-10-04 00:04:20 +08:00
BOOL MakeRect3DOutline(TGGePoly2D& poly, int iFlag) const; // 方形
BOOL MakeCirc3DOutline(TGGePoly2D& poly, int iFlag) const; // 圆形
2026-09-28 15:28:50 +08:00
2026-10-04 00:04:20 +08:00
// 得到弯头端口圆截面投影下来的半个椭圆面(椭圆面向外)Lixl
2026-09-28 15:28:50 +08:00
BOOL GetEllipseFaces(AcDbVoidPtrArray& arFaces) const;
};
#endif //__THIMPHVACELBOW_H__