76 lines
2.8 KiB
C++
76 lines
2.8 KiB
C++
#ifndef __CBASEHOLEOPERATION_H__
|
|
#define __CBASEHOLEOPERATION_H__
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include "BaseHoleDlg.h"
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
class CBaseHoleOperation
|
|
{
|
|
public:
|
|
|
|
CBaseHoleOperation();
|
|
virtual ~CBaseHoleOperation();
|
|
// 获取中心点
|
|
XPoint Mid(XPoint ptStart, XPoint ptEnd);
|
|
// 执行基础洞操作
|
|
void RunBaseHole(CBaseHoleDlg &baseHoleDlg);
|
|
// 执行添加标注
|
|
Adesk::Boolean AddLabel(CBaseHoleDlg &baseHoleDlg, XPoint ptStart);
|
|
//添加标注
|
|
void AddLabel(XPoint ptIns, double dAngle, LPCTSTR pszText = _T("消火栓洞"));
|
|
// 添加尺寸标注
|
|
void AddDimLabel(XPoint ptStart, XPoint ptEnd, int dBaseLineDist);
|
|
// 创建基础洞
|
|
void CreateBaseHole(CBaseHoleDlg &baseHoleDlg,Entity EntWall, Entity entBaseLine);
|
|
// 选择墙体为弧墙时,调整墙体插入点
|
|
void AdjustBaseHoleInsPt(Entity entBaseLine , TDbWall *pWall, int nDist);
|
|
// 添加弧长标注
|
|
void addArcLabel();
|
|
// 基础洞插入点是否在弧墙上
|
|
void IsInArcWall(BOOL &bFlag, Entity entBaseLine, TDbWall *pWall, CBaseHoleDlg &baseHoleDlg);
|
|
// 基准线是否与所选墙体相邻
|
|
BOOL IsInWall(Entity &entBaseLine, Entity &entWall);
|
|
// 判断消火栓是否在墙内
|
|
BOOL IsInWall(Entity &ent, std::map<AcDbObjectId,AcDbObjectId> &mapEnt);
|
|
// 选择消火栓
|
|
void SelectHydrant(std::map<AcDbObjectId,AcDbObjectId> &mapEnt);
|
|
// 为消火栓添加基础洞
|
|
void AddHoleToHydrant(std::map<AcDbObjectId,AcDbObjectId> &mapEnt);
|
|
//判断点是否在两条线之间
|
|
BOOL IsIn2Line(const XCurveSegment &segL, const XCurveSegment &segR, XPoint ptTemp);
|
|
//为单个消火栓添加基础洞
|
|
void AddHoleToHydrant(AcDbObjectId idWall, AcDbObjectId idHydrant);
|
|
//添加基础洞
|
|
void AddBaseHole(AcDbObjectId idWall, XPoint ptIns, double dWidth, double dHeight, double dBottomHeight);
|
|
//批量处理消火栓开洞
|
|
void AddBaseHoleByBatch(std::map<AcDbObjectId,AcDbObjectId> &mapEnt);
|
|
//批量处理消火栓开洞
|
|
void AddBaseHoleByBatch(std::map<AcDbObjectId,AcDbObjectId> &mapEnt, std::vector<AcDbObjectId> &vecId);
|
|
//一次为多个消火栓添加基础洞
|
|
void AddBaseHole(std::map<AcDbObjectId,AcDbObjectId> &mapEnt, std::multimap<double,AcDbObjectId> &mapId, double dB, BOOL bLevelHydrant = TRUE);
|
|
|
|
|
|
public:
|
|
|
|
BOOL m_bLabel; // 是否添加标注
|
|
BOOL m_bDimLabel; // 是否添加尺寸标注
|
|
XPoint m_ptBaseLine; // 选取的基准线上的一点
|
|
XPoint m_ptWallLine; //选取的墙线上的一点
|
|
int m_nDist; // 基准线距基础洞的距离
|
|
AcDbArc* m_pArc; //指向所选弧墙的中心弧线
|
|
AcGePoint3d m_ptMid; //获取弧线的中点
|
|
BOOL m_bArcWall; //是否为弧墙
|
|
|
|
private:
|
|
|
|
//获取基础洞插入点
|
|
BOOL getInsertPoint(AcDbObjectId idHdyrant, XPoint &pt);
|
|
|
|
};
|
|
#endif // !defined(__CBASEHOLEOPERATION_H__)
|