1210 lines
37 KiB
C++
1210 lines
37 KiB
C++
//-----------------------------------------------------------------------------+
|
|
// 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
|