Files
envi-code/SourceCode/Code2026/tg_shs/shs_TwtKernal/MovePipe.h
T

92 lines
3.1 KiB
C++
Raw Normal View History

2026-10-04 00:04:20 +08:00
// MovePipe.h: interface for the MovePipe class.
2026-09-28 15:28:50 +08:00
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MOVEPIPE_H__C4FA001F_129F_4F56_BFA1_55ED4568A1D5__INCLUDED_)
#define AFX_MOVEPIPE_H__C4FA001F_129F_4F56_BFA1_55ED4568A1D5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "TPipeGraph.h"
#include "DbPipeValve.h"
#include "DbPipeLabel.h"
#include "DbVPipeDim.h"
#include "PipeWireMonitor.h"
#include "DbEquipment.h"
#define MINDIST 0.1
2026-10-04 00:04:20 +08:00
// 联动管线相关信息
2026-09-28 15:28:50 +08:00
struct PipeLinkedInfo
{
2026-10-04 00:04:20 +08:00
bool bSideOnPipe;// 端点是否在移动管线上
XPoint ptOnPipe;// 联动管线和移动管线的交点
AcGeVector3d vtPipe;// 联动管线法向量
std::vector<AcDbObjectId> vecPipeLink;// 联动管线集合
2026-09-28 15:28:50 +08:00
};
class MovePipe
{
public:
MovePipe();
virtual ~MovePipe();
void InitPipeSys(const Entity entPipe);
void Move();
private:
2026-10-04 00:04:20 +08:00
// 管线是否是移动管线
2026-09-28 15:28:50 +08:00
bool IsParallelToPipe(const AcDbObjectId idPipe, const AcDbObjectId idPipeDes, PickSet &ssVist);
2026-10-04 00:04:20 +08:00
// 管线是否是联动管线
2026-09-28 15:28:50 +08:00
bool IsLinkedWithPipe(const PickSet ssLine, const AcDbObjectId idPipeLinked, PickSet &ssVist, AcGeVector3d &vtPipeLinked, AcGePoint3d &ptOnPipe);
2026-10-04 00:04:20 +08:00
// 搜索移动管线
2026-09-28 15:28:50 +08:00
void SearchMovePipe();
void ModifyMovedVPipe();
2026-10-04 00:04:20 +08:00
// 搜索联动管线
2026-09-28 15:28:50 +08:00
void SearchLinkedPipe();
2026-10-04 00:04:20 +08:00
// 初始化联动管线
2026-09-28 15:28:50 +08:00
void InitPipeLinkSys();
2026-10-04 00:04:20 +08:00
// 移动主干管
2026-09-28 15:28:50 +08:00
bool MoveMainPipe();
2026-10-04 00:04:20 +08:00
// 沿移动管线垂直方向移动管网
2026-09-28 15:28:50 +08:00
void MovePipeByPerpendicularVt();
2026-10-04 00:04:20 +08:00
// T型管线移动
2026-09-28 15:28:50 +08:00
void ModifyPipeBy1Side(std::vector<AcDbObjectId> &vecPipe, XPoint pt, XPoint ptOld);
2026-10-04 00:04:20 +08:00
// +型管线移动
2026-09-28 15:28:50 +08:00
void ModifyPipeBy2Side(std::vector<AcDbObjectId> vecPipe, XPoint ptNew, XPoint ptOld);
2026-10-04 00:04:20 +08:00
// 延长管线到交点
2026-09-28 15:28:50 +08:00
void ExtendPipe2Pt(const AcDbObjectId idPipe, XPoint &ptNew, bool bExtendNearPt = true);
2026-10-04 00:04:20 +08:00
// T型管线移动时 根据交点删除或延长
2026-09-28 15:28:50 +08:00
void ModifyPipeByPt(std::vector<AcDbObjectId> &vecPipe, XPoint ptNew, XPoint ptOld);
2026-10-04 00:04:20 +08:00
// 重置附件和管线文字位置
2026-09-28 15:28:50 +08:00
void ResetAttachmentsPos(const AcDbObjectId idPipe, DList<AcDbObjectId> &lstAttachs);
void ReLinkEquipment(std::map<double, AcDbObjectId> mapEq, AcDbObjectId idPipe, std::vector<AcDbObjectId> &vec);
2026-10-04 00:04:20 +08:00
// 联动管线和移动管线交点处创建立管
2026-09-28 15:28:50 +08:00
AcDbObjectId CreateVPipe(const XPoint ptNew, const AcDbObjectId idOldVPipe);
2026-10-04 00:04:20 +08:00
// 获取距离点最近的移动管线
2026-09-28 15:28:50 +08:00
AcDbObjectId GetNearestMovePipe(const AcDbLine &line);
2026-10-04 00:04:20 +08:00
// 管线不联动时交点处生成立管
2026-09-28 15:28:50 +08:00
void LinkPipeByVPipe();
2026-10-04 00:04:20 +08:00
// 删除无用立管
2026-09-28 15:28:50 +08:00
void DeleteUselessVPipe(bool bMoveLinked);
2026-10-04 00:04:20 +08:00
// 根据点搜索立管标注
2026-09-28 15:28:50 +08:00
AcDbObjectId GetVPipeDimByPt(const XPoint pt);
AcDbObjectId GetVPipeByPt(const XPoint pt);
2026-10-04 00:04:20 +08:00
// 重新定位立管标注
2026-09-28 15:28:50 +08:00
void ResetDimPos(const AcDbObjectId idDim, const XPoint pt, const AcDbObjectId idVPipe);
private:
PickSet m_ssLink;
PickSet m_ssMove;
TPipeGraph m_graphPipe;
TPipeSys::SysType m_typeSys;
2026-10-04 00:04:20 +08:00
std::vector<PipeLinkedInfo> m_vecPipeLink;// 联动管线
std::vector<AcDbObjectId> m_vecPipeMove;// 移动管线
2026-09-28 15:28:50 +08:00
AcDbObjectId m_idPipeMove;
};
#endif // !defined(AFX_MOVEPIPE_H__C4FA001F_129F_4F56_BFA1_55ED4568A1D5__INCLUDED_)