787 lines
25 KiB
C++
787 lines
25 KiB
C++
//-----------------------------------------------------------------------------+
|
||||
|
|
// Copyright (C), 1998-2007, Beijing Tangent Software Co. Ltd.
|
|||
|
|
// = FileName : TDbWall.h
|
|||
|
|
// = Version : ver2.0
|
|||
|
|
// = Author : xlc
|
|||
|
|
// = CreateDate : 2002-09-09
|
|||
|
|
// = Description: 墙体类的声明
|
|||
|
|
// = Maintainers:
|
|||
|
|
//
|
|||
|
|
//-----------------------------------------------------------------------------+
|
|||
|
|
#ifndef _TDBWALL_H_
|
|||
|
|
#define _TDBWALL_H_
|
|||
|
|
|
|||
|
|
#ifndef _TDBCURVEENTITY_H_
|
|||
|
|
#include "TDbCurveEntity.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TWALLBASE_H_
|
|||
|
|
#include "TWallBase.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TWALLDATA_H_
|
|||
|
|
#include "TWallData.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TGGECURVESEGMENT_H_
|
|||
|
|
#include "TGGeCurveSegment.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TGGIEXPLODEDRAW_H_
|
|||
|
|
#include "TGGiExplodeDraw.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef __OPENINGDATA_H
|
|||
|
|
#include "OpeningData.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TSORTEDVERTEXLIST_H_
|
|||
|
|
#include "TSortedVertexList.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TGGEPOLY2D_H_
|
|||
|
|
#include "TGGePoly2D.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TADSGEPOINT3D_H_
|
|||
|
|
#include "TADSGePoint3d.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TPICKENTSET_H_
|
|||
|
|
#include "TPickEntSet.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _TACDBOBJECTPTR_H_
|
|||
|
|
#include "TAcDbObjectPtr.h"
|
|||
|
|
#endif
|
|||
|
|
#ifdef TASD
|
|||
|
|
#ifndef _TSTRULOAD_H_
|
|||
|
|
#include "TStruLoad.h"
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
#ifndef _WALLSOLITINFO_H_
|
|||
|
|
#include "WallSplitInfo.h"
|
|||
|
|
#endif
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// 墙体模型: 包括直线墙和圆弧墙,不支持圆墙
|
|||
|
|
class TARCH_EXP TDbWall : public TDbCurveEntity, public TWallData ,public TWallBase
|
|||
|
|
{
|
|||
|
|
friend class TDbOpening;
|
|||
|
|
|
|||
|
|
DECLARE_TENTBASE();
|
|||
|
|
|
|||
|
|
ACRX_DECLARE_MEMBERS(TDbWall);
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
|
|||
|
|
TDbWall();
|
|||
|
|
|
|||
|
|
// 起点,终点,夹角定墙段
|
|||
|
|
TDbWall(const TADSGePoint3d &ptStart, const TADSGePoint3d &ptEnd, ads_real nSweepAng = 0.0);
|
|||
|
|
|
|||
|
|
~TDbWall();
|
|||
|
|
|
|||
|
|
// Overriden function from AcDbEntity
|
|||
|
|
virtual Acad::ErrorStatus audit(AcDbAuditInfo* pAuditInfo);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus subGetClassID(CLSID* pClsid) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler* pFiler);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler* pFiler);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* pFiler) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray&gripPoints,AcDbIntArray&,AcDbIntArray&)const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus subGetStretchPoints(AcGePoint3dArray & stretchPoints) 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);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus subMoveGripPointsAt(const AcDbIntArray& indices,
|
|||
|
|
const AcGeVector3d& offset);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus subMoveStretchPointsAt(const AcDbIntArray& indices,
|
|||
|
|
const AcGeVector3d& offset);
|
|||
|
|
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
// 为保留旧状态重载
|
|||
|
|
virtual Acad::ErrorStatus subOpen(AcDb::OpenMode mode);
|
|||
|
|
|
|||
|
|
// 为了通知门窗更新显示
|
|||
|
|
virtual Acad::ErrorStatus subErase(Adesk::Boolean bErasing);
|
|||
|
|
|
|||
|
|
// add by gjm 当与墙相关联的 glwkatana 对象发生改变时,通知
|
|||
|
|
virtual void modified(const AcDbObject* dbObj);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus subClose();
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus extend(Adesk::Boolean extendStart,
|
|||
|
|
const AcGePoint3d& toPoint) ;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus getOffsetCurvesGivenPlaneNormal(
|
|||
|
|
const AcGeVector3d& normal,
|
|||
|
|
double offsetDist,
|
|||
|
|
AcDbVoidPtrArray& offsetCurves) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus getOffsetCurves(double offsetDist,
|
|||
|
|
AcDbVoidPtrArray& offsetCurves) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus getSplitCurves(const AcGeDoubleArray& params,
|
|||
|
|
AcDbVoidPtrArray& curveSegments) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus getSplitCurves(const AcGePoint3dArray& points,
|
|||
|
|
AcDbVoidPtrArray& curveSegments) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus GetClipBoundary(TGGePoly2D& poly)const;
|
|||
|
|
|
|||
|
|
virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *pWd);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus GetGripText(int i, CString &cs) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus ExplodeOrDraw3d(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus ExplodeOrDraw2d(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus DownGradeSave(int nDrawMode, AcDbVoidPtrArray &entSet, BOOL *bErase);
|
|||
|
|
|
|||
|
|
// 加快速度,并防止虚墙求范围的错误
|
|||
|
|
virtual Acad::ErrorStatus GetExtents2d(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus GetExtents(TADSGePoint3d &ptLow, TADSGePoint3d &ptUp) const;
|
|||
|
|
|
|||
|
|
#if ADS>15
|
|||
|
|
|
|||
|
|
virtual void CreateGrip();
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus EntityToDim(long iGrip,long iDim,const AcDbEntity*pEnt);
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus DimToEntity(long iGrip,long iDim,double newValue,const AcGeVector3d& offset);
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
virtual bool IsModelEntity() const;
|
|||
|
|
|
|||
|
|
virtual bool IsMeClip()const;
|
|||
|
|
|
|||
|
|
//取动态属性显示数据
|
|||
|
|
virtual void GetTips(TDPtrList<TObjInfoUnit> &) const;
|
|||
|
|
|
|||
|
|
virtual const TCHAR *GetDefaultLayer() const;
|
|||
|
|
|
|||
|
|
virtual bool OnExplodeOrDraw(TGGiDrawStreamBase &dc)const;
|
|||
|
|
|
|||
|
|
virtual BOOL IsValid() const;
|
|||
|
|
|
|||
|
|
virtual void CopyPropertiesFrom(AcDbEntity *pSrcEntity, unsigned gMatchFlag);
|
|||
|
|
|
|||
|
|
virtual TEntityBase::DrawType GetDrawType() const;
|
|||
|
|
|
|||
|
|
virtual AcDbCurve* GetBaseCurve()const;
|
|||
|
|
|
|||
|
|
virtual Acad::ErrorStatus SetBaseCurve(AcDbCurve*pCurve);
|
|||
|
|
|
|||
|
|
virtual AcDbEntity* GetMyEntity()const;
|
|||
|
|
|
|||
|
|
virtual int GetMaterialIndex()const;
|
|||
|
|
|
|||
|
|
virtual Usage GetUsage()const;
|
|||
|
|
|
|||
|
|
//add by wlw on 101026 剖面
|
|||
|
|
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;
|
|||
|
|
#ifdef TASD
|
|||
|
|
virtual void MakeAssocRelation(AcDbObjectIdArray& ids);
|
|||
|
|
// 移除关联关系
|
|||
|
|
virtual void RemoveAssocRelation(AcDbObjectId& id);
|
|||
|
|
// 获取关联关系,nType:关联类型;ar:关联对象句柄数组
|
|||
|
|
virtual void GetAssocRelation(int nType, AcDbObjectIdArray& ar)const;
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// sg add 101115,支持统一标高
|
|||
|
|
virtual bool UnifyElevation(double dElevation = 0.0);
|
|||
|
|
|
|||
|
|
// 取门窗, bGetNormalOnly--1:只取标准的, 用于平面; 2:取全部,用于三维
|
|||
|
|
void GetOpenings(TDPtrList<TOpeningData> &lstOpening, BOOL bGetNormalOnly) const;
|
|||
|
|
|
|||
|
|
void GetSortedOpenings(TDPtrList<TOpeningData> &lstOpening) const;
|
|||
|
|
|
|||
|
|
BOOL HasOpeningType(TOpeningData::OpeningKind opk) const;
|
|||
|
|
|
|||
|
|
//考虑了转角窗对象TDbCornerWin
|
|||
|
|
BOOL HasCornerWin() const;
|
|||
|
|
|
|||
|
|
//未考虑转角窗对象TDbCornerWin
|
|||
|
|
BOOL HasCornerWinAcrossPoint(TADSGePoint3d pt) const;
|
|||
|
|
|
|||
|
|
bool HasOpeningOutWall()const;
|
|||
|
|
|
|||
|
|
// 用于夹点的操作
|
|||
|
|
Adesk::Boolean GetStretchLimit(TGGeCurveSegment &cvForStretch);
|
|||
|
|
|
|||
|
|
void StretchStartPoint(const AcGeVector3d& offset);
|
|||
|
|
|
|||
|
|
void StretchEndPoint(const AcGeVector3d& offset);
|
|||
|
|
|
|||
|
|
// 墙内门窗和连接的附件的操作
|
|||
|
|
// 加入一附件的ID
|
|||
|
|
Acad::ErrorStatus AddPatchId(AcDbObjectId id);
|
|||
|
|
|
|||
|
|
// 加入一门窗的ID
|
|||
|
|
Acad::ErrorStatus AddOpeningId(AcDbObjectId idOpening);
|
|||
|
|
|
|||
|
|
// 移走门窗的ID
|
|||
|
|
Acad::ErrorStatus RemoveReferenceOpening(AcDbObjectId nId);
|
|||
|
|
|
|||
|
|
// 移走附件的ID
|
|||
|
|
Acad::ErrorStatus RemovePatchId(AcDbObjectId nId);
|
|||
|
|
|
|||
|
|
const TDPtrList<AcDbSoftPointerId> & GetPatchIdList() const;
|
|||
|
|
|
|||
|
|
const TDPtrList<AcDbSoftPointerId> & GetOpeningIdList() const;
|
|||
|
|
|
|||
|
|
void ResetOpeningId(); //清空门窗列表
|
|||
|
|
|
|||
|
|
//把门窗的关系移到另一段墙上, 合并墙体时用
|
|||
|
|
void MoveOpeningTo(TDbWall &another);
|
|||
|
|
// 移动一个门窗关系到另一段墙上,katana使用 add by gjm
|
|||
|
|
void MoveOneOpeningTo(TDbWall &another, AcDbObjectId &id);
|
|||
|
|
|
|||
|
|
//把附件的关系移到另一段墙上, 合并墙体时用
|
|||
|
|
void MovePatchTo(TDbWall &another);
|
|||
|
|
// 移动一个附件关系到另一段墙上,katana使用 add by gjm
|
|||
|
|
void MoveOnePatchTo(TDbWall &another, AcDbObjectId &id);
|
|||
|
|
|
|||
|
|
// 判断是否可以插入一新的窗
|
|||
|
|
Adesk::Boolean CanInsertOpening(const TOpeningData &op) const;
|
|||
|
|
|
|||
|
|
// 判断是否可以插入一新的窗
|
|||
|
|
Adesk::Boolean CanInsertOpening(const TADSGePoint3d &ptLoc, double nSill,
|
|||
|
|
double nWidth, double nHeight, TOpeningData::OpeningKind opKind) const;
|
|||
|
|
|
|||
|
|
//验证同门窗之间的关系,并调整配属
|
|||
|
|
void ValidateContainership();
|
|||
|
|
|
|||
|
|
Adesk::Boolean CanContain(const TOpeningData &opening) const;
|
|||
|
|
|
|||
|
|
Acad::ErrorStatus InsertOpening(TDbOpening *pOpening);
|
|||
|
|
|
|||
|
|
void ApplyTransformToOpenings(const AcGeMatrix3d &xform);
|
|||
|
|
|
|||
|
|
// 改墙的标高, bChangeWin--是否连门窗一起改
|
|||
|
|
Acad::ErrorStatus ChangeElevation(double nNewElev, BOOL bChangeWin);
|
|||
|
|
|
|||
|
|
// 三维的绘制方法
|
|||
|
|
//封顶面
|
|||
|
|
void DrawWallTop3d(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
Acad::ErrorStatus ExplodeTo3dSolid(TGGiExplodeDraw &dc) const;
|
|||
|
|
|
|||
|
|
// 绘制三维弧墙的主墙面
|
|||
|
|
void DrawArcFace(TGGiExplodeDrawBase &dc, const TGGeArc &ar, double nHeight, const TDPtrList<TGGePoly2D> &holes) const;
|
|||
|
|
|
|||
|
|
// 绘制弧段的三维墙
|
|||
|
|
void Draw3dArcWall(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
// 二维的绘制和炸碎方法
|
|||
|
|
// 求粗边线内侧的线
|
|||
|
|
void GetThickLineSideCurve(TGGeCurveSegment &lCurve, TGGeCurveSegment &rCurve) const;
|
|||
|
|
|
|||
|
|
// 取得门窗洞侧线在指定路径上的排序
|
|||
|
|
void GetOpeningSidePoints(const TGGeCurveSegment &curveSeg, const TDPtrList<TOpeningData> &lstOpenings,
|
|||
|
|
BOOL bHasSortOpening, TSortedVertexList &lstVertexes, BOOL bInsulate = FALSE) const;
|
|||
|
|
|
|||
|
|
// 构成墙二维显示边线的区域, polyStart1和polyEnd1不封闭
|
|||
|
|
// wlw add 11.01.18 加lstPolyPatch1混凝土材质的门窗套 额外线段,lstPolyPatch2轻质的门窗套 额外线段
|
|||
|
|
// sg modify 120607,增加2个参数,专门用于如果是材料不同的门窗套,区分墙体和门窗套的挡板,分别填充
|
|||
|
|
//void Get2dPolys(TGGePoly2D &polyStart1, TGGePoly2D &polyEnd1, TDPtrList<TGGePoly2D> &lstPolyMid,
|
|||
|
|
// TDPtrList<TGGePoly2D> &lstPolyHole, TGGePoly2D &lInsulate, TGGePoly2D &rInsulate,
|
|||
|
|
// TDPtrList<TGGeCurveSegment> &lstPolyPatch1,TDPtrList<TGGeCurveSegment> &lstPolyPatch2) const;
|
|||
|
|
void Get2dPolys(TGGePoly2D &polyStart1, TGGePoly2D &polyEnd1, TDPtrList<TGGePoly2D> &lstPolyMid,
|
|||
|
|
TDPtrList<TGGePoly2D> &lstPolyHole, TGGePoly2D &lInsulate, TGGePoly2D &rInsulate,
|
|||
|
|
TDPtrList<TGGeCurveSegment> &lstPolyPatch1,TDPtrList<TGGeCurveSegment> &lstPolyPatch2,
|
|||
|
|
TDPtrList<TGGePoly2D> &lstPLWall,TDPtrList<TGGePoly2D> &lstPLSlot) const;
|
|||
|
|
|
|||
|
|
// 取基线上的等分线, 奇数为洞, 偶数为墙, 等分线长度可以为0
|
|||
|
|
// 备注: 所有的线段都在z=墙体标高
|
|||
|
|
// 返回: TRUE--成功/FALSE--门窗有干涉
|
|||
|
|
Adesk::Boolean GetDivideCurveOnBase(TGGePoly2D &polyDivide, BOOL bLimitBySide = FALSE) const;
|
|||
|
|
|
|||
|
|
// 通过墙体附近的点找最近的一个子段
|
|||
|
|
Adesk::Boolean GetSubSegmentAt(const TADSGePoint3d &ptPos, TGGeCurveSegment &segOn, BOOL bLimitBySide = FALSE) const;
|
|||
|
|
|
|||
|
|
// 根据墙垛取基线上的一段
|
|||
|
|
Adesk::Boolean GetSubSegmentByPierAt(const TADSGePoint3d &ptPos, TGGeCurveSegment &segOn) const;
|
|||
|
|
|
|||
|
|
Adesk::Boolean GetSubSegmentByAxisAt(const TADSGePoint3d &ptNew, TGGeCurveSegment &segThis) const;
|
|||
|
|
|
|||
|
|
// 求关键三段
|
|||
|
|
Adesk::Boolean GetKey3Seg(const TADSGePoint3d &ptAt, double nWidth, TGGePoly2D &poly) const;
|
|||
|
|
|
|||
|
|
Adesk::Boolean GetSubSegmentOnSideAt(const TADSGePoint3d &ptPos, TGGeCurveSegment &segOn) const;
|
|||
|
|
|
|||
|
|
//取得直墙的外壳
|
|||
|
|
void GetLinearShell(TGGePoly &polyOutline, TDPtrList<TGGePoly> &lstHoles);
|
|||
|
|
|
|||
|
|
//取得直墙的外壳, 考虑了转角窗以及门坎和窗台为0
|
|||
|
|
void GetLinearShell(TGGePoly2D &polyOutline, TDPtrList<TGGePoly2D> &lstHoles);
|
|||
|
|
|
|||
|
|
//取得对应的填充图案名称,如果没有图案名称,返回NULL
|
|||
|
|
//返回的指针在下一次调用GetHatchPattern之前可以安全的使用
|
|||
|
|
// sg modify 120607,增加一个形参其值在内部被转换为TWallStyle
|
|||
|
|
// 获得指定类型的材料的填充样式名,如果使用默认值,即传入值为0时,则使用m_style
|
|||
|
|
// const TCHAR *GetHatchPattern() const;
|
|||
|
|
const TCHAR *GetHatchPattern(int nStyle = 0) const;
|
|||
|
|
|
|||
|
|
// Adesk::UInt16 GetHatchColor()const;
|
|||
|
|
Adesk::UInt16 GetHatchColor(int nStyle = 0)const;
|
|||
|
|
|
|||
|
|
//取本墙线厚度,不管加粗开关是否开启
|
|||
|
|
// double GetLineWeight(BOOL bAsPaperUnit = TRUE) const;
|
|||
|
|
double GetLineWeight(BOOL bAsPaperUnit = TRUE, int nStyle = 0) const;
|
|||
|
|
|
|||
|
|
// AcDbObjectId GetLineHatchId()const;
|
|||
|
|
AcDbObjectId GetLineHatchId(int nStyle = 0)const;
|
|||
|
|
|
|||
|
|
// BOOL IsLineHatch()const;
|
|||
|
|
BOOL IsLineHatch(int nStyle = 0)const;
|
|||
|
|
|
|||
|
|
void GetSideSegments(TDPtrList<TGGeCurveSegment> &lSegs, TDPtrList<TGGeCurveSegment> &rSegs) const;
|
|||
|
|
// 被曲线分割, 如果分割点在柱子内,则不计入
|
|||
|
|
int Divide(const TGGeCurveSegment &curve, TADSGePoint3d &pt1, TADSGePoint3d &pt2, TPickEntSet &ssColu);
|
|||
|
|
|
|||
|
|
int PosRelationWith(const TGGeCurveSegment &curve);
|
|||
|
|
|
|||
|
|
// 向一点靠齐(使得边线通过给定的点)
|
|||
|
|
// ptPick--指定对齐的边, ptDest--指定要对到的点
|
|||
|
|
Acad::ErrorStatus AlignTo(const TADSGePoint3d &ptPick, const TADSGePoint3d &ptDest);
|
|||
|
|
|
|||
|
|
// nPrecFlag: 0--使用墙体衔接精度(用于被另一墙打断), 1--使用ptLoc是否位于墙体内
|
|||
|
|
//modify by lfy on 100418 优化墙体速度
|
|||
|
|
//Adesk::Boolean BreakAt(const TADSGePoint3d &ptLoc, AcDbObjectId &idNewWall, const TGGePoly2D *pPoly = NULL);
|
|||
|
|
Adesk::Boolean BreakAt(const TADSGePoint3d &ptLoc, AcDbObjectId &idNewWall, const TGGePoly2D *pPoly = NULL,PVOID pExtMap = NULL, bool bPrompt = false);
|
|||
|
|
|
|||
|
|
void RelocateOpening() const; //重新定位门窗
|
|||
|
|
|
|||
|
|
// 取得等分插窗的参数
|
|||
|
|
// ptNew--点取位置, segThis(O)--等分发生的曲线段, nOpeningCount(O)--门窗个数, nUnitDist--单元距离
|
|||
|
|
// 返回: RTNORM/RTERROR/RTCAN
|
|||
|
|
int GetIsoParameters(double nOpWidth, const TADSGePoint3d &ptNew, TGGeCurveSegment &segThis, int *nOpeningCount, double *nUnitDist) const;
|
|||
|
|
|
|||
|
|
// 更新相关的对象的显示, 墙厚度改变后
|
|||
|
|
void UpdateAssocObjectGraphics();
|
|||
|
|
|
|||
|
|
void ReLink(AcDbObjectId idOld,AcDbObjectId idNew);
|
|||
|
|
|
|||
|
|
// add by xlc on 101119 解除与墙不在同一工作集里的对象绑定
|
|||
|
|
void ReLinkWithOwner();
|
|||
|
|
|
|||
|
|
void PreErase();
|
|||
|
|
|
|||
|
|
// 得到属性的方法
|
|||
|
|
// 取的异形立面的有效系数,即裁剪后基面积/裁剪前基面积. 对于矩形立面为1.0
|
|||
|
|
double GetShapeRatio() const;
|
|||
|
|
|
|||
|
|
// 求表面积, 扣除墙洞
|
|||
|
|
double GetSurfaceArea(int nSide) const;
|
|||
|
|
|
|||
|
|
//求表面积, 不扣除洞
|
|||
|
|
double GetSegSurfaceArea(int nSide) const;
|
|||
|
|
|
|||
|
|
//求墙洞的表面积(墙内)
|
|||
|
|
double GetHoleSurfaceArea() const;
|
|||
|
|
|
|||
|
|
//求洞的面积(墙面)
|
|||
|
|
double GetHoleArea() const;
|
|||
|
|
|
|||
|
|
double GetHoleArea(TOpeningData::OpeningKind op) const;
|
|||
|
|
|
|||
|
|
//求墙段体积,不扣除门窗
|
|||
|
|
double GetSegVolume() const;
|
|||
|
|
|
|||
|
|
//求墙体体积,扣除墙洞
|
|||
|
|
double GetVolume() const;
|
|||
|
|
|
|||
|
|
//求洞的体积
|
|||
|
|
double GetHoleVolume() const;
|
|||
|
|
|
|||
|
|
//窗墙面积比:>=0正常,其他为错误发生,全部门窗面积和墙面积的比
|
|||
|
|
double GetAreaIndex() const;
|
|||
|
|
|
|||
|
|
// 平均传热系数W/m2.K
|
|||
|
|
// 待完成
|
|||
|
|
double GetUValue() const;
|
|||
|
|
|
|||
|
|
// 热惰性指标
|
|||
|
|
// 待完成
|
|||
|
|
double GetInertiaIndex() const;
|
|||
|
|
|
|||
|
|
// 求墙的轴网坐标:sHor-横坐标,sVer-纵坐标
|
|||
|
|
// 首先找墙端的两两相交的轴线,然后通过轴线找轴号
|
|||
|
|
BOOL HitOnAxis(const TDPtrList<AcDbObjectId> &lstAxLab, const TDPtrList<TGGeCurveSegment> &lstAxis,
|
|||
|
|
TCString &sHorS, TCString &sVerS, TCString &sHorE, TCString &sVerE) const;
|
|||
|
|
|
|||
|
|
// 内部使用
|
|||
|
|
//对上华5Beta版本进行升级, ver=3->4
|
|||
|
|
void UpdateFromBeta();
|
|||
|
|
|
|||
|
|
// 设置立面轮廓形状
|
|||
|
|
void SetPolyShape(const TGGePoly2D &shape);
|
|||
|
|
|
|||
|
|
// sg add 091120,获取立面轮廓形状
|
|||
|
|
void GetPolyShape(TGGePoly2D &shape);
|
|||
|
|
|
|||
|
|
void SetLeftSpace(AcDbObjectId id);
|
|||
|
|
|
|||
|
|
AcDbObjectId GetLeftSpace() const;
|
|||
|
|
|
|||
|
|
void SetRightSpace(AcDbObjectId id);
|
|||
|
|
|
|||
|
|
AcDbObjectId GetRightSpace() const;
|
|||
|
|
|
|||
|
|
void SetLayerLeft3d(AcDbObjectId id);
|
|||
|
|
|
|||
|
|
AcDbObjectId GetLayerLeft3d() const;
|
|||
|
|
|
|||
|
|
void SetLayerRight3d(AcDbObjectId id);
|
|||
|
|
|
|||
|
|
AcDbObjectId GetLayerRight3d() const;
|
|||
|
|
|
|||
|
|
void SetLayerHatch2d(AcDbObjectId id);
|
|||
|
|
|
|||
|
|
AcDbObjectId GetLayerHatch2d() const;
|
|||
|
|
|
|||
|
|
void SetLayerSurf2d(AcDbObjectId id);
|
|||
|
|
|
|||
|
|
AcDbObjectId GetLayerSurf2d() const;
|
|||
|
|
|
|||
|
|
#ifdef TASD
|
|||
|
|
//荷载
|
|||
|
|
AcDbObjectId GetLayerLoad() const;
|
|||
|
|
void SetLayerLoad(AcDbObjectId idLayer);
|
|||
|
|
//活荷值
|
|||
|
|
AcDbObjectId GetLayerLoadL() const;
|
|||
|
|
void SetLayerLoadL(AcDbObjectId idLayer);
|
|||
|
|
//恒荷值
|
|||
|
|
AcDbObjectId GetLayerLoadC() const;
|
|||
|
|
void SetLayerLoadC(AcDbObjectId idLayer);
|
|||
|
|
//文字样式
|
|||
|
|
AcDbObjectId GetTextStyle() const;
|
|||
|
|
void SetTextStyle(AcDbObjectId idLayer);
|
|||
|
|
//文字样式
|
|||
|
|
AcDbObjectId GetTextStyleRB() const;
|
|||
|
|
void SetTextStyleRB(AcDbObjectId idLayer);
|
|||
|
|
//设置荷载数组
|
|||
|
|
bool SetLoadsArray(const std::vector<TStruLoad>& vectLoads);
|
|||
|
|
//获得荷载数组
|
|||
|
|
bool GetLoadsArray(std::vector<TStruLoad>& vectLoads)const;
|
|||
|
|
//清除荷载数组
|
|||
|
|
void ClearLoadsArray();
|
|||
|
|
bool SetAt(LPCTSTR pszKey,const std::vector<TStruLoad>& vectLoads);
|
|||
|
|
bool GetAt(LPCTSTR pszKey,std::vector<TStruLoad>& vectLoads)const;
|
|||
|
|
void RemoveLoadsKey(LPCTSTR pszKey);
|
|||
|
|
// 墙的榀数
|
|||
|
|
void GetWallSplit(std::vector<CWallSplitInfo> &vecWallSplit)const;
|
|||
|
|
void SetWallSplit(const std::vector<CWallSplitInfo> &vecWallSplit);
|
|||
|
|
|
|||
|
|
void GetTotalWidth(double &dWidth)const;
|
|||
|
|
// 获得总高度
|
|||
|
|
void GetTotalHeight(double &dHeight)const;
|
|||
|
|
Acad::ErrorStatus SetStruWidth(double dLeftWidth , double dRightWidth);
|
|||
|
|
#endif
|
|||
|
|
//节能属性
|
|||
|
|
BOOL IsTransparent()const;
|
|||
|
|
|
|||
|
|
void SetTransparent(BOOL bTrue);//设透明幕墙
|
|||
|
|
|
|||
|
|
// 用途标志
|
|||
|
|
enum Catalog
|
|||
|
|
{
|
|||
|
|
kUnknown = 0, //交互拖曳
|
|||
|
|
|
|||
|
|
kExternal = 1, //外墙
|
|||
|
|
|
|||
|
|
kInternal = 2, //内墙
|
|||
|
|
|
|||
|
|
kDispartOwner = 3, //户墙
|
|||
|
|
|
|||
|
|
kToiletSlab = 4, //卫生隔断
|
|||
|
|
|
|||
|
|
kVirtDispart = 5, //虚墙,仅仅作为空间的逻辑分隔
|
|||
|
|
|
|||
|
|
kFence = 6 //围墙:目前1~5合理
|
|||
|
|
}; //以后取代Usage,
|
|||
|
|
|
|||
|
|
TDbWall::Catalog GetCatalog() const;
|
|||
|
|
|
|||
|
|
// 设置墙类型
|
|||
|
|
Acad::ErrorStatus SetCatalog(TDbWall::Catalog cat) ;
|
|||
|
|
|
|||
|
|
// 0:双内;1:左外;2:右外;3:双外;
|
|||
|
|
int GetIOFeature() const ;
|
|||
|
|
|
|||
|
|
// iFlag:0: 双内;1:左外;2:右外;3:双外;
|
|||
|
|
Acad::ErrorStatus SetIOFeature(int iFlag);
|
|||
|
|
|
|||
|
|
static TDbWall * UserSelect(TADSGePoint3d &ptOld, TADSGePoint3d &ptNew, AcDb::OpenMode opMode);
|
|||
|
|
//T20新材料wlw add140214
|
|||
|
|
CString GetT20WallMat() const;
|
|||
|
|
void SetT20WallMat(CString sMat);
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
// add by gjm
|
|||
|
|
Acad::ErrorStatus EraseWindow(Adesk::Boolean bErase);
|
|||
|
|
Acad::ErrorStatus EraseKatana(Adesk::Boolean bErase);
|
|||
|
|
void ProcessWallModified(TDbWall *pWall);
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
|
|||
|
|
// 不存盘的数据,用于修改前保留旧的墙角,以便更新墙角
|
|||
|
|
TADSGePoint3d m_ptOldStart, m_ptOldEnd;
|
|||
|
|
|
|||
|
|
//TArch7 data
|
|||
|
|
//节能数据
|
|||
|
|
//节能特性,obsolete
|
|||
|
|
int m_iEnFlag;
|
|||
|
|
|
|||
|
|
//墙构造
|
|||
|
|
TCString m_sCons;
|
|||
|
|
|
|||
|
|
//日照吸收率
|
|||
|
|
double m_dbAbsorption;
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
|
|||
|
|
virtual AcDbObjectId GetMyObjectId() const;
|
|||
|
|
|
|||
|
|
virtual AcDbObjectId GetMyOwnerId()const;
|
|||
|
|
|
|||
|
|
// Helper function
|
|||
|
|
// 求考虑柱子干涉的填充区域
|
|||
|
|
// idColu(I)--柱子; polyStartIn(I/O)--区域
|
|||
|
|
void GetHatchBoundary(const AcDbObjectId &idColut, TGGePoly2D &polyStartIn) const;
|
|||
|
|
|
|||
|
|
//绘制和分解有关的辅助函数
|
|||
|
|
BOOL GetSidePathNoHole(const TGGeCurveSegment &cvLeft, const TGGeCurveSegment &cvRight,
|
|||
|
|
TGGePoly2D &leftPath, TGGePoly2D &rightPath) const;
|
|||
|
|
// 虚墙的绘制,2D&3D
|
|||
|
|
void DrawVirtualWall(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
// 绘制4线玻璃幕墙的内部线条
|
|||
|
|
void Draw2dGlassLine4(TGGiExplodeDrawBase &dc, const TDPtrList<TGGePoly2D> &lstPolyHole) const;
|
|||
|
|
|
|||
|
|
// 没有门窗洞时绘制二维墙体的内部填充图案
|
|||
|
|
void Draw2dHatchNoHole(TGGiExplodeDrawBase &dc, const TCHAR *pszHatchPattern,
|
|||
|
|
const TGGeCurveSegment &cvLeft, const TGGeCurveSegment &cvRight) const;
|
|||
|
|
|
|||
|
|
// 没有门窗时绘制/炸碎二维墙体
|
|||
|
|
void Draw2dSideNoHole(TGGiExplodeDrawBase &dc, BOOL bThick,
|
|||
|
|
const TGGeCurveSegment &cvLeft, const TGGeCurveSegment &cvRight) const;
|
|||
|
|
|
|||
|
|
//有门窗洞时绘制二维填充图案
|
|||
|
|
void Draw2dHatchWithHole(TGGiExplodeDrawBase &dc, const TCHAR *pszHatchPattern,const TGGePoly2D &polyStart1,
|
|||
|
|
const TDPtrList<TGGePoly2D> &lstMid, const TGGePoly2D &polyEnd1) const;
|
|||
|
|
|
|||
|
|
// 含二维门窗洞时的绘制方法
|
|||
|
|
void Draw2dThinWithHole(TGGiExplodeDrawBase &dc, const TGGeCurveSegment &cvLeft, const TGGeCurveSegment &cvRight,
|
|||
|
|
const TGGePoly2D &polyStart1, const TDPtrList<TGGePoly2D> &lstPolyMid,
|
|||
|
|
const TGGePoly2D & polyEnd1) const;
|
|||
|
|
|
|||
|
|
// 在没有门窗洞的情况下绘制粗线边线
|
|||
|
|
void Draw2dThickWithHole(TGGiExplodeDrawBase &dc, const TGGeCurveSegment &segLeft, const TGGeCurveSegment &segRight,
|
|||
|
|
const TGGePoly2D &polyStart1, const TDPtrList<TGGePoly2D> &lstMid, const TGGePoly2D &polyEnd1) const;
|
|||
|
|
//绘制端头线
|
|||
|
|
void Draw2dTerm(TGGiExplodeDrawBase &dc, const TGGeCurveSegment &cvLeft,
|
|||
|
|
const TGGeCurveSegment &cvRight, double nThick) const;
|
|||
|
|
|
|||
|
|
void ClipByPatch(TDPtrList<TGGeCurveSegment> &lstCurveSegs, BOOL bClipAlways = FALSE) const;
|
|||
|
|
|
|||
|
|
void ClipByPatch(TDPtrList<TGGeCurveSegment> &lstCurves, TDPtrList<TGGeCurveSegment> &lstCurvesIn) const;
|
|||
|
|
|
|||
|
|
// 在cvOut和cvIn之间填实, 并考虑墙体附件的裁剪
|
|||
|
|
void DrawSolid(TGGiExplodeDrawBase &dc, const TGGeCurveSegment &cvOut,
|
|||
|
|
const TGGeCurveSegment &cvIn) const;
|
|||
|
|
|
|||
|
|
// 绘制填充, 考虑附件的裁剪, pszPatterh==NULL时进行填实
|
|||
|
|
void DrawHatch(TGGiExplodeDrawBase &dc, const TGGePoly2D &cvPoly,
|
|||
|
|
const TCHAR *pszPattern = NULL) const;
|
|||
|
|
|
|||
|
|
//绘制线填充
|
|||
|
|
void DrawLineHatch(TGGiExplodeDrawBase&dc,const TGGeCurveSegment&cvLeft,const TGGeCurveSegment&cvRight)const;
|
|||
|
|
|
|||
|
|
// 如果其他构件优先(强)于本构件, 则用它们的外轮廓, 如果相等用内轮廓
|
|||
|
|
void GetInPatchObjectOutline(TDPtrList<TGGePoly2D> &lstClipPolies) const;
|
|||
|
|
|
|||
|
|
void ExplodeOrDrawOpSlot3d(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
// 绘制直段的三维墙
|
|||
|
|
void ExplodeOrDrawLinearWall3d(TGGiExplodeDrawBase &dc, const TGGeCurveSegment &cvLeft,
|
|||
|
|
const TGGeCurveSegment &cvRight) const;
|
|||
|
|
|
|||
|
|
void GetNoPoreHoleOutline2d(TDPtrList<TGGePoly2D> &lstOutlines) const;
|
|||
|
|
|
|||
|
|
//得到门窗套保温参数 //wlw修改100629
|
|||
|
|
BOOL GetOpeningSoltPA(TDPtrList<AcDbSoftPointerId>& lstOpeningId, const TADSGePoint3d& ptPos, double& dW, double& dH,
|
|||
|
|
double& dIsThick,double& dInstBack, BOOL& bHasLeftSlab, BOOL& bHasRigSlab) const;
|
|||
|
|
|
|||
|
|
// 节能属性
|
|||
|
|
protected:
|
|||
|
|
|
|||
|
|
// 是否为分户墙
|
|||
|
|
BOOL IsDispartOwner() const;
|
|||
|
|
|
|||
|
|
void SetDispartOwner(BOOL bTrue);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
|
|||
|
|
//墙上的所有门窗的ID
|
|||
|
|
TDPtrList<AcDbSoftPointerId> m_lstOpeningId;
|
|||
|
|
|
|||
|
|
//墙上所有附件的ID
|
|||
|
|
TDPtrList<AcDbSoftPointerId> m_lstPatchId;
|
|||
|
|
|
|||
|
|
//异形立面
|
|||
|
|
TGGePoly2D *m_pShapePoly;
|
|||
|
|
|
|||
|
|
// TArch6 data
|
|||
|
|
//左右2侧的三维图层
|
|||
|
|
AcDbHardPointerId m_idLayerLeft3d, m_idLayerRight3d;
|
|||
|
|
|
|||
|
|
//填充层和保温层(面层)
|
|||
|
|
AcDbHardPointerId m_idLayerHatch2d, m_idLayerSurf2d;
|
|||
|
|
|
|||
|
|
//左边的房间和右边的房间
|
|||
|
|
AcDbSoftPointerId m_idLeftSpace, m_idRightSpace;
|
|||
|
|
|
|||
|
|
AcDbObjectIdArray m_arSlabIds; //关联板对象ID数组
|
|||
|
|
#ifdef TASD
|
|||
|
|
//结构数据
|
|||
|
|
AcDbHardPointerId m_idLayerLoad; //荷载
|
|||
|
|
AcDbHardPointerId m_idLayerLoadL; //活荷值
|
|||
|
|
AcDbHardPointerId m_idLayerLoadC; //恒荷值
|
|||
|
|
AcDbHardPointerId m_idTextStyle; //文字样式
|
|||
|
|
AcDbHardPointerId m_idTextStyleRB; //文字样式
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
//当前版本
|
|||
|
|
static const Adesk::UInt8 g_nVersion;
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
void ModifyXPoly2DStart(TGGePoly2D& poly,TGGeCurveSegment seg) const;
|
|||
|
|
void ModifyXPoly2DEnd(TGGePoly2D& poly,TGGeCurveSegment seg) const;
|
|||
|
|
|
|||
|
|
//wlw修改100629
|
|||
|
|
//绘制保温线
|
|||
|
|
void DrawInsulateLine(const TGGeCurveSegment &cvLeft, const TGGeCurveSegment &cvRight,
|
|||
|
|
const TGGePoly2D& lInsulate,const TGGePoly2D& rInsulate, TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
//得到保温线的CAP
|
|||
|
|
void DrawInsulateCapLine(const TGGePoly2D& lInsulate, const TGGePoly2D& rInsulate,
|
|||
|
|
const TGGeCurveSegment&cvLeft, const TGGeCurveSegment& cvRight, TGGiExplodeDrawBase &dc) const;
|
|||
|
|
//画不同厚度下两个墙相连时,临墙保温线加拐弯。
|
|||
|
|
//根据返回值回缩当前墙的保温线,0不做处理,1start点需要回缩,2,end点需要回缩,3都需要回缩
|
|||
|
|
BOOL DrawInsulateCapLineEx(const TGGePoly2D& polyInsulate, const TGGeCurveSegment& segSide,
|
|||
|
|
AcGeVector3d& vtStart, AcGeVector3d& vtEnd, TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
// add by xlc on 100913 绘制不贯穿洞紧贴柱子时的融合墙线
|
|||
|
|
void DrawLineOnHoleAndColu(TGGiExplodeDrawBase &dc, BOOL bThick, AcDbObjectId idColu, BOOL bStart)const;
|
|||
|
|
|
|||
|
|
// add by wlw on 101028 剖面算面用
|
|||
|
|
BOOL GetFaceFrom2Line(const TGGeCurveSegment& cvLeft,const TGGeCurveSegment& cvRight, double dHeight,AcDbVoidPtrArray& arFacePtrs) const;
|
|||
|
|
|
|||
|
|
//add by xlc on 101224 计算cvSeg与poly的交点
|
|||
|
|
bool CalIntersect(TGGeCurveSegment &cvSeg, TGGePoly2D &poly, BOOL bStart, TADSGePoint3d &ptRes)const;
|
|||
|
|
|
|||
|
|
#ifdef TASD
|
|||
|
|
///
|
|||
|
|
Acad::ErrorStatus StruExplodeOrDraw3d(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
Acad::ErrorStatus StruExplodeOrDraw2d(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 墙宽标注
|
|||
|
|
void DrawBH(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
// 墙体构件编号标注
|
|||
|
|
void DrawCLab(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
// 功能:得到中心线的中心点和圆心得连线的角度和距离
|
|||
|
|
// [in]:dDis: 到墙边的距离
|
|||
|
|
// return: 中心线的中点和圆心连线的角度
|
|||
|
|
double GetCenetrAngle(double &dDis) const;
|
|||
|
|
BOOL GetLRPoint(XPoint &ptStart, XPoint &ptEnd)const;
|
|||
|
|
void DrawWallLoad(TGGiExplodeDrawBase &dc) const;
|
|||
|
|
void DrawWallLoadText2d(TStruLoad loadData, double dAugle,
|
|||
|
|
double &dDis, TGGiExplodeDrawBase &dc) const;
|
|||
|
|
void DrawArrow3D(TGGeCurveSegment seg, TGGiExplodeDrawBase &dc, int nEdgeFalg=1)const;
|
|||
|
|
void DrawWallLoad3D(TGGiExplodeDrawBase &dc)const;
|
|||
|
|
void DrawLoadText3D(TStruLoad loadData, double dAugle, double &dZ, TGGiExplodeDrawBase &dc)const;
|
|||
|
|
// 几何形心上的曲线, 端点位置不能作为准确的依据
|
|||
|
|
TGGeCurveSegment TDbWall::GetCenterLine() const;
|
|||
|
|
|
|||
|
|
void IsFloorCover(TGGeCurveSegment cvLeft, TGGeCurveSegment cvRight, BOOL& bLeft, BOOL& bRight)const;
|
|||
|
|
#endif
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
inline BOOL HasBanWinAcross(AcDbObjectId idWall, TADSGePoint3d ptAt)
|
|||
|
|
{
|
|||
|
|
BOOL bRet = FALSE;
|
|||
|
|
OPENOBJ_BEGIN(idWall, AcDb::kForRead, TDbWall, pWall);
|
|||
|
|
if (pWall)
|
|||
|
|
{
|
|||
|
|
bRet = pWall->HasCornerWinAcrossPoint(ptAt);
|
|||
|
|
}
|
|||
|
|
OPENOBJ_END();
|
|||
|
|
|
|||
|
|
return bRet;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#endif
|