//-----------------------------------------------------------------------------+ // Copyright (C), 1998-2007, SH Software Co. Ltd. // = FileName : TchGlobalDef.h // = Version : ver2.0 // = Author : // = CreateDate : 2002-09-09 // = Description: 全局定义宏 // = Maintainers: // //-----------------------------------------------------------------------------+ #ifndef _XGLOBALDEF_H_ #define _XGLOBALDEF_H_ #include "xarchmatchprop.h" #define _AEC_VERSION 8 #define NEW_GEOMETRY #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 #define REWIND 1 #define CONTINUE 0 #define DRAW_2D 0x01 #define DRAW_3D 0x02 //Intersect #define INT_NULL 0 //不相交 #define INT_1PT 1 //交于1点 #define INT_2PT 2 //交于2点 #define INT_LINE 10 //交于线 #define INT_CIRCLE 11 //交于圆 #define INT_PLANE 12 //交于平面 #define GR_OUT 0x00000000 //not include #define GR_IN 0x00000001 //include #define GR_LEFT 0x00000002 //for curve #define GR_RIGHT 0x00000004 //for curve #define GR_INSIDE 0x00000002 //for close curve and close plane #define GR_OUTSIDE 0x00000004 //for close curve and close plane #define GR_DOWN 0x00000002 //for plane #define GR_UP 0x00000004 //for plane #define GR_EDGE 0x00000008 //for GRegion2D #define GR_HOLE 0x00000010 //forGRegion2D extern GEOAPI BOOL DocGetCurMeterUnitDraw(); #define g_bMeterUnitDraw DocGetCurMeterUnitDraw() //系统单位相对于毫米的数值比例 #define _UNIT_SCALE (g_bMeterUnitDraw ? 0.001 : 1.0) //把MM单位换算为系统单位 #define _AS_SYS_UNIT(nMM) (nMM * _UNIT_SCALE) //把系统的距离单位换算为毫米 #define _AS_MM(nDist) ((nDist) / _UNIT_SCALE) //把系统的距离单位换算为米 #define _AS_METER(nDist) (_AS_MM(nDist) / 1000.0) //把系统的面积单位换算为平方米 #define _AS_SQMETER(nArea) ((nArea) / (1000.0 * _UNIT_SCALE) / (1000.0 * _UNIT_SCALE)) //把系统的体积单位换算为立方米 #define _AS_CUMETER(nVolume) ((nVolume) / (1000.0 * _UNIT_SCALE) / (1000.0 * _UNIT_SCALE) / (1000.0 * _UNIT_SCALE)) #define MAX_MIN(mn, type) \ { \ va_list vlst; \ va_start(vlst, r1); \ type res = r1; \ for(int i = 0; i < n-1; i++) { \ type r = va_arg(vlst, type); \ res = mn(res, r); \ } \ va_end(vlst); \ return res; \ } #ifdef _UNICODE #define TString UString #define CmpLabel UCmpLabel #define _US(s) s #define _AS(s) AString(s).GetBuffer() #else #define TString AString #define CmpLabel ACmpLabel #define _US(s) UString(s).GetBuffer() #define _AS(s) s #endif/*_UNICODE*/ #ifdef _UNICODE #define XString XWString #define tstrchr_new wstrchr_new #define tstrnew wstrnew #define XStringList XWStringList #else #define XString XAString #define tstrchr_new strchr_new #define tstrnew strnew #define XStringList XAStringList #endif/*_UNICODE*/ #define OBJ_DELETE 0x01 #define OBJ_APPEND 0x02 #define OBJ_CHANGE 0x04 #define DRAGGER #define LAY_MASK _T("_AEC_MASK") #define MXYZ 0 #define SXYZ 1 #define RX 2 #define RY 3 #define RZ 4 #define NOP 5 #define EXIT 6 #define MAXBUFSIZE 1000 #define printf ads_printf #undef putchar #define putchar(c) ads_printf(_T("%c"), c) #define PACKSIZE 8192 //data divided to segment of 2048 bytes #define COMPRESSFLAG "AS LZW 1.0 " #define HEADLENGTH 40 // file head is 40 bytes #define SUCCEED 0 //return flag to note succeed operation #define NOMEMORY 1 //can not alloc enough memory #define WRONGDATA 2 //input file has wrong data #define ILLFORMAT 3 //can decompress only our file format #define NOCONTENT 4 #if (ARX>15) #define _ios std::ios_base #else #define _ios ios #endif //鼠标感应对象 #define g_entMouseOn DocGetEntMouseOn() //当前选择集(如果实际选择为空,则是g_entMouseOn) #define g_ssPickFirst DocGetPickFirst() #define CT_RealEqual(num1, num2, prec) (fabs((num1) - (num2)) < (prec)) #define CT_RevDrt(drt) (CT_std_angle((drt) + PI)) #define CT_IsExactSameDrt(drt1,drt2,prec) ((fabs(CT_std_angle((drt1) - (drt2))) < prec || fabs(CT_std_angle((drt2) - (drt1))) < prec) ? 1:0) #define CT_IsSameDrt(drt1, drt2, prec) (fabs(sin((drt1) - (drt2))) < prec? 1 : 0) #define CT_IsOrthDrt(drt1, drt2, prec) (fabs(cos((drt1) - (drt2))) < prec? 1 : 0) #define AS_INT(f) (f < 0.0 ? int((f) - 0.5) : int((f) + 0.5)) #define OS_NON 0 #define OS_END 1 #define OS_MID 2 #define OS_CEN 4 #define OS_NOD 8 #define OS_QUA 16 #define OS_INT 32 #define OS_INS 64 #define OS_PER 128 #define OS_TAN 256 #define OS_NEA 512 #define OS_QUI 1024 #define OS_APP 2048 #define XD_INT 1070 #define XD_REAL 1040 #define XD_POINT 1010 #define XD_STR 1000 #define XD_HANDLE 1005 #define ELEMENTS(array) (sizeof(array) / sizeof((array)[0])) #define Spoint(pt, x, y, z) {pt[0] = (x); pt[1] = (y); pt[2] = (z);} #define Cpoint(to, from) {to[0] = from[0]; to[1] = from[1]; to[2] = from[2];} #define Midpoint(p1, p2, dest) \ { \ dest[0] = (p1[0] + p2[0]) / 2.0; \ dest[1] = (p1[1] + p2[1]) / 2.0; \ dest[2] = (p1[2] + p2[2]) / 2.0; \ } #define NOT_FOUND -1 #define g_bCtrlPressed IsKeyPressed(VK_CONTROL) #define g_bShiftPressed IsKeyPressed(VK_SHIFT) #define g_bAltPressed IsKeyPressed(VK_MENU) #define CMD_LAYER _T("-LAYER") #define ANORM(expr) \ { \ int nRetCode=expr; \ assert(nRetCode==RTNORM); \ } #define BLOCK_SWAP _T("_$001$_") #define _REF_EDIT_PATCH //PickSet& DocGetPickFirst(); #define g_ssPickFirst DocGetPickFirst() #define INITGET_BEG(nFlag, szKeyTable) { XExport::InitGetBegin(nFlag, szKeyTable); #define INITGET_END() XExport::InitLocalMsg(FALSE); } #define AS_OPENPOLY(polyRail) \ {\ ASSERT(polyRail.IsClosed()); \ polyRail.SetFlag(0); \ polyRail.AppendNode(*polyRail.Head()); \ } #define Q_YES 1 #define Q_NO 0 #define LAYSTAT_ON 0x01 #define LAYSTAT_OFF 0x02 #define LAYSTAT_THAW 0x04 #define LAYSTAT_FREEZE 0x08 #define LAYSTAT_UNLOCK 0x10 #define LAYSTAT_LOCK 0x20 #define LAYSTAT_CURRENT 0x40 //插入图块的高级方法 #define IBF_ROT90 0x01 //转90度 #define IBF_MIRLR 0x02 //左右翻转 #define IBF_MIRUD 0x04 //上下翻转 #define IBF_FRAME 0x08 //改外框 #define IBF_ROTATE 0x10 //改转角 #define IBF_BASEPT 0x20 //改基点 #define IBF_RESEL 0x40 //重选择图块 #define IBF_MINSERT 0x80 //多重插入 #define IBF_SCALE 0x800 //改比例 #define IBF_TINSERT 0x100 //$图块 #define IBF_ALIGN 0x200 #define IBF_MULTVIEW 0x400 //多视图 #define acdbSetCurrentView acedSetCurrentView // For extended data tag_code base #define EX_INT 11000 #define EX_REAL 11100 #define EX_STRING 11200 #define EX_HANDLE 11300 #define EX_STRUCT 11400 #define EX_END 11500 #define EX_NEW 20000 #define EX_BIND 20000 // For extended data group code #define XD_SHORT 1070 #ifndef __XDATA_H #define XD_STR 1000 #define XD_REAL 1040 #define XD_LONG 1071 #define XD_POINT 1010 #define XD_HANDLE 1005 #endif // For PickSet flag #define SS_CREATE 0x01 #define SS_FREE 0x02 #define SS_MARK 0x04 //#define fabs __GEOM_FABS // offset side偏移 #define OFFSET_LEFT 0 #define OFFSET_RIGHT 1 // line style 线形 #define LS_FINITE 1 #define LS_INFINITE 0 // position realationship 位置关系 #define PR_OUTSIDE 0 #define PR_ONPT1 1 #define PR_ONCIRCLE 1 #define PR_ONPT2 2 #define PR_INSIDE 3 #define PR_EXTEND 4 #define PR_EDGE 5 #define PR_INTERS 6 #define LINE_SEGMENT (RTNORM + 1) #define ARC_SEGMENT (RTNORM + 2) #define FLAG_UNNORMAL 0x10 #define FLAG_TRIANGLE 0x20 //此时0、3两点相等 #define SIDE1_INVISIBLE 0x01 #define SIDE2_INVISIBLE 0x02 #define SIDE3_INVISIBLE 0x04 #ifndef W_CURVE_MESH_H #define W_CURVE_MESH_H #endif #define VISITED12 0x01 #define VISITED21 0x02 #define INVALID_EDGE 0x04 #define DUP_EDGE 0x08 #define CMP_SENSITIVE 0 #define CMP_INSENSITIVE 1 #define CMP_MATCH 2 #define FLAG_READ 0 #define FLAG_WRITE 1 #define FLAG_APPEND 2 #define FLAG_DELETE 3 #define FLAG_PACK 4 //词典操作宏,数据类型 #define TYPE_WDictItem -1 #define TYPE_WDict 0 #define TYPE_WBoolItem 1 #define TYPE_WCharItem 2 #define TYPE_WLongItem 3 #define TYPE_WDoubleItem 4 #define TYPE_WCStringItem 5 #define TYPE_WSelectItem 6 //打开dict #define OPEN_DICT(dict) \ {\ WDict*pCurSubDict=&dict;\ { //打开dict的下层词典 #define OPEN_DICT_EX(dict,KeyPath) \ {\ WDict *pCurSubDict=dict.FindOrAddDict(KeyPath);\ if(pCurSubDict!=NULL)\ { //关闭当前词典 #define CLOSE_DICT() \ }\ } //嵌套打开下层词典,如不存在则自动建立 #define OPEN_SUB_DICT(KeyPath) \ {\ WDict* pCurSubDict0 = pCurSubDict;\ pCurSubDict = pCurSubDict0->FindOrAddDict(KeyPath);\ if(pCurSubDict != NULL)\ {\ //关闭嵌套打开的下层词典 #define CLOSE_SUB_DICT() \ }\ pCurSubDict = pCurSubDict0;\ } //打开dict的子键(也可以是子字典) #define OPEN_KEY(dict,KeyPath) (dict.FindItem(KeyPath)) //打开当前打开字典的子键(也可以是子字典) #define OPEN_SUB_KEY(KeyPath) (pCurSubDict->FindItem(KeyPath)) //读入键数据,如果Key不存在,value不变 #define GET_VALUE(KeyPath,value) (pCurSubDict->GetValue(KeyPath,value)) //写入键数据,如果Key不存在,首先建立之 #define SET_VALUE(KeyPath,value) (pCurSubDict->SetValue(KeyPath,value)) //读入BOOL数据 #define GET_BOOL(KeyPath,value) \ {\ bool value0;\ if(pCurSubDict->GetValue(KeyPath,value0))\ value=value0;\ } //写入键数据,如果Key不存在,首先建立之 #define SET_BOOL(KeyPath,value) \ {\ bool value0 = value;\ pCurSubDict->SetValue(KeyPath,value0);\ } #define MID_PT 1 #define NOT_FOUND -1 #define PS_DOTE 0 #define PS_NONE 1 #define PS_CROSS 2 #define PS_CROSS_SLANT 3 #define PS_BOX 11 #define IMG_UNISCALE 0x01 #define IMG_DRAW3D 0x02 #define IMG_WCS2UCS 0x04 #define EDF_XSCALE 0x01 // for Text #define EDF_OBLIQUE 0x02 // for Text #define EDF_NO_AUTOPROP 0x04 // only for explode control #define HF_DELETEA 0 #define HF_DELETEB 1 #define HF_MARK_STOP 2 #define HF_DELETE 0 #define HF_MARK 1 #define HF_NONE 2 #define HF_STOP_DELETE 3 #define HF_STOP_NONE 4 #define HF_STOP_MARK 5 #define ads_abort(s) assert(0) #define RTSTRUCT 5011 typedef int (*AecObjectEditMethod)(AcDbObjectId idEnt); // RTNORM/RTERROR/RTNONE/RTCAN #if ARX < 17 #define _tstof(x) atof(x) #endif //TWallData.m_nWallFlag 使用位操作记录多个属性,只剩0x100可用了 #define WF_EXTERNAL 0x01 // 外墙 (否则为你内墙) #define WF_LEFTEXT 0x02 // 左侧为外 (外侧是否为左) #define WF_TOP 0x04 // 需要顶面-三维组合时 #define WF_BOTTOM 0x08 // 需要底面-三维组合时 // 0x08和0x10以前没有用过 #define WF_POLYSHAPE 0x10 // 多义线来确定屋顶形状 #define WF_LEFT_INSULATE 0x20 // 左侧保温 #define WF_RIGHT_INSULATE 0x40 // 右侧保温 #define WF_SECTTERM 0x80 // 剖切的端头形式 #define WF_START_TERM 0x2000 // 强制封起始端 #define WF_END_TERM 0x4000 //新保温参数 #define WF_INSULATE_CAP 0x1000 // 保温强制封口 #define WF_INSULATE_END 0x8000 // 墙端部有保温 // 6.5节能属性 #define WF_DISPART_OWNER 0x200 // 分户墙 #define WF_RIGHTEXT 0x400 // 右侧朝外 #define WF_SHOWEXT 0x800 // 用不同颜色标识外侧,与TDbCurtainWall有重合,但无影响 //zjq10.7.5修改为0x800否则与WF_INSULATE_END冲突 //AecDbWallPatch.m_nFlag 使用位操作记录多个属性 #define WF_PATCH_INSULATE 0x01 // 墙造型加保温 #ifndef MAX_STRING #define MAX_STRING 255 #endif #define VERSION_TDBINTERFACEMSGOBJ 1 #define MAX_BASE_CLASS_NUM 5//当前最大支持五个基类 #define DECLARE_RUN_TIME_CLASS(curClass)\ public:\ virtual const WClassInfo* GetCI()const;\ static WClassInfo classInfo;//end #define DECLARE_DYCREATE_CLASS(curClass)\ DECLARE_RUN_TIME_CLASS(curClass)\ public:\ static WDyCreateClass* NewObject();//end #define IMPLEMENT_COMMON_RUN_TIME(childClass)\ const WClassInfo*childClass::GetCI()const\ {return &childClass::classInfo;}\ #define IMPLEMENT_RUN_TIME_CLASS5(childClass,nameString,baseClass0,baseClass1,baseClass2,baseClass3,baseClass4)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,NULL\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo)\ ,&(baseClass2::classInfo)\ ,&(baseClass3::classInfo)\ ,&(baseClass4::classInfo));//end #define IMPLEMENT_RUN_TIME_CLASS4(childClass,nameString,baseClass0,baseClass1,baseClass2,baseClass3)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,NULL\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo)\ ,&(baseClass2::classInfo)\ ,&(baseClass3::classInfo));//end #define IMPLEMENT_RUN_TIME_CLASS3(childClass,nameString,baseClass0,baseClass1,baseClass2)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,NULL\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo)\ ,&(baseClass2::classInfo));//end #define IMPLEMENT_RUN_TIME_CLASS2(childClass,nameString,baseClass0,baseClass1)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,NULL\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo));//end #define IMPLEMENT_RUN_TIME_CLASS1(childClass,nameString,baseClass0)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,NULL\ ,&(baseClass0::classInfo));//end #define IMPLEMENT_RUN_TIME_CLASS0(childClass,nameString)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,NULL);//end #define IMPLEMENT_DYCREATE_CLASS5(childClass,nameString,baseClass0,baseClass1,baseClass2,baseClass3,baseClass4)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,childClass::NewObject\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo)\ ,&(baseClass2::classInfo)\ ,&(baseClass3::classInfo)\ ,&(baseClass4::classInfo));\ WDyCreateClass*childClass::NewObject()\ {childClass *pObject = new childClass;return pObject->InitObject();}//end #define IMPLEMENT_DYCREATE_CLASS4(childClass,nameString,baseClass0,baseClass1,baseClass2,baseClass3)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,childClass::NewObject\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo)\ ,&(baseClass2::classInfo)\ ,&(baseClass3::classInfo));\ WDyCreateClass*childClass::NewObject()\ {childClass *pObject = new childClass;return pObject->InitObject();}//end #define IMPLEMENT_DYCREATE_CLASS3(childClass,nameString,baseClass0,baseClass1,baseClass2)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,childClass::NewObject\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo)\ ,&(baseClass2::classInfo));\ WDyCreateClass*childClass::NewObject()\ {childClass *pObject = new childClass;return pObject->InitObject();}//end #define IMPLEMENT_DYCREATE_CLASS2(childClass,nameString,baseClass0,baseClass1)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,childClass::NewObject\ ,&(baseClass0::classInfo)\ ,&(baseClass1::classInfo));\ WDyCreateClass*childClass::NewObject()\ {childClass *pObject = new childClass;return pObject->InitObject();}//end #define IMPLEMENT_DYCREATE_CLASS1(childClass,nameString,baseClass0)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,childClass::NewObject\ ,&(baseClass0::classInfo));\ WDyCreateClass*childClass::NewObject()\ {childClass *pObject = new childClass;return pObject->InitObject();}//end #define IMPLEMENT_DYCREATE_CLASS0(childClass,nameString)\ IMPLEMENT_COMMON_RUN_TIME(childClass)\ WClassInfo childClass::classInfo(nameString,childClass::NewObject);\ WDyCreateClass*childClass::NewObject()\ {childClass *pObject = new childClass;return pObject->InitObject();}//end //根据pObject的真实类型创建一个的动态对象,参数:WDyCreateClass*pObject #define NEW_OBJECT(pObject) ((pObject)->GetCI()->NewObject()) //得到一个WRunTimeClass派生类的ID,没有注册时返回-1 #define CLASS_ID(someClass) (someClass::classInfo.GetClassID()) //得到一个WRunTimeClass派生类的注册名称 #define CLASS_NAME(pObj) (pObj->GetCI()->GetClassName()) //测试pObj对象是否是someClass类,或是其派生类 #define IS_CLASS(pObj,someClass) ((pObj)->IsClassOf(&someClass::classInfo)) //测试pObj对象是否是someClass类(不是派生类) #define IS_TYPE(pObj,someClass) ((pObj)->GetCI() == &someClass::classInfo) //登记运行时类信息 #define REGISTER_CID(someClass,cid) someClass::classInfo.SetClassID(cid) //登记运行时类信息(包含构造信息) #define REGISTER_CLASS(someClass,cid) WClassInfo::RegisterClassInfo(cid,&someClass::classInfo) //由ID动态构造对象 #define DY_CREATE(cid) WClassInfo::DyCreate(cid) //动态内存搜集器 #define WGobalBuf WAutoDelBuf //位标志类 #define LOCKED 0x000000001 #define VISITED 0x000000002 // 角度使用5度 #define MIN_PL_ANGEL (PI/36.0) #define MIN_PL_DISTANCE 5 #define OPENOBJ_BEGIN(Ent, OpenMode, ClassName, VariableName) {\ XDbObject tObj##VariableName(Ent, OpenMode); \ ClassName *VariableName=!tObj##VariableName? NULL: ClassName::cast(tObj##VariableName.m_pObject); #define OPENOBJ_END() } #define ExchangePropValue(name ) \ { \ if ( bRet ) \ { \ if ( m_bStoring ) \ { \ bRet = SetValue( #name , name ) \ } \ else \ { \ bRet = GetValue( #name , name ); \ } \ ASSERT( bRet ); \ } \ } #define AttachValues( hKey , name ) AttachValue( hKey , &(name) , #name ) ; #define PRIV_STR(s) s #define XDT_MATERIAL 29000 #define append_rblists(xdata, tag_xdata) AT_link_list(*xdata, tag_xdata) #define TOL 0.0001 //计算允差 #define fTOL 1.e-8 //数学运算误差 #ifndef PI #define PI 3.1415926535897932384626433832795 #endif #define DPI 0.017453292519943295 #define PIDD 57.295779513082323 #define PI2 6.2831853071796 //浮点数比较 #define UP_ZERO(a) ((a) > XGeLib::g_fZero) #define UPEQUAL_ZERO(a) ((a) >= -XGeLib::g_fZero) #define DOWN_ZERO(a) ((a) < -XGeLib::g_fZero) #define DOWNEQUAL_ZERO(a) ((a) <= XGeLib::g_fZero) #define EQUAL_ZERO(a) ((a) >= -XGeLib::g_fZero && (a) <= XGeLib::g_fZero) #define EQUAL(a,b) EQUAL_ZERO(a-b) //弧度相关比较 #define UP_ZEROA(a) ((a) > XGeLib::g_angleZero) #define UPEQUAL_ZEROA(a) ((a) >= XGeLib::g_angleZero) #define DOWN_ZEROA(a) ((a) < -XGeLib::g_angleZero) #define DOWNEQUAL_ZEROA(a) ((a) <= XGeLib::g_angleZero) #define EQUAL_ZEROA(a) ((a) >= -XGeLib::g_angleZero&&(a) <= XGeLib::g_angleZero) #define EQUALA(a,b) EQUAL_ZEROD(a - b) //距离相关比较 #define UP_ZEROD(a) ((a) > g_distZero) #define UPEQUAL_ZEROD(a) ((a) >= -g_distZero) #define DOWN_ZEROD(a) ((a) < -g_distZero) #define DOWNEQUAL_ZEROD(a) ((a) <= g_distZero) #define EQUAL_ZEROD(a) ((a) >= -g_distZero&&(a) <= g_distZero) #define EQUALD(a,b) EQUAL_ZERO(a - b) //浮点数比较 #define UP_ZEROEX(a,prec) ((a) > prec) #define UPEQUAL_ZEROEX(a,prec) ((a) >= -prec) #define DOWN_ZEROEX(a,prec) ((a) < -prec) #define DOWNEQUAL_ZEROEX(a,prec) ((a) <= prec) #define EQUAL_ZEROEX(a,prec) ((a) >= -prec&&(a) <= prec) #define EQUALEX(a,b,prec) EQUAL_ZEROEX(a - b,prec) #define A_IN 0x0004 //A GO IN B #define A_OUT 0x0008 //A GO OUT B #define B_IN 0x0010 //B GO IN A #define B_OUT 0x0020 //B GO OUT A #define A_VISITED 0x0040 #define B_VISITED 0x0080 #define CID_2DFIRST 1 #define CID_GPoint2D 1 #define CID_GLine2D 2 #define CID_GLineRay2D 3 #define CID_GLineSeg2D 4 #define CID_GCircle2D 5 #define CID_GArc2D 6 #define CID_GMLine2D 11 #define CID_GPLine2D 12 #define CID_GMCurve2D 13 #define CID_GPolygon2D 5000 #define CID_GPolygonEx2D 5001 #define CID_GRegionEx2D 5002 #define CID_2DLAST 10000 #define CID_3DFIRST 10001 #define CID_GPoint3D 10001 #define CID_GLine3D 10002 #define CID_GLineRay3D 10003 #define CID_GLineSeg3D 10004 #define CID_GPlane3D 10005 #define CID_GPCurve3D 10006 #define CID_GMLine3D 10011 #define CID_GMCurve3D 10013 #define CLOSED_CURVE 0x00000004 //封闭曲线 #define CLOCKWISE_CURVE 0x00000008 //顺时针方向封闭曲线 #define NO_BOUNDARY_INTER 0x0004 //不允许边界线有临界交 #define WPF_INSULATE 0x01 //保温... #define MULTI_LINE 0x0001 #define ACAD_ENTITY 0x0002 //非$对象 #define ENT_CLIPPED 0x01 #define ENT_CLIPP 0x02 #define BIF_RECTMASK 0x01 //矩形屏蔽 #define BIF_POLYMASK 0x02 //区域屏蔽 #define BIF_MULTIVIEW 0x04 //多视图 #define BIF_T6BETA1 0x08 //T6Beta1临时标记,需要升级后才可以正常显示 #define CF_FORTIFY 0x01 //构造柱 #define CF_TOP 0x02 //有底面 #define CF_BOTTOM 0x04 //有顶面 #define CF_LABEL 0x08 //启用编号 // #define CF_SHORT 0x10 //矮柱 // #define CF_INSULATE 0x20 //保温... #define BIF_ANNOTATE 0x10 //注释图块... #define COLU_QUANTUM_1 _T("体积") #define COLU_QUANTUM_2 _T("高度") #define COLU_QUANTUM_3 _T("截面积") #define DICT_ENTRY_NAME _T("AEC_PROTEC_ENTITY") #define PROTECT_PRINT 0x0001 //不能打印 #define WALL_QUANTUM_1 _T("左壁面积(扣洞口)") #define WALL_QUANTUM_2 _T("左壁面积(不扣洞口)") #define WALL_QUANTUM_3 _T("右壁面积(扣洞口)") #define WALL_QUANTUM_4 _T("右壁面积(不扣洞口)") #define WALL_QUANTUM_5 _T("墙洞壁面积") #define WALL_QUANTUM_6 _T("墙体体积") #define WALL_QUANTUM_7 _T("洞口体积") #define WALL_QUANTUM_8 _T("墙体厚度") //节能特性 #define EN_WALL_TRANSPARENT 0x0001 //透明幕墙 typedef DWORD PRPHANDLE; #define DECLARE_TENTBASE() \ private: \ void *operator new[](size_t nSize) { return 0;} \ void operator delete[](void *p) {}; \ void *operator new[](size_t nSize, const TCHAR *file, int line) { return 0;} \ protected: \ static AecObjectEditMethod g_pEditFun; \ virtual AecObjectEditMethod GetEditMethod() const; \ public: \ static AecObjectEditMethod SetEditMethod(AecObjectEditMethod pNewMethod); \ static void InitMatchProtocol(BOOL bTrue); //提供对格式刷的支持 #define IMPLEMENT_TENTBASE(ClassName) \ AecObjectEditMethod ClassName::g_pEditFun=NULL; \ AecObjectEditMethod ClassName::GetEditMethod() const \ { return g_pEditFun; } \ AecObjectEditMethod ClassName::SetEditMethod(AecObjectEditMethod pNewMethod) \ { AecObjectEditMethod pOld=g_pEditFun; g_pEditFun=pNewMethod; return pOld; } \ void ClassName::InitMatchProtocol(BOOL bTrue) { \ static XArchMatchProp *pMatchProp=NULL; \ if(bTrue)\ {\ ASSERT(pMatchProp == NULL); \ pMatchProp = new XArchMatchProp; \ desc()->addX(AcDbMatchProperties::desc(), pMatchProp); \ }\ else\ {\ desc()->delX(XArchMatchProp::desc());\ delete pMatchProp;\ pMatchProp = NULL;\ }\ } //暂时去掉saveas //virtual void saveAs(AcGiWorldDraw *pWd,AcDb::SaveType saveType){WorldDraw(pWd);} #if ARX<18 #define AEC_DECLARE_MEMBERS() \ public: \ virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *pWd) { return WorldDraw(pWd); } \ virtual void subViewportDraw(AcGiViewportDraw* pMode){ ViewportDraw(pMode); } \ virtual void saveAs(AcGiWorldDraw *pWd,AcDb::SaveType saveType){/*WorldDraw(pWd);*/} \ virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const { \ return Explode(entitySet); \ } \ Acad::ErrorStatus subGetGeomExtents(AcDbExtents& extents) const; \ virtual void subList() const; \ Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds) const; \ Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds, \ const AcGeMatrix3d& insersionMat) const; \ Acad::ErrorStatus subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const; \ Acad::ErrorStatus subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ const AcGePlane& projPlane, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const; \ Acad::ErrorStatus setPropertiesFrom( const AcDbEntity* pEntity, Adesk::Boolean doSubents = Adesk::kTrue); \ virtual AcDbObjectId GetOwnerId() const { return ownerId(); } \ AcDbObjectId AddToMSpace(Adesk::Boolean bClosed); \ AcDbObjectId AddToCSpace(Adesk::Boolean bClosed); \ AcDbObjectId AddToPSpace(Adesk::Boolean bClosed); \ virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); \ virtual Acad::ErrorStatus subGetTransformedCopy(const AcGeMatrix3d& xform,AcDbEntity*& ent) const; \ virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*); \ virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; \ virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*); \ virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; \ protected: \ virtual AcDbEntity * GetMe() { return this; } \ virtual const AcDbEntity * GetMe() const { return this; } \ private: \ void *operator new[](size_t nSize) { return 0;} \ void operator delete[](void *p) {}; \ void *operator new[](size_t nSize, const TCHAR *file, int line) { return 0;} \ public: #else #define AEC_DECLARE_MEMBERS() \ public: \ virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw *pWd) { return WorldDraw(pWd); } \ virtual void subViewportDraw(AcGiViewportDraw* pMode){ ViewportDraw(pMode); }\ virtual void saveAs(AcGiWorldDraw *pWd,AcDb::SaveType saveType){/*WorldDraw(pWd);*/} \ virtual Acad::ErrorStatus subExplode(AcDbVoidPtrArray& entitySet) const { \ return Explode(entitySet); \ } \ Acad::ErrorStatus subGetGeomExtents(AcDbExtents& extents) const; \ virtual void subList() const; \ Acad::ErrorStatus subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const; \ Acad::ErrorStatus subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ const AcGePlane& projPlane, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const; \ Acad::ErrorStatus setPropertiesFrom( const AcDbEntity* pEntity, Adesk::Boolean doSubents = Adesk::kTrue); \ virtual AcDbObjectId GetOwnerId() const { return ownerId(); } \ AcDbObjectId AddToMSpace(Adesk::Boolean bClosed); \ AcDbObjectId AddToCSpace(Adesk::Boolean bClosed); \ AcDbObjectId AddToPSpace(Adesk::Boolean bClosed); \ Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds) const; \ Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds, \ const AcGeMatrix3d& insersionMat) const; \ virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform); \ virtual Acad::ErrorStatus subGetTransformedCopy(const AcGeMatrix3d& xform,AcDbEntity*& ent) const; \ virtual Acad::ErrorStatus dwgInFields (AcDbDwgFiler*); \ virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler*) const; \ virtual Acad::ErrorStatus dxfInFields (AcDbDxfFiler*); \ virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler*) const; \ protected: \ virtual AcDbEntity * GetMe() { return this; } \ virtual const AcDbEntity * GetMe() const { return this; } \ private: \ void *operator new[](size_t nSize) { return 0;} \ void operator delete[](void *p) {}; \ void *operator new[](size_t nSize, const TCHAR *file, int line) { return 0;} \ public: #endif //ARX < 18 #if ARX<18 #define AEC_IMPLEMENT_MEMBERS(className, parentClass) \ Acad::ErrorStatus className::setPropertiesFrom(const AcDbEntity* pEntity, Adesk::Boolean doSubents) \ { \ assertWriteEnabled(); \ Acad::ErrorStatus es=parentClass::setPropertiesFrom(pEntity, doSubents); \ CopyPropertiesFrom((AcDbEntity *)pEntity, 0); \ return es; \ }\ AcDbObjectId className::AddToMSpace(Adesk::Boolean bClosed) \ { \ const TCHAR *pszLayer=GetDefaultLayer(); \ if(pszLayer) { \ InitLayer(pszLayer, TRUE); \ setLayer(pszLayer); \ } \ return AddToModelSpace(this, bClosed, Adesk::kTrue); \ } \ AcDbObjectId className::AddToPSpace(Adesk::Boolean bClosed) \ { \ const TCHAR *pszLayer=GetDefaultLayer(); \ if(pszLayer) { \ InitLayer(pszLayer, TRUE); \ setLayer(pszLayer); \ } \ return AddToPaperSpace(this, bClosed, Adesk::kTrue); \ } \ AcDbObjectId className::AddToCSpace(Adesk::Boolean bClosed) \ { \ const TCHAR *pszLayer=GetDefaultLayer(); \ if(pszLayer) { \ InitLayer(pszLayer, TRUE); \ setLayer(pszLayer); \ } \ return AddToCurrentSpace(this, bClosed, Adesk::kTrue); \ } \ void className::subList() const \ { \ assertReadEnabled(); \ AEntityBase::ListInfo(); \ } \ Acad::ErrorStatus className::subGetGeomExtents(AcDbExtents& extents) const \ { \ XPoint ptLow, ptUp; \ Acad::ErrorStatus es=GetExtents(ptLow, ptUp); \ if(es==Acad::eOk) \ extents.set(ptLow, ptUp); \ return es; \ } \ Acad::ErrorStatus className::subGetOsnapPoints( \ AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds) const \ { \ assertReadEnabled(); \ return GetOsnapPoints(osnapMode, gsSelectionMark, ptPick, lastPoint, viewXform, \ snapPoints, geomIds); \ } \ Acad::ErrorStatus className::subGetOsnapPoints( \ AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds, \ const AcGeMatrix3d& insertionMat) const \ { \ assertReadEnabled(); \ return GetOsnapPoints(osnapMode, gsSelectionMark, ptPick, lastPoint, viewXform, \ snapPoints, geomIds ,insertionMat); \ } \ Acad::ErrorStatus className::subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const \ { \ assertReadEnabled(); \ return IntersectWith(ent, intType, points, thisGsMarker, otherGsMarker); \ } \ Acad::ErrorStatus className::subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ const AcGePlane& projPlane, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const \ { \ assertReadEnabled(); \ return IntersectWith(ent, intType, projPlane, points, thisGsMarker, otherGsMarker); \ } \ Acad::ErrorStatus className::subTransformBy(const AcGeMatrix3d& xform) \ { \ assertWriteEnabled(); \ if(g_bLayoutRotate) { \ AcGeVector3d vt(cos(m_nLayoutRotation), sin(m_nLayoutRotation), 0.0); \ vt.transformBy(xform); \ m_nLayoutRotation = ads_angle(XPoint(), XPoint(vt[0], vt[1])); \ } \ return Acad::eOk; \ } \ Acad::ErrorStatus className::subGetTransformedCopy(const AcGeMatrix3d& xform, \ AcDbEntity*& pEnt) const \ { \ assertReadEnabled(); \ AcDbEntity *pCloned=(AcDbEntity *)clone(); \ Acad::ErrorStatus es=pCloned->transformBy(xform); \ if(es==Acad::eOk) \ pEnt=pCloned; \ else \ delete pCloned; \ return es; \ } \ Acad::ErrorStatus className::dwgInFields(AcDbDwgFiler* pFiler) \ { \ assertWriteEnabled(); \ Acad::ErrorStatus es = parentClass::dwgInFields(pFiler); \ if(es != Acad::eOk) return es; \ return AEntityBase::DwgInFields(pFiler); \ } \ Acad::ErrorStatus className::dwgOutFields(AcDbDwgFiler* pFiler) const \ { \ assertReadEnabled(); \ VERIFY(parentClass::dwgOutFields(pFiler)==Acad::eOk); \ return AEntityBase::DwgOutFields(pFiler); \ } \ Acad::ErrorStatus className::dxfInFields (AcDbDxfFiler* pFiler) \ { \ assertWriteEnabled(); \ if(!g_bSubEntity/*add by w on 050706*/) \ { \ Acad::ErrorStatus es = parentClass::dxfInFields(pFiler);\ if(es!=Acad::eOk) return es; \ } \ if(!pFiler->atSubclassData(_T(#className))) \ return Acad::eBadDxfSequence; \ return AEntityBase::DxfInFields(pFiler); \ } \ Acad::ErrorStatus className::dxfOutFields(AcDbDxfFiler* pFiler) const\ { \ assertReadEnabled();\ if(objectId()!=AcDbObjectId::kNull/*add by w on 050706*/) \ VERIFY(parentClass::dxfOutFields(pFiler)==Acad::eOk); \ VERIFY(pFiler->writeItem(AcDb::kDxfSubclass, _T(#className))==Acad::eOk); \ return AEntityBase::DxfOutFields(pFiler); \ } #else #define AEC_IMPLEMENT_MEMBERS(className, parentClass) \ Acad::ErrorStatus className::setPropertiesFrom(const AcDbEntity* pEntity, Adesk::Boolean doSubents) \ { \ assertWriteEnabled(); \ Acad::ErrorStatus es=parentClass::setPropertiesFrom(pEntity, doSubents); \ CopyPropertiesFrom((AcDbEntity *)pEntity, 0); \ return es; \ }\ AcDbObjectId className::AddToMSpace(Adesk::Boolean bClosed) \ { \ const TCHAR *pszLayer=GetDefaultLayer(); \ if(pszLayer) { \ InitLayer(pszLayer, TRUE); \ setLayer(pszLayer); \ } \ return AddToModelSpace(this, bClosed, Adesk::kTrue); \ } \ AcDbObjectId className::AddToPSpace(Adesk::Boolean bClosed) \ { \ const TCHAR *pszLayer=GetDefaultLayer(); \ if(pszLayer) { \ InitLayer(pszLayer, TRUE); \ setLayer(pszLayer); \ } \ return AddToPaperSpace(this, bClosed, Adesk::kTrue); \ } \ AcDbObjectId className::AddToCSpace(Adesk::Boolean bClosed) \ { \ const TCHAR *pszLayer=GetDefaultLayer(); \ if(pszLayer) { \ InitLayer(pszLayer, TRUE); \ setLayer(pszLayer); \ } \ return AddToCurrentSpace(this, bClosed, Adesk::kTrue); \ } \ void className::subList() const \ { \ assertReadEnabled(); \ AEntityBase::ListInfo(); \ } \ Acad::ErrorStatus className::subGetGeomExtents(AcDbExtents& extents) const \ { \ XPoint ptLow, ptUp; \ Acad::ErrorStatus es=GetExtents(ptLow, ptUp); \ if(es==Acad::eOk) \ extents.set(ptLow, ptUp); \ return es; \ } \ Acad::ErrorStatus className::subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const \ { \ assertReadEnabled(); \ return IntersectWith(ent, intType, points, thisGsMarker, otherGsMarker); \ } \ Acad::ErrorStatus className::subIntersectWith(const AcDbEntity* ent, \ AcDb::Intersect intType, \ const AcGePlane& projPlane, \ AcGePoint3dArray& points, \ INT_PTR thisGsMarker, \ INT_PTR otherGsMarker) const \ { \ assertReadEnabled(); \ return IntersectWith(ent, intType, projPlane, points, thisGsMarker, otherGsMarker); \ } \ Acad::ErrorStatus className::subGetTransformedCopy(const AcGeMatrix3d& xform, \ AcDbEntity*& pEnt) const \ { \ assertReadEnabled(); \ AcDbEntity *pCloned=(AcDbEntity *)clone(); \ Acad::ErrorStatus es=pCloned->transformBy(xform); \ if(es==Acad::eOk) \ pEnt=pCloned; \ else \ delete pCloned; \ return es; \ } \ Acad::ErrorStatus className::dwgInFields(AcDbDwgFiler* pFiler) \ { \ assertWriteEnabled(); \ Acad::ErrorStatus es = parentClass::dwgInFields(pFiler); \ if(es != Acad::eOk) return es; \ return AEntityBase::DwgInFields(pFiler); \ } \ Acad::ErrorStatus className::dwgOutFields(AcDbDwgFiler* pFiler) const \ { \ assertReadEnabled(); \ VERIFY(parentClass::dwgOutFields(pFiler)==Acad::eOk); \ return AEntityBase::DwgOutFields(pFiler); \ } \ Acad::ErrorStatus className::dxfInFields (AcDbDxfFiler* pFiler) \ { \ assertWriteEnabled(); \ if(!g_bSubEntity/*add by w on 050706*/) \ { \ Acad::ErrorStatus es = parentClass::dxfInFields(pFiler);\ if(es!=Acad::eOk) return es; \ } \ if(!pFiler->atSubclassData(_T(#className))) \ return Acad::eBadDxfSequence; \ return AEntityBase::DxfInFields(pFiler); \ } \ Acad::ErrorStatus className::subTransformBy(const AcGeMatrix3d& xform) \ { \ assertWriteEnabled(); \ if(g_bLayoutRotate) { \ AcGeVector3d vt(cos(m_nLayoutRotation), sin(m_nLayoutRotation), 0.0); \ vt.transformBy(xform); \ m_nLayoutRotation = ads_angle(XPoint(), XPoint(vt[0], vt[1])); \ } \ return Acad::eOk; \ } \ Acad::ErrorStatus className::subGetOsnapPoints( \ AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds) const \ { \ assertReadEnabled(); \ return GetOsnapPoints(osnapMode, gsSelectionMark, ptPick, lastPoint, viewXform, \ snapPoints, geomIds); \ } \ Acad::ErrorStatus className::subGetOsnapPoints( \ AcDb::OsnapMode osnapMode, \ INT_PTR gsSelectionMark, \ const AcGePoint3d& ptPick, \ const AcGePoint3d& lastPoint, \ const AcGeMatrix3d& viewXform, \ AcGePoint3dArray& snapPoints, \ AcDbIntArray& geomIds, \ const AcGeMatrix3d& insertionMat) const \ { \ assertReadEnabled(); \ return GetOsnapPoints(osnapMode, gsSelectionMark, ptPick, lastPoint, viewXform, \ snapPoints, geomIds ,insertionMat); \ } \ Acad::ErrorStatus className::dxfOutFields(AcDbDxfFiler* pFiler) const \ { \ assertReadEnabled();\ if(objectId()!=AcDbObjectId::kNull/*add by w on 050706*/) \ VERIFY(parentClass::dxfOutFields(pFiler)==Acad::eOk); \ VERIFY(pFiler->writeItem(AcDb::kDxfSubclass, _T(#className))==Acad::eOk); \ return AEntityBase::DxfOutFields(pFiler); \ } #endif //ADS<18 #endif