Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

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__)