259 lines
9.1 KiB
C++
259 lines
9.1 KiB
C++
//------------------------------------------------------------------------+
|
|
// Copyright (C), 1998-2011, Beijing Tangent Software Co. Ltd.
|
|
// = FileName : TDbBaseWall类
|
|
// = Version : ver1.0
|
|
// = Author : xlc
|
|
// = CreateDate : 2011-04-13
|
|
// = Description: 抽象墙基线类声明
|
|
// = Maintainers:
|
|
//
|
|
//------------------------------------------------------------------------+
|
|
#ifdef TASD
|
|
#ifndef _TDBBASEWALL_H_
|
|
#define _TDBBASEWALL_H_
|
|
|
|
#ifndef _TDBSTRUENTITYBASE_H_
|
|
#include "TDbStruEntityBase.h"
|
|
#endif
|
|
|
|
#ifndef _TBASEWALLLINE_H_
|
|
#include "TBaseWallLine.h"
|
|
#endif
|
|
|
|
#ifndef _TASSOCMSG_H_
|
|
#include "TAssocMsg.h"
|
|
#endif
|
|
|
|
/*
|
|
int m_nWeight; //对象材质重量,类似于优先级 KEY_WEIGHT
|
|
AcGePoint3d m_ptStart; //起点 KEY_START
|
|
AcGePoint3d m_ptEnd; //终点 KEY_END
|
|
double m_dBulge; //凸度值 KEY_BULGE
|
|
double m_dWidth; //宽度 KEY_W
|
|
double m_dHeight; //高度 KEY_H
|
|
*/
|
|
|
|
class TARCH_EXP TDbBaseWall : public TDbStruEntityBase
|
|
{
|
|
DECLARE_TENTBASE();
|
|
ACRX_DECLARE_MEMBERS(TDbBaseWall);
|
|
|
|
private:
|
|
static const Adesk::UInt8 g_nVersion;
|
|
|
|
public:
|
|
TDbBaseWall();
|
|
virtual ~TDbBaseWall();
|
|
|
|
// Overriden function from AcDbEntity
|
|
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler* pFiler);//ok
|
|
|
|
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;//ok
|
|
|
|
virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler* pFiler);
|
|
|
|
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
|
|
|
|
virtual Acad::ErrorStatus subGetOsnapPoints(
|
|
AcDb::OsnapMode osnapMode,
|
|
INT_PTR gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeMatrix3d& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds) const;
|
|
|
|
virtual Acad::ErrorStatus subGetOsnapPoints(
|
|
AcDb::OsnapMode osnapMode,
|
|
INT_PTR gsSelectionMark,
|
|
const AcGePoint3d& pickPoint,
|
|
const AcGePoint3d& lastPoint,
|
|
const AcGeMatrix3d& viewXform,
|
|
AcGePoint3dArray& snapPoints,
|
|
AcDbIntArray& geomIds,
|
|
const AcGeMatrix3d& insertionMat) const;
|
|
|
|
virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);//ok
|
|
|
|
virtual Acad::ErrorStatus subGetGripPoints(
|
|
AcGePoint3dArray& gripPoints,
|
|
AcDbIntArray& osnapModes,
|
|
AcDbIntArray& geomIds)const;//ok
|
|
|
|
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray& stretchPoints) const;
|
|
|
|
virtual Acad::ErrorStatus subMoveGripPointsAt(
|
|
const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset);//ok
|
|
|
|
virtual Acad::ErrorStatus subMoveStretchPointsAt(
|
|
const AcDbIntArray& indices,
|
|
const AcGeVector3d& offset);
|
|
|
|
//
|
|
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
|
|
|
|
virtual Acad::ErrorStatus subDeepClone(AcDbObject* pOwner,
|
|
AcDbObject*& pClonedObject,
|
|
AcDbIdMapping& idMap,
|
|
Adesk::Boolean isPrimary) const;
|
|
|
|
virtual Acad::ErrorStatus subWblockClone(
|
|
AcRxObject* pOwner,
|
|
AcDbObject*& pClonedObject,
|
|
AcDbIdMapping& idMap,
|
|
Adesk::Boolean isPrimary) const;
|
|
|
|
virtual Acad::ErrorStatus subIntersectWith(
|
|
const AcDbEntity* ent,
|
|
AcDb::Intersect intType,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker = 0,
|
|
INT_PTR otherGsMarker = 0) const;
|
|
|
|
virtual Acad::ErrorStatus subIntersectWith(
|
|
const AcDbEntity* ent,
|
|
AcDb::Intersect intType,
|
|
const AcGePlane& projPlane,
|
|
AcGePoint3dArray& points,
|
|
INT_PTR thisGsMarker = 0,
|
|
INT_PTR otherGsMarker = 0) const;
|
|
|
|
// Overriden function from TDbCurveEntity
|
|
virtual AcDbCurve* GetBaseCurve()const;//临时对象,外部析构//ok
|
|
virtual Acad::ErrorStatus SetBaseCurve(AcDbCurve*pCurve); //用于trim/extent时修改对象
|
|
|
|
// Overriden function from TEntityBase
|
|
virtual Acad::ErrorStatus GetClipBoundary(TGGePoly2D& poly)const;
|
|
|
|
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
|
|
|
|
virtual Acad::ErrorStatus ExplodeOrDraw3d(TGGiExplodeDrawBase &dc) const;
|
|
|
|
virtual Acad::ErrorStatus ExplodeOrDraw2d(TGGiExplodeDrawBase &dc) const;//ok
|
|
|
|
virtual Acad::ErrorStatus GetExtents2d(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const;
|
|
|
|
virtual Acad::ErrorStatus GetExtents(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const;
|
|
|
|
// 统一标高
|
|
virtual bool UnifyElevation(double dElevation); //ok
|
|
|
|
//取动态属性显示数据
|
|
virtual void GetTips(TDPtrList<TObjInfoUnit> &) const;
|
|
|
|
virtual const TCHAR *GetDefaultLayer() const;
|
|
|
|
virtual BOOL IsValid() const;
|
|
|
|
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
|
|
|
|
virtual TEntityBase::DrawType GetDrawType() const;
|
|
|
|
virtual bool GetStandardFaceBody(AcDbVoidPtrArray& arFacePtrs) const;
|
|
|
|
virtual bool GetSafeProtectedSpace(AcDbVoidPtrArray& arFacePtrs) const;
|
|
|
|
virtual bool GetSection(const AcDbFace &face, const AcGeVector3d& vtPlaneSecDir,
|
|
std::vector<TObjSectionRecord> §ionRecords,
|
|
AcDbVoidPtrArray& arFillPtrs) const;
|
|
|
|
virtual CString GetXml(const AcGeMatrix3d& mat) const;
|
|
|
|
virtual int GetFirstVersion()const;
|
|
virtual bool IsModelEntity() const;
|
|
|
|
//TDbBaseWall
|
|
// 对象修改发出关联更改消息
|
|
virtual void PostAssocMsg(TAssocMsg assocMsg)const;
|
|
// 对象接收到更改消息
|
|
virtual void ReceiveAssocMsg(TAssocMsg assocMsg);//ok
|
|
// 建立关联关系
|
|
virtual void MakeAssocRelation(AcDbObjectIdArray& ids);//ok
|
|
// 不验证关系,直接建立关联关系
|
|
virtual void MakeAssocRelationDirect(const AcDbObjectId& idObj);
|
|
// 移除关联关系
|
|
virtual void RemoveAssocRelation(AcDbObjectId& id);//ok
|
|
// 获取关联关系,nType:关联类型;ar:关联对象句柄数组
|
|
virtual void GetAssocRelation(int nType, AcDbObjectIdArray& ar)const;//ok
|
|
// 获取墙的双线及优先级
|
|
virtual void GetThisBaseWallLine(TBaseWallLine& baseWall)const;//ok
|
|
// 获取关联墙线,arBaseWallLinesS:起始端关联墙线; arBaseWallLinesM:中间段关联墙线;arBaseWallLinesE:终止端关联墙线
|
|
virtual void GetAssocBaseWallLine(TDPtrList<TBaseWallLine>& arBaseWallLinesS, TDPtrList<TBaseWallLine>& arBaseWallLinesM, TDPtrList<TBaseWallLine>& arBaseWallLinesE)const;//ok
|
|
// 获取俯视图洞口边界线
|
|
virtual void GetAssocHoleline(TDPtrList<TGGePoly2D> &plHoles)const;
|
|
// 获取Z 方向的上下面,作为 Z 方向建立关系参考
|
|
virtual AcDbFace* GetXYAssocFace(bool bTopOrBottom)const;
|
|
// 图形修改了
|
|
virtual void recordGraphicModified()const;
|
|
// 获得总宽度
|
|
virtual void GetTotalWidth(double &dWidth)const;
|
|
// 获得总高度
|
|
virtual void GetTotalHeight(double &dHeight)const;
|
|
// 获得平面左右线
|
|
virtual void GetSideCurve(TGGeCurveSegment &lCurve, TGGeCurveSegment &rCurve) const;
|
|
// 夹点消息后,更新自己边界
|
|
virtual void UpdateMeOnGripMsg(TAssocMsg assocMsg);
|
|
// 抽象墙外框线
|
|
virtual void GetPoly2D(TGGePoly2D &poly2d) const;
|
|
virtual BOOL CanMerge(AcDbObjectId idWall);
|
|
|
|
// 裁剪梁的基础数组操作
|
|
void SetBaseIds(const AcDbObjectIdArray& ids);
|
|
void GetBaseIds(AcDbObjectIdArray& ids);
|
|
void RemoveBaseIds(const AcDbObjectId& id);
|
|
|
|
double GetBottomElev()const;
|
|
void SetBottomElev(double dElev);
|
|
|
|
// 获得抽象墙的中心线
|
|
TGGeCurveSegment GetCenterLine()const;
|
|
TGGeCurveSegment GetLongBaseLine()const;
|
|
|
|
// 取得墙体等分的参数
|
|
// 返回值:RTNORM/RTERROR/RTCAN
|
|
// [in]nDivType:等分类型:0,轴线等分加梁,1,净跨等分加梁,2,等分加墙,3,等分插洞;
|
|
// [in]nOpWidth:插入对象的宽度;ptNew:插入点
|
|
// [out]segThis:等分线段;nOpeningCount:等分数目,仅插洞时有意义;nUnitDist:等分长度,仅插洞时有意义
|
|
// [out]pSet:插梁或墙时的边界对象,插洞时为空
|
|
int GetIsoParameters(int nDivType, double nOpWidth, const TADSGePoint3d &ptNew, TGGeCurveSegment &segThis, int *nOpeningCount, double *nUnitDist, TEntitySet* pSet = NULL) const;
|
|
|
|
//获得端点可以合并的连接墙
|
|
//bStart:true,起始端,false,终止端
|
|
//idAssoc:连接墙的ID
|
|
//返回值:1,成功获得连接墙, 0,不成功
|
|
BOOL GetAssocWall(bool bStart, AcDbObjectId& idAssoc);
|
|
BOOL MergeWith(AcDbObjectId idWall);
|
|
|
|
Adesk::Boolean BreakAt(const TADSGePoint3d &ptLoc, const TGGePoly2D *pPolyColu);
|
|
protected:
|
|
|
|
// bLeft 判断是左线还是右线
|
|
Acad::ErrorStatus DrawBaseWall2d(TGGiExplodeDrawBase &dc, TGGeVisibilityPoly2D poly, bool bLeft) const;
|
|
// 当端点只有一个墙体与之融合时,返回墙体id
|
|
void GetWallId(bool bStart, AcDbObjectId &idWall) const;
|
|
// 处理板遮挡时,线段的绘制的实虚情况,vecSeg1保存实线,vecSeg2保存虚线
|
|
void GetSegmentForSlab2d(const TGGePoly2D &polySlab, const TGGeCurveSegment &seg, std::vector<TGGeCurveSegment> &vecSeg1, std::vector<TGGeCurveSegment> &vecSeg2) const;
|
|
// 平面内的线无交点的情况下,线是否在poly内
|
|
bool IsLineInPoly(TGGePoly2D &poly, AcDbLine *pLine) const;
|
|
// 过滤重复线,重合线
|
|
void FiltrateSegment(std::vector<TGGeCurveSegment> &vecSeg1, std::vector<TGGeCurveSegment> &vecSeg2) const;
|
|
// 过滤重复线
|
|
void FiltrateSegment(std::vector<TGGeCurveSegment> &vecSeg) const;
|
|
// 剪切与虚线重叠的实线
|
|
void FiltrateSegment(const TGGeCurveSegment &seg, std::vector<TGGeCurveSegment> &vecSeg) const;
|
|
|
|
int GetAxises(int nDivType, const TADSGePoint3d &ptAt, TEntitySet &lEntAxis, TEntitySet &rEntAxis) const;
|
|
|
|
protected:
|
|
|
|
AcDbObjectIdArray m_arAssocBWallIds;//xy平面关联对象ID数组
|
|
AcDbObjectIdArray m_arAssocZIds; //裁剪地梁的基础对象
|
|
AcDbObjectIdArray m_arHoleIds; //关联洞对象ID数组
|
|
AcDbObjectIdArray m_arSlabIds; //关联板对象ID数组
|
|
AcDbObjectIdArray m_arColumnIds; //关联柱子对象ID数组
|
|
|
|
|
|
};
|
|
#endif
|
|
#endif |