//------------------------------------------------------------------------+ // 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 &) 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 §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& arBaseWallLinesS, TDPtrList& arBaseWallLinesM, TDPtrList& arBaseWallLinesE)const;//ok // 获取俯视图洞口边界线 virtual void GetAssocHoleline(TDPtrList &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 &vecSeg1, std::vector &vecSeg2) const; // 平面内的线无交点的情况下,线是否在poly内 bool IsLineInPoly(TGGePoly2D &poly, AcDbLine *pLine) const; // 过滤重复线,重合线 void FiltrateSegment(std::vector &vecSeg1, std::vector &vecSeg2) const; // 过滤重复线 void FiltrateSegment(std::vector &vecSeg) const; // 剪切与虚线重叠的实线 void FiltrateSegment(const TGGeCurveSegment &seg, std::vector &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