233 lines
9.7 KiB
C++
233 lines
9.7 KiB
C++
#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> §ionRecord, 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__)
|