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

176 lines
5.9 KiB
C++

#pragma once
#include "earthwormdef.h"
#include "AcGiDraw.h"
#ifdef EARTHWORM_EXPORT
#define DLLIMPEXP __declspec(dllexport)
#else
#define DLLIMPEXP __declspec(dllimport)
#endif
class DLLIMPEXP AecComplexCurve
{
public:
AecComplexCurve();
AecComplexCurve(const AecComplexCurve& src);
~AecComplexCurve();
AecComplexCurve& operator = (const AecComplexCurve& src);
AecComplexCurve& copyFrom(const AecComplexCurve& src);
AecEqui::AecCurveElement operator [] (int nIndex);
const AecEqui::AecCurveElement operator [] (int nIndex) const;
AcDbCurve* segat(int nIndex);
AecEqui::AecCurveElement at(int nIndex) const;
AecEqui::AecCurveElement& atByRef(int nIndex);
const AecEqui::AecCurveElement& atByCstRef(int nIndex) const;
AecComplexCurve& setAt(int nIndex, AecEqui::AecCurveElement& value);
AecEqui::AecCurveElement first();
const AecEqui::AecCurveElement first() const;
AecEqui::AecCurveElement last();
const AecEqui::AecCurveElement last() const;
int append(const AecEqui::AecCurveElement& value);
//Line Arc
int append(AcDbCurve* pCurve);
AecComplexCurve& append(const AecComplexCurve& src);
AecEqui::AecCurveElement removeAt(int nIndex);
BOOL remove(AecEqui::AecCurveElement& value, int start = 0);
AecEqui::AecCurveElement removeFirst();
AecEqui::AecCurveElement removeLast();
void removeAll();
BOOL find(const AecEqui::AecCurveElement& value, int& foundAt,int start = 0) const;
int length() const;
BOOL isEmpty() const;
int logicalLength() const;
void setLogicalLength(int nIndex);
BOOL isEqual(const AecEqui::AecCurveElement& value1,const AecEqui::AecCurveElement& value2) const;
void setSubElementGsMark(int nGsMark);
BOOL CanBoolUnite(const AecEqui::AecCurveElement& el) const;
Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform);
void setColorIndex(int nColor);
//同类合并
void merge();
bool merge(AecEqui::AecCurveElement& el0,AecEqui::AecCurveElement& el1,AecEqui::AecCurveElement*& pelAdd);
//实线减去挖空线,前提先同类合并merge
void boolSubtract();
int boolSubtract(AecEqui::AecCurveElement& elR,AecEqui::AecCurveElement& elH,CArray<AecEqui::AecCurveElement,AecEqui::AecCurveElement&>& arEl0);
void OrthoProjectedToXYPlane(double dz = 0.0);
AcDbPolyline* MakePoly() const;
//获取 元素的类型0:line 1 : Arc
static int GetElementType(const AecEqui::AecCurveElement& el);
static BOOL MakeArc(const AecEqui::AecCurveElement& el,AcDbArc*& pArc);
static BOOL MakeLine(const AecEqui::AecCurveElement& el,AcDbLine*& pLine);
//根据 GetElementType 创建曲线
static BOOL MakeCurve(const AecEqui::AecCurveElement& el,AcDbCurve*& pCurve);
static BOOL MakeElement(AecEqui::AecCurveElement& el,const AcDbCurve* pCurve);
static Acad::ErrorStatus IntersectWith(AecEqui::AecCurveElement& el1,AecEqui::AecCurveElement& el2,AcDb::Intersect nType,AcGePoint3dArray& arPts);
static Acad::ErrorStatus ExtendTo(AecEqui::AecCurveElement& el,const AcGePoint3d& ptTo);
Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler);
Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;
Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);
private:
CArray<AecEqui::AecCurveElement,AecEqui::AecCurveElement&> m_arCurElements;
};
class DLLIMPEXP AecComplexCurveDraw
{
public:
AecComplexCurveDraw();
AecComplexCurveDraw(const AecComplexCurveDraw& src);
~AecComplexCurveDraw();
void SetOwnerId(AcDbObjectId& id);
AcDbObjectId GetOwnerId();
void SetEdage(const AecComplexCurve& curEdage);
BOOL GetEdage(AecComplexCurve& curEdage);
BOOL GetEdage(AecComplexCurve& curEdage) const;
AecComplexCurve& GetRefEdage();
const AecComplexCurve& GetRefEdage() const;
BOOL HasEdage() const;
BOOL RemoveEdage();
void merge();
void boolSubtract();
//设置隐藏段的绘制方式 0:不绘制 1: 绘制
void SetHideDraw(Adesk::Int32 bHideDraw);
Adesk::Int32 GetHideDraw() const;
void SetColor(int nColor);
// 延伸(收缩)首末点 为了支持遮挡扩展区域,dExtLen:单边延伸值
void ExtendStartAndEnd(double dExtLen);
AecComplexCurveDraw& operator = (const AecComplexCurveDraw& src);
AecComplexCurveDraw& copyFrom(const AecComplexCurveDraw& src);
Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
Acad::ErrorStatus dxfInFields(AcDbDxfFiler* pFiler);
Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler, Adesk::UInt32 nVer = 1) const;
Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler, Adesk::UInt32 nVer = 1);
//遮挡绘制 idReal实线图层,idDash 虚线图层,idCen中心线图层
Adesk::Boolean Draw2d(AcGiDraw &dc, const AcDbObjectId& idReal,
const AcDbObjectId& idDash, const AcDbObjectId& idCen,
AecEqui::AecCurveElement* pElTmpl = NULL, BOOL bWeight = FALSE,
BOOL bCenWeight = FALSE, double dPScale = 1.0) const;
//无遮挡绘制
Adesk::Boolean Draw2d(AcGiDraw& dc) const;
Adesk::Boolean explode(AcDbVoidPtrArray& entitySet, const AcDbObjectId& idReal,
const AcDbObjectId& idDash, const AcDbObjectId& idCen,
AecEqui::AecCurveElement* pElTmpl = NULL, BOOL bWeight = FALSE,
BOOL bCenWeight = FALSE);
Acad::ErrorStatus transformBy(const AcGeMatrix3d& xform);
void OrthoProject2XY();
protected:
BOOL MakePolgon(AecEqui::AecCurveElement& el, AcDbPolyline*& pPl, BOOL bIsArc = FALSE) const;
void SetProperty(AecEqui::AecCurveElement& el, AcDbEntity* pEnt, const AcDbObjectId& idReal,
const AcDbObjectId& idDash, const AcDbObjectId& idCen);
BOOL MakeArc(AecEqui::AecCurveElement& el, AcDbArc*& pArc) const;
BOOL MakeLine(AecEqui::AecCurveElement& el, AcDbLine*& pPl) const;
void OrthProjectEl2XYPlan(AecEqui::AecCurveElement& el) const;
public:
Adesk::Int32 m_bHideDraw;
AcDbSoftPointerId m_idOwner;
AecComplexCurve m_curEdage;
};