#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参数清空 virtual bool GetSection(const AcDbFace &face, const AcGeVector3d &vtPlaneSecDir, std::vector §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__)