Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/global.cpp
T

1460 lines
46 KiB
C++
Raw Normal View History

2026-09-28 15:28:50 +08:00
#include "stdafx.h"
#include "rxregsvc.h"
#include "axlock.h"
#include "resource.h"
#include "TWDict.h"
#include "TWDictItem.h"
#include "TDonotMonitorMe.h"
//extern GEOAPI BOOL g_bExplodeMesh;
//extern TARCH_IMPEXP void UpdateGraphic(const DList<AcDbObjectId> &ss);
//extern TARCH_IMPEXP void DocStatus();
/////////////////////////////////////////////////////////////////////
// 驻留在系统注册表的全局设定
//TARCH_IMPEXP BOOL g_bExplodeMesh=TRUE;
TARCH_IMPEXP BOOL g_bDynDim=TRUE;//是否启用尺寸联动
TARCH_IMPEXP BOOL g_bABCoord=FALSE; //AB标注还是XY标注
TARCH_IMPEXP double g_nWalkDistStep=1000.0;
TARCH_IMPEXP double g_nWalkAngleStep=5.0*PI/180;
TARCH_IMPEXP BOOL g_bZoomKey=FALSE; // TAB/~缩放热键
TARCH_IMPEXP BOOL g_bDwgTabBar=TRUE; //DWG文档切换标签
TARCH_IMPEXP BOOL g_bHideCaption=FALSE;//隐藏标题栏
TARCH_IMPEXP BOOL g_bDragRubber=TRUE; //橡皮筋拖动(自由复制)
//模数控制
BOOL g_bModelNumber=FALSE;
double g_nWinStep=10.0;
double g_nWallStep=300.0;
int g_nDimAdjust=1; // 尺寸自调:0--不调, 1--上调, 2--下调
//BOOL g_bSaveProxyGraph=FALSE; //默认不存储Proxy的图像
ads_real g_nDistPrec=20.0; //墙体衔接控制精度
TARCH_IMPEXP int g_nDimNumGripTip=20; //尺寸区间个数超过后,不解释夹点
TARCH_IMPEXP BOOL g_nLineDimArrow=0; // 0--粗线;1--细线; 2--圆点
TARCH_IMPEXP BOOL g_nAngleDimArrow=0; // 0--标准箭头; 1--圆点
// sg add 120412,根据9.0需求,增加设置弧长标注样式的设置
TARCH_IMPEXP int g_nArcLenDimType=0;//wlw 130617默认指向圆心
//TARCH_IMPEXP double g_nCurtainWall3Scale=100.0;//幕墙34线控制比例
// sg modify 090609,将默认值改为150
TARCH_IMPEXP double g_nCurtainWall3Scale=150.0;//幕墙34线控制比例
TARCH_IMPEXP int g_nWallBaseColor=46;//墙基线颜色
TARCH_IMPEXP int g_nCutLineColor=149;//切割线颜色
TARCH_IMPEXP int g_nHideAxisLabelColor=108;//隐藏轴号颜色
TARCH_IMPEXP int g_nWallExtSideColor=5;//墙外侧颜色,暂时用TLEA表示幕墙
TARCH_IMPEXP BOOL g_bAutoLTScale=TRUE; //是否自动设置线型比例
TARCH_IMPEXP double g_nLtPScale=10.0; //图纸空间自动线型
TARCH_IMPEXP double g_nLtMScale=1000.0;//模型空间自动线型
TARCH_IMPEXP int g_nMaxGripHint=20; //当选中的物体超过这个数时,不解释夹点
// TArch8.0,sg add 090512/090609/090612
TARCH_IMPEXP double g_dElevTextBaseLen = 16.0; // 空白标高符号默认文字基线长度
TARCH_IMPEXP double g_dDrawIndexTextRatio = 0.6; // 圆圈文字字高系数
TARCH_IMPEXP double g_dAxisLabelTextRatio = 0.7; // 轴号字高系数
TARCH_IMPEXP double g_dAxisLabelDia = 8.0; // 轴圈直径
TARCH_IMPEXP double g_dRuptureLenLimit = 1000.0; // 折断线连接区间长度界限值
TARCH_IMPEXP double g_dMoreRuptureLimit = 6.0; // 大于界限值时,出头距离
TARCH_IMPEXP double g_dLessRuptureLimit = 3.0; // 小于界限值时,出头距离
TARCH_IMPEXP BOOL g_bCurtainWallFixStyle = FALSE; // 带形窗幕墙样式,比例改变后不改样式
TARCH_IMPEXP int g_nCurtainWallStyle = 0; // 带形窗幕墙样式,不改样式时的设定类型
TARCH_IMPEXP BOOL g_bDrawIndexOldStyle = FALSE; // 圆圈文字不使用旧样式
// TArch8.5,sg add 100125
TARCH_IMPEXP BOOL g_bShowFloorRect = TRUE; // 是否显示楼层框对象
// sg add 100601
TARCH_IMPEXP BOOL g_bIgnoreAttach = TRUE; // 一轴多号时,是否忽略附加轴号
TARCH_IMPEXP int g_nAfterYAxisStyle = 0; // 字母Y后面采用的注脚形式
// sg add 100714
// sg modify 110510,根据需求,修改默认值,保持和8.2一致
//TARCH_IMPEXP BOOL g_bWallHasInsulateCap = TRUE; // 墙体保温是否封口
TARCH_IMPEXP BOOL g_bWallHasInsulateCap = FALSE; // 墙体保温是否封口
// sg delete 101209,根据讨论,暂时去掉高级选项中的该设置
// sg add 101105
// TARCH_IMPEXP BOOL g_bUniformSpaceDim = TRUE; // 房间面积标注方式是否统一控制
// sg add 101209
TARCH_IMPEXP double g_dIndexPointerBaseLen = 5.0; // 索引符号延长线的默认长度
TARCH_IMPEXP double g_dSectionBaseLen = 5.0; // 剖切索引剖切线的默认长度
// sg add 110124
TARCH_IMPEXP BOOL g_bDIOutCircleStyle = FALSE; // 圆圈文字支持出圈样式
TARCH_IMPEXP BOOL g_bElevFloorsOnRight = TRUE; // 多层标高符号中的楼层是否在标高值右侧,默认在右侧
TARCH_IMPEXP BOOL g_bBlaconyHalf=TRUE; // add by xlc on 090625 阳台按一半面积计算
// TArch9.0
TARCH_IMPEXP int g_bNorthThumbTextDir = 1; // sg add 111221,增加指北针文字方向的的全局变量
TARCH_IMPEXP BOOL g_bDownloadT3Split=TRUE; // sg add 120516,文字导出T3版本时候,是否断开
//TArch6.5
TARCH_IMPEXP int g_nCoordPrec=3; //坐标标注精度
TARCH_IMPEXP int g_nCoordArrowStyle=0;
TARCH_IMPEXP int g_nSymbArrowStyle=0;
TARCH_IMPEXP double g_fWinLabelDefaultHeight=3.5;//门窗编号默认字高,add by whl
TARCH_IMPEXP BOOL g_bDblClkEditObj=TRUE;//双击对象编辑控制,add by whl
TARCH_IMPEXP BOOL g_bDblCancelSelect=TRUE;//双击空白取消选择,add by whl
TARCH_IMPEXP int g_nSpeedMenu=1; //快捷菜单: 0--取消; 1--右键; 2--Ctrl+右键,3--慢击右键
TARCH_IMPEXP int g_nRBtnMenuTime=150;//空白右銉慢击时间阀,g_nSpeedMenu==3时有效
TARCH_IMPEXP int g_nMaxAutoScale=200;
TARCH_IMPEXP BOOL g_bIgnoreStairRail=TRUE;//在建筑立剖面、单层立剖面命令中,双跑和多跑楼梯的扶手和栏杆可以选择忽略
TARCH_IMPEXP double g_nText2Base=1.0;//文字距离基线的距离,TArch8 Obsolete
TARCH_IMPEXP double g_nText2BaseRatio=0.3;//文字距离基线系数(与字高有关).TArch8 Add
//默认尺寸样式
//粗斜线
TARCH_IMPEXP CString g_sDim0=_T("_TCH_ARCH");
TARCH_IMPEXP CString g_sDim0M_M=_T("_TCH_ARCH_M_M");
TARCH_IMPEXP CString g_sDim0mm_M=_T("_TCH_ARCH_mm_M");
//细斜线
TARCH_IMPEXP CString g_sDim1=_T("_TCH_ARCH1");
TARCH_IMPEXP CString g_sDim1M_M=_T("_TCH_ARCH1_M_M");
TARCH_IMPEXP CString g_sDim1mm_M=_T("_TCH_ARCH1_mm_M");
//圆点
TARCH_IMPEXP CString g_sDim2=_T("_TCH_DOTE");
TARCH_IMPEXP CString g_sDim2M_M=_T("_TCH_DOTE_M_M");
TARCH_IMPEXP CString g_sDim2mm_M=_T("_TCH_DOTE_mm_M");
//角度箭头
TARCH_IMPEXP CString g_sDimA0=_T("_TCH_ARROW");
//角度圆点
TARCH_IMPEXP CString g_sDimA1=_T("_TCH_DOTE");
TARCH_IMPEXP double g_dBaseDist=1000;//轴线伸出长度
TARCH_IMPEXP double g_fRuptureExDist=3.0;//折断线出头(图纸单位),需加入Config.ini!
TARCH_IMPEXP double g_nInsulateThick=80;//默认保温层厚度
TARCH_IMPEXP CString g_sWinLabelPostFix=_T("反");//门窗后缀命令默认加的后缀
//屏幕菜单
TARCH_IMPEXP BOOL g_bRightScreenMenu = TRUE; // add by gjm 屏幕是否靠右
TARCH_IMPEXP BOOL g_bLimitHeight=FALSE;//外部限高
TARCH_IMPEXP BOOL g_bDefaultOpenFirst=FALSE;//默认打开新一个
TARCH_IMPEXP BOOL g_bScrollBar=FALSE;//是否需要右滚动条
TARCH_IMPEXP int g_iMenuType=0;//菜单文件
TARCH_IMPEXP int g_nRunMode=0; //运行模式, 0--新模式,1--旧模式
TARCH_IMPEXP int g_menuColors[4]={GetSysColor(COLOR_3DFACE),RGB(239,239,236),RGB(250,254,254),RGB(255,255,252)};
//在位编辑器
TARCH_IMPEXP int g_colorInPlaceText=RGB(0,70,160);
TARCH_IMPEXP int g_colorInPlaceGround=RGB(235,233,230);
TARCH_IMPEXP int g_iInPlaceFontHeight=18;
TARCH_IMPEXP BOOL g_bDClickInplaceEdit=TRUE;
//环境记忆
TARCH_IMPEXP CString g_sRecentFiles;
TARCH_IMPEXP BOOL g_bAutoOpenRecent=FALSE;
TARCH_IMPEXP BOOL g_bProjectBarVisible=FALSE;
TARCH_IMPEXP double g_nDefaultScale=100;//模型空间默认出图比例
// 动态输入,只对2004、2005有效;2006以上,则使用AutoCAD自带的
//TARCH_IMPEXP BOOL g_bDynInput=TRUE; // 是否启动动态输入,
//TARCH_IMPEXP int g_iMaxDynDimNum=2; // 最多动态数量
// sg add 100112,增加“编组”控制
TARCH_IMPEXP BOOL g_bMakeGroup=TRUE; // 是否启动动态编组
// sg add 100915,增加“文字图层类型”的控制开关
TARCH_IMPEXP BOOL g_bTextDefaultLayer=TRUE; // TRUE为使用默认图层
// add by gjm 2015/05/05 为 符号、标高、坐标 三个实体增加相应的图层
TARCH_IMPEXP BOOL g_bSymbolDefLayer = TRUE; // TRUE为使用默认图层
TARCH_IMPEXP BOOL g_bCoordDefLayer = TRUE; // TRUE为使用默认图层
TARCH_IMPEXP BOOL g_bElevaDefLayer = TRUE; // TRUE为使用默认图层
// end
// sg add 110120,增加凸窗挡板保温、转角凸窗保温、门窗套保温厚度的默认数据,默认值均为30
TARCH_IMPEXP double g_dProWinSlabInsuThick=30;
TARCH_IMPEXP double g_dCornerWinInsuThick=30;
TARCH_IMPEXP double g_dSlotInsulateThick=30;
// sg add 110120,增加门窗套保温端头是否封口,默认封口
TARCH_IMPEXP BOOL g_bSlotInsulateCap=TRUE;
// sg add 110120,增加阳台栏板遮挡保温层,默认遮挡
TARCH_IMPEXP BOOL g_bBalconyClipInsu=TRUE;
// sg add 110301,增加三角形标高符号、圆点标高符号默认直径或尺寸大小
TARCH_IMPEXP double g_dEleTriangleSize = 3;
TARCH_IMPEXP double g_dEleDoteSize = 1.5;
TARCH_IMPEXP double g_dEleCrossSize = 2.5;
// sg add 110301,增加断面、剖面剖切符号中,剖切位置线默认长度、剖视方向线默认长度的大小设置
TARCH_IMPEXP double g_dSectionSegLocLength = 10;
TARCH_IMPEXP double g_dSectionSegDirLength = 6;
// sg add 110301,增加索引符号中,号圈直径设置
TARCH_IMPEXP double g_dIndexPointerDia = 10;
// sg add 110301,增加符号文字导出所在图层设置
TARCH_IMPEXP int g_nSymbTextT3Layer = 1; // 0--对象层,1--文字层
// sg add 110301,增加索引图名号圈直径设置
TARCH_IMPEXP double g_dSymbDrawingIndexDia = 14;
TARCH_IMPEXP BOOL g_bMakeExtSpace=TRUE;//搜索房间时是否生成建筑面积
TARCH_IMPEXP BOOL g_bIgnoreColumn=TRUE;//建筑面积是否忽略柱子凸出部分
TARCH_IMPEXP BOOL g_bEnableSelectPreview=TRUE;//是否选择预览(<2006),是否使用选择预览右键菜单
TARCH_IMPEXP BOOL g_bAutoFocus=TRUE;
//快捷銉
TARCH_IMPEXP const TKeyMaps* g_pKeyMapTable=NULL;
TARCH_IMPEXP BOOL g_bEnableShortCut=TRUE;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
TARCH_IMPEXP int g_nProductId=kTARCH;
TARCH_IMPEXP int g_nLicenseMode=0;//0:试用版;1单机版;2网络版;3高教网络版
TARCH_IMPEXP TCHAR g_szRegLoc[256]=_T("SoftWare\\Tangent\\TArch\\8.0");
TARCH_IMPEXP int g_nCustomFlag=0;
TARCH_IMPEXP double g_nVersion=8.0;
//TARCH_IMPEXP TCHAR g_sDwbPath[256]=_T("\\");
//TARCH_IMPEXP TCHAR g_sAppPath[256]=_T("C:\\");
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LoadGlobalFromReg
// 应用程序加载时, 从OS的注册表中取全局变量
TARCH_IMPEXP void LoadGlobalFromReg()
{
XString sTchIni;
if (FindFile(_T("tch.ini"), sTchIni))
{
INI_struct *inis=NULL;
if (CT_get_INIs(sTchIni, _T("Product"), &inis))
{
TCHAR *pReg=CT_get_INI2(inis, _T("Registry"));
if(pReg)
_tcscpy(g_szRegLoc, pReg);
TCHAR *pProdId=CT_get_INI2(inis, _T("ProductId"));
if(pProdId)
g_nProductId=_ttoi(pProdId);
TCHAR *pCustomFlag=CT_get_INI2(inis, _T("CustomFlag"));
if(pCustomFlag)
g_nCustomFlag=_ttoi(pCustomFlag);
CT_free_INIs(inis);
}
}
{
CRegProperty regProp(GetRegLocation(), _T("Settings"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.GetValue(_T("DynDim"), g_bDynDim);
regProp.GetValue(_T("ABCoord"), g_bABCoord);
//regProp.GetValue(_T("AngleDimArrow"), g_nAngleDimArrow);
//regProp.GetValue(_T("LineDimArrow"), g_nLineDimArrow);
regProp.GetValue(_T("DimAdjust"), g_nDimAdjust);
// sg delete 090608,转移到高级选项及图中保存
// regProp.GetValue(_T("CurtainWallScale"), g_nCurtainWall3Scale);
regProp.GetValue(_T("MaxDimGrip"), g_nDimNumGripTip);
regProp.GetValue(_T("SpeedMenu"), g_nSpeedMenu);
regProp.SetValue(_T("RMenuTimer"), g_nRBtnMenuTime);
regProp.GetValue(_T("ModelNumber"), g_bModelNumber);
regProp.GetValue(_T("WinStep"), g_nWinStep);
regProp.GetValue(_T("WallStep"), g_nWallStep);
regProp.GetValue(_T("ZoomKey"), g_bZoomKey);
regProp.GetValue(_T("DwgTabBar"), g_bDwgTabBar);
regProp.GetValue(_T("HideCaption"), g_bHideCaption);
regProp.GetValue(_T("ExplodeType"), g_bExplodeMesh);
regProp.GetValue(_T("DragRubber"), g_bDragRubber);
regProp.GetValue(_T("DblClkEditObj"),g_bDblClkEditObj);
regProp.GetValue(_T("DblClkInplaceEdit"),g_bDClickInplaceEdit);
regProp.GetValue(_T("InPlaceEditTextColor"),g_colorInPlaceText);
regProp.GetValue(_T("InPlaceEditBkColor"),g_colorInPlaceGround);
regProp.GetValue(_T("InPlaceEditFontSize"),g_iInPlaceFontHeight);
regProp.GetValue(_T("Dynamic"),g_bDynInput);
regProp.GetValue(_T("MaxDynDimNum"),g_iMaxDynDimNum);
// sg add 100112,增加“编组”控制
regProp.GetValue(_T("MakeGroup"), g_bMakeGroup);
// sg add 100915,增加“文字图层类型”的控制开关
regProp.GetValue(_T("TextDefaultLayer"), g_bTextDefaultLayer);
// add by gjm 2014/05/05
regProp.GetValue(_T("SymbolDefaultLayer"), g_bSymbolDefLayer);
regProp.GetValue(_T("CoordDefaultLayer"), g_bCoordDefLayer);
regProp.GetValue(_T("ElevaDefaultLayer"), g_bElevaDefLayer);
// end
#if ADS<16
regProp.GetValue(_T("RecentFiles15"),g_sRecentFiles);
#else
regProp.GetValue(_T("RecentFiles16"),g_sRecentFiles);
#endif
regProp.GetValue(_T("AutoOpenRecent"),g_bAutoOpenRecent);
regProp.GetValue(_T("AutoFocus"),g_bAutoFocus);
regProp.GetValue(_T("SelectPreview"),g_bEnableSelectPreview);
regProp.GetValue(_T("MakeExtSpace"),g_bMakeExtSpace);
regProp.GetValue(_T("IgnoreColumn"),g_bIgnoreColumn);
regProp.GetValue(_T("MaxAutoUpdateScale"),g_nMaxAutoScale);
regProp.GetValue(_T("EnableShortCut"),g_bEnableShortCut);
// sg delete 101125,根据8.5需求,阳台面积按一半计算的数据改到对象中,取消注册表中的全局设置
// regProp.GetValue(_T("BlaconyHalf"),g_bBlaconyHalf);//add by xlc on 090625
}
XString sProfile;
xg_getvar(_T("CPROFILE"), sProfile);
if(!sProfile)
sProfile=_T("Settings");
CRegProperty regProp(GetRegLocation(), sProfile);
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.GetValue(_T("WalkDistStep"), g_nWalkDistStep);
regProp.GetValue(_T("WalkAngleStep"), g_nWalkAngleStep);
regProp.GetValue(_T("CoordPrec"), g_nCoordPrec);
regProp.GetValue(_T("CoordArrowStyle"),g_nCoordArrowStyle);
regProp.GetValue(_T("SymbArrowStyle"),g_nSymbArrowStyle);
if(g_nCoordPrec<0)
g_nCoordPrec=3;
{
XString sKey;
sKey << GetRegLocation() << _T("\\Settings");
CRegProperty reg(sKey, _T("ScreenMenu"));
reg.SetTopRootKey(HKEY_CURRENT_USER);
reg.GetValue(_T("MenuType"),g_iMenuType);
if(g_iMenuType==2)
g_nRunMode=1;
else
g_nRunMode=0;
reg.GetValue(_T("ScreenMenuColor0"),g_menuColors[0]);
reg.GetValue(_T("ScreenMenuColor1"),g_menuColors[1]);
reg.GetValue(_T("ScreenMenuColor2"),g_menuColors[2]);
reg.GetValue(_T("ScreenMenuColor3"),g_menuColors[3]);
}
}
// sg modify 090512/090609/090612,满足8.0的需求,新增加了一些全局设置
// sg modify 110301,根据8.5需求,整体修改了高级选项中的全局设置
TARCH_IMPEXP void LoadConfig()
{
LoadGlobalFromReg();
XString sFullFile;
if (!FindFile(_T("config.ini"), sFullFile))
return;
WDict dict;
dict.ReadFile(sFullFile);
//CString sPath=_T("轴线\\轴线出头");
//WDictItem *pItem=dict.FindItem(sPath);
OPEN_DICT(dict);
OPEN_SUB_DICT(_T("系统"));
GET_BOOL(_T("是否启用代理对象"),g_bSaveProxyGraph);
GET_VALUE(_T("最大自动更新规模"),g_nMaxAutoScale);
//GET_VALUE(_T("模型空间默认出图比例"),g_nDefaultScale);if(g_nDefaultScale<0.0001)g_nDefaultScale=100;
GET_VALUE(_T("模型空间默认当前比例"),g_nDefaultScale);if(g_nDefaultScale<0.0001)g_nDefaultScale=100;
unsigned int type=0;
GET_VALUE(_T("三维对象分解方式"),type);g_bExplodeMesh=type==0;
OPEN_SUB_DICT(_T("精度"));
GET_VALUE(_T("墙体衔接控制精度"),g_nDistPrec);if(g_nDistPrec<1E-9||g_nDistPrec>1000)g_nDistPrec=20;
GET_VALUE(_T("距离精度"),_distSnap);if(_distSnap<1E-9||_distSnap>1000)_distSnap=0.01;
Refresh_DIST_SNAP();
GET_VALUE(_T("角度精度"),_angSnap);if(_angSnap<1E-9||_angSnap>1000)_angSnap=0.01;
GET_VALUE(_T("分弧精度"),g_nCirDeviation);if(g_nCirDeviation<1E-9)g_nCirDeviation=1;
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("线型"));
GET_BOOL(_T("是否启用自动线型比例"),g_bAutoLTScale);
GET_VALUE(_T("模型空间自动线型比例"),g_nLtMScale);if(g_nLtMScale<1E-9)g_nLtMScale=1000;
GET_VALUE(_T("图纸空间自动线型比例"),g_nLtPScale);if(g_nLtPScale<1E-9)g_nLtPScale=10;
CLOSE_SUB_DICT();
// sg delete 110530,根据讨论,暂时去掉高级选项中的该设置
// sg add 100125,满足8.5需求
// GET_BOOL(_T("是否显示楼层框"),g_bShowFloorRect);
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("轴线"));
GET_VALUE(_T("轴线出头"),g_dBaseDist);if(g_dBaseDist<0)g_dBaseDist=1000;
OPEN_SUB_DICT(_T("轴号"));
GET_VALUE(_T("隐藏轴号颜色号"),g_nHideAxisLabelColor);if(g_nHideAxisLabelColor<0)g_nHideAxisLabelColor=108;
GET_VALUE(_T("轴号字高系数"), g_dAxisLabelTextRatio); // sg add 090512
unsigned int type = 0;
GET_VALUE(_T("轴圈直径"), type); // sg add 090512
if (type == 0)
g_dAxisLabelDia = 8.0;
else if (type == 1)
g_dAxisLabelDia = 9.0;
else
g_dAxisLabelDia = 10.0;
//GET_VALUE(_T("不绘制附加轴号"), g_bIgnoreAttach); // sg add 100601,根据8.5需求,添加此项
GET_VALUE(_T("一轴多号忽略附加轴号"), g_bIgnoreAttach); // sg add 110301,规范命名,便于用户理解
unsigned int type1 = 0;
//GET_VALUE(_T("字母Y后面采用的注脚形式"), type1); // sg add 100601,根据8.5需求,添加此项
GET_VALUE(_T("字母数量不够时采用的注脚形式"), type1); // sg add 110301,规范命名,便于用户理解
g_nAfterYAxisStyle = type1;
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
//OPEN_SUB_DICT(_T("墙体"));
OPEN_SUB_DICT(_T("墙柱"));
GET_VALUE(_T("墙基线颜色号"),g_nWallBaseColor);if(g_nWallBaseColor<0)g_nWallBaseColor=46;
OPEN_SUB_DICT(_T("保温层"));
// sg add 110530,根据底层保温默认值的修改,增加一个辅助变量,方便在用户输入和实际值之间的转换;
// GET_VALUE(_T("默认厚度"),g_nInsulateThick);if(g_nInsulateThick<1E-6)g_nInsulateThick=80;
double dTmpInsulate = g_nInsulateThick;
GET_VALUE(_T("默认厚度"),dTmpInsulate);if(dTmpInsulate<1E-6)dTmpInsulate=80;
g_nInsulateThick = dTmpInsulate*1.001;
//GET_VALUE(_T("墙体保温是否封口"), g_bWallHasInsulateCap); // sg add 100714,根据8.5需求,添加此项,墙体保温是否封口
GET_VALUE(_T("墙体保温端头封口"), g_bWallHasInsulateCap); // sg add 110301,规范命名,便于用户理解
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
// sg delete 101209,根据讨论,暂时去掉高级选项中的该设置
/*
// sg add 100714,根据8.5需求,添加此项,房间面积全局参数
OPEN_SUB_DICT(_T("房间面积"));
GET_VALUE(_T("面积对象标注方式是否全局控制"), g_bUniformSpaceDim);
CLOSE_SUB_DICT();
*/
OPEN_SUB_DICT(_T("门窗"));
OPEN_SUB_DICT(_T("编号"));
GET_VALUE(_T("默认字高"),g_fWinLabelDefaultHeight);if(g_fWinLabelDefaultHeight<1E-9)g_fWinLabelDefaultHeight=3.5;
GET_VALUE(_T("默认后缀"),g_sWinLabelPostFix);if(g_sWinLabelPostFix==_T(""))g_sWinLabelPostFix=_T("反");
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("带形窗幕墙样式")); // sg add 090609,根据林工提出的需求,增加带形窗表示样式的全局设置
BOOL bShowStyle = !g_bCurtainWallFixStyle;
GET_BOOL(_T("比例改变后改变样式"),bShowStyle);
g_bCurtainWallFixStyle = !bShowStyle;
unsigned int type=0;
GET_VALUE(_T("不改样式时的设定类型"),type);g_nCurtainWallStyle = type;
int nRet = 0;
CString cs3Scale = _T("1:150"),
csTmp = _T("1:");
GET_VALUE(_T("改变样式的比例界限"),cs3Scale);
nRet = cs3Scale.Find(csTmp, 0);
if (nRet < 0)
{
g_nCurtainWall3Scale = 150;
}
else
{
nRet += csTmp.GetLength();
cs3Scale = cs3Scale.Right(cs3Scale.GetLength() - nRet);
g_nCurtainWall3Scale = _ttoi(cs3Scale);
}
CLOSE_SUB_DICT();
// sg add 110120,增加凸窗挡板保温、转角凸窗保温、门窗套保温厚度的默认数据
// sg add 110120,增加门窗套保温端头是否封口
OPEN_SUB_DICT(_T("保温层"));
GET_VALUE(_T("凸窗挡板默认保温厚"),g_dProWinSlabInsuThick);if(g_dProWinSlabInsuThick<-1E-6)g_dProWinSlabInsuThick=30;
//GET_VALUE(_T("转角凸窗挡板默认保温厚"),g_dCornerWinInsuThick);if(g_dCornerWinInsuThick<-1E-6)g_dCornerWinInsuThick=30;
GET_VALUE(_T("转角凸窗挡板默认保温厚"),g_dCornerWinInsuThick);if(g_dCornerWinInsuThick<-1E-6)g_dCornerWinInsuThick=30;
GET_VALUE(_T("门窗套默认保温厚"),g_dSlotInsulateThick);if(g_dSlotInsulateThick<-1E-6)g_dSlotInsulateThick=30;
GET_VALUE(_T("门窗套保温端头封口"),g_bSlotInsulateCap);
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
// sg add 110120,增加阳台栏板遮挡保温层的默认数据
OPEN_SUB_DICT(_T("室外构件"));
OPEN_SUB_DICT(_T("阳台"));
GET_BOOL(_T("阳台栏板遮挡保温层"),g_bBalconyClipInsu);
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("立剖面"));
OPEN_SUB_DICT(_T("建筑立剖面"));
GET_BOOL(_T("忽略楼梯扶手和栏杆"),g_bIgnoreStairRail);
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("尺寸标注"));
OPEN_SUB_DICT(_T("直线尺寸"));
unsigned int type=0;
GET_VALUE(_T("样式"),type);g_nLineDimArrow=type;
OPEN_SUB_DICT(_T("默认尺寸样式名"));
GET_VALUE(_T("粗斜线(mm-mm)"),g_sDim0);
GET_VALUE(_T("粗斜线(M-M)"),g_sDim0M_M);
GET_VALUE(_T("粗斜线(mm-M)"),g_sDim0mm_M);
GET_VALUE(_T("细斜线(mm-mm)"),g_sDim1);
GET_VALUE(_T("细斜线(M-M)"),g_sDim1M_M);
GET_VALUE(_T("细斜线(mm-M)"),g_sDim1mm_M);
GET_VALUE(_T("圆点(mm-mm)"),g_sDim2);
GET_VALUE(_T("圆点(M-M)"),g_sDim2M_M);
GET_VALUE(_T("圆点(mm-M)"),g_sDim2mm_M);
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("角度圆弧尺寸"));
// sg add 120412,根据9.0需求,增加设置弧长标注样式的设置
unsigned int typeDimArcLen=0;
GET_VALUE(_T("弧长标注"),typeDimArcLen);g_nArcLenDimType=typeDimArcLen;
unsigned int type=0;
GET_VALUE(_T("样式"),type);g_nAngleDimArrow=type;
OPEN_SUB_DICT(_T("默认尺寸样式名"));
GET_VALUE(_T("箭头"),g_sDimA0);
GET_VALUE(_T("圆点"),g_sDimA1);
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
// sg add 120516,文字导出T3版本时候,是否断开
OPEN_SUB_DICT(_T("文字"));
GET_BOOL(_T("混排文字导低版本断开"),g_bDownloadT3Split);
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("符号标注"));
OPEN_SUB_DICT(_T("标高标注"))
GET_VALUE(_T("空白标高符号默认文字基线长度"), g_dElevTextBaseLen);
GET_VALUE(_T("三角高度"), g_dEleTriangleSize);
GET_VALUE(_T("圆点直径"), g_dEleDoteSize);
GET_VALUE(_T("十字线长"), g_dEleCrossSize);
//GET_VALUE(_T("标高符号注释在左侧"), g_bElevFloorsOnLeft); // sg add 110124,多层标高符号中的楼层是否在标高值左侧
GET_VALUE(_T("注释在右侧"), g_bElevFloorsOnRight); // sg add 110301,规范命名,便于用户理解
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("断面、剖面剖切符号"))
GET_VALUE(_T("剖切位置线默认长度"),g_dSectionSegLocLength);
GET_VALUE(_T("剖视方向线默认长度"),g_dSectionSegDirLength);
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("索引符号"))
GET_VALUE(_T("号圈直径"), g_dIndexPointerDia);
//GET_VALUE(_T("索引符号延长线的默认长度"), g_dIndexPointerBaseLen); // sg add 101209
//GET_VALUE(_T("剖切索引剖切线的默认长度"), g_dSectionBaseLen); // sg add 101209
GET_VALUE(_T("延长线无标注文字时默认长度"), g_dIndexPointerBaseLen);
GET_VALUE(_T("剖切索引默认剖切线长度"), g_dSectionBaseLen);
CLOSE_SUB_DICT();
unsigned int typeSymbTextLayer = 0;
GET_VALUE(_T("符号文字导出图层"), typeSymbTextLayer);
g_nSymbTextT3Layer = typeSymbTextLayer;
GET_VALUE(_T("索引图名号圈直径"),g_dSymbDrawingIndexDia);
GET_VALUE(_T("文字距基线默认系数"),g_nText2BaseRatio);
GET_VALUE(_T("圆圈文字字高系数"), g_dDrawIndexTextRatio); // sg add 090512
// sg delete 110209,根据讨论,暂时去掉高级选项中的该设置,换成“圆圈文字显示样式”
// GET_VALUE(_T("圆圈文字使用旧样式"), g_bDrawIndexOldStyle); // sg add 090612
// GET_VALUE(_T("圆圈文字使用出圈样式"), g_bDIOutCircleStyle); // sg add 110124,圆圈文字支持出圈样式
unsigned int typeDrawingIndex = 0;
GET_VALUE(_T("圆圈文字显示样式"), typeDrawingIndex);
if (typeDrawingIndex == 0) // 旧样式
{
g_bDrawIndexOldStyle = TRUE;
g_bDIOutCircleStyle = FALSE;
}
else if (typeDrawingIndex == 1) // 新样式,不出圈
{
g_bDrawIndexOldStyle = FALSE;
g_bDIOutCircleStyle = FALSE;
}
else // 出圈样式
{
g_bDrawIndexOldStyle = FALSE;
g_bDIOutCircleStyle = TRUE;
}
unsigned int typeNorthThumbTextDir = 1;
GET_VALUE(_T("指北针文字方向"), typeNorthThumbTextDir); // sg add 111221,增加指北针文字方向的设置
g_bNorthThumbTextDir = typeNorthThumbTextDir;
OPEN_SUB_DICT(_T("带折断切割线"))
GET_VALUE(_T("不打印边颜色号"),g_nCutLineColor);if(g_nCutLineColor<0)g_nCutLineColor=149;
CLOSE_SUB_DICT();
OPEN_SUB_DICT(_T("折断线两端出头距离")) // sg add 090512
GET_VALUE(_T("长度界限值"), g_dRuptureLenLimit);
GET_VALUE(_T("大于界限值时"), g_dMoreRuptureLimit);
GET_VALUE(_T("小于界限值时"), g_dLessRuptureLimit);
CLOSE_SUB_DICT();
CLOSE_SUB_DICT();
CLOSE_DICT();
}
TARCH_IMPEXP void SaveGlobalToReg()
{
{
CRegProperty regProp(GetRegLocation(), _T("Settings"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("DynDim"), g_bDynDim);
regProp.SetValue(_T("ABCoord"), g_bABCoord);
//regProp.SetValue(_T("AngleDimArrow"), g_nAngleDimArrow);
//regProp.SetValue(_T("LineDimArrow"), g_nLineDimArrow);
regProp.SetValue(_T("DimAdjust"), g_nDimAdjust);
// sg delete 090608,转移到高级选项及图中保存
// regProp.SetValue(_T("CurtainWallScale"), g_nCurtainWall3Scale);
regProp.SetValue(_T("MaxDimGrip"), g_nDimNumGripTip);
regProp.SetValue(_T("SpeedMenu"), g_nSpeedMenu);
regProp.SetValue(_T("RMenuTimer"), g_nRBtnMenuTime);
regProp.SetValue(_T("ModelNumber"), g_bModelNumber);
regProp.SetValue(_T("WinStep"), g_nWinStep);
regProp.SetValue(_T("WallStep"), g_nWallStep);
regProp.SetValue(_T("ZoomKey"), g_bZoomKey);
regProp.SetValue(_T("DwgTabBar"), g_bDwgTabBar);
regProp.SetValue(_T("HideCaption"),g_bHideCaption);
regProp.SetValue(_T("ExplodeType"), g_bExplodeMesh);
regProp.SetValue(_T("DragRubber"), g_bDragRubber);
regProp.SetValue(_T("DblClkEditObj"),g_bDblClkEditObj);
regProp.SetValue(_T("DblClkInplaceEdit"),g_bDClickInplaceEdit);
regProp.SetValue(_T("InPlaceEditTextColor"),g_colorInPlaceText);
regProp.SetValue(_T("InPlaceEditBkColor"),g_colorInPlaceGround);
regProp.SetValue(_T("InPlaceEditFontSize"),g_iInPlaceFontHeight);
regProp.SetValue(_T("Dynamic"),g_bDynInput);
regProp.SetValue(_T("MaxDynDimNum"),g_iMaxDynDimNum);
// sg add 100112,增加“编组”控制
regProp.SetValue(_T("MakeGroup"), g_bMakeGroup);
// sg add 100915,增加“文字图层类型”的控制开关
regProp.SetValue(_T("TextDefaultLayer"), g_bTextDefaultLayer);
// add by gjm 2014/05/05
regProp.SetValue(_T("SymbolDefaultLayer"), g_bSymbolDefLayer);
regProp.SetValue(_T("CoordDefaultLayer"), g_bCoordDefLayer);
regProp.SetValue(_T("ElevaDefaultLayer"), g_bElevaDefLayer);
// end
#if ADS<16
regProp.SetValue(_T("RecentFiles15"),g_sRecentFiles);
#else
#if ADS==16
regProp.SetValue(_T("RecentFiles16"),g_sRecentFiles);
#else
regProp.SetValue(_T("RecentFiles17"),g_sRecentFiles);
#endif
#endif
regProp.SetValue(_T("AutoOpenRecent"),g_bAutoOpenRecent);
regProp.SetValue(_T("AutoFocus"),g_bAutoFocus);
regProp.SetValue(_T("SelectPreview"),g_bEnableSelectPreview);
regProp.SetValue(_T("MakeExtSpace"),g_bMakeExtSpace);
regProp.SetValue(_T("IgnoreColumn"),g_bIgnoreColumn);
regProp.SetValue(_T("MaxAutoUpdateScale"),g_nMaxAutoScale);//wd
regProp.SetValue(_T("EnableShortCut"),g_bEnableShortCut);;
// sg delete 101125,根据8.5需求,阳台面积按一半计算的数据改到对象中,取消注册表中的全局设置
// regProp.SetValue(_T("BlaconyHalf"),g_bBlaconyHalf); //add by xlc on 090625
}
XString sProfile;
xg_getvar(_T("CPROFILE"), sProfile);
if(!sProfile)
sProfile=_T("Settings");
CRegProperty regProp(GetRegLocation(), sProfile);
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("WalkDistStep"), g_nWalkDistStep);
regProp.SetValue(_T("WalkAngleStep"), g_nWalkAngleStep);
regProp.SetValue(_T("CirDeviation"), g_nCirDeviation);//wd?分弧精度
regProp.SetValue(_T("CoordPrec"), g_nCoordPrec);
regProp.SetValue(_T("CoordArrowStyle"),g_nCoordArrowStyle);
regProp.SetValue(_T("SymbArrowStyle"),g_nSymbArrowStyle);
{
XString sKey;
sKey << GetRegLocation() << _T("\\Settings");
CRegProperty reg(sKey, _T("ScreenMenu"));
reg.SetTopRootKey(HKEY_CURRENT_USER);
reg.SetValue(_T("MenuType"),g_iMenuType);
reg.SetValue(_T("ScreenMenuColor0"),g_menuColors[0]);
reg.SetValue(_T("ScreenMenuColor1"),g_menuColors[1]);
reg.SetValue(_T("ScreenMenuColor2"),g_menuColors[2]);
reg.SetValue(_T("ScreenMenuColor3"),g_menuColors[3]);
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Command:步距设置
void WalkStep()
{
XString sProfile;
xg_getvar(_T("CPROFILE"), sProfile);
if(!sProfile)
sProfile=_T("Settings");
double nAng=g_nWalkAngleStep*180.0/PI;
if(GetDist(_T("\n行走步距"), g_nWalkDistStep, RSG_NONEG|RSG_NOZERO)!=RTCAN &&
GetReal(_T("\n转角步长"), nAng, RSG_NONEG|RSG_NOZERO)!=RTCAN) {
g_nWalkAngleStep=CT_std_angle(nAng*PI/180.0);
CRegProperty regProp(GetRegLocation(), sProfile);
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("WalkDistStep"), g_nWalkDistStep);
regProp.SetValue(_T("WalkAngleStep"), g_nWalkAngleStep);
}
}
//炸碎成粗线前求解所有墙体的粗线内侧参数
TARCH_IMPEXP void SolidFillOn()
{
//DocSetDrawMode(DRAW_2D);
DocSetIsSolidFill(TRUE);
PickSet ssObj(SS_FREE);
if(GetEntByDxf(ssObj, _T("ATS_WALL,ATS_COLUMN,TCH_WALLPATCH"), 1)==Acad::eOk) {
UpdateGraphic(ssObj);
}
adsout << _T("<墙体填充开>");
int nCmdActive=0;
xg_getvar(_T("CMDACTIVE"), &nCmdActive);
if(!nCmdActive)
acedPostCommandPrompt();
}
TARCH_IMPEXP void SolidFillOff()
{
DocSetIsSolidFill(FALSE);
PickSet ssObj(SS_FREE);
if(GetEntByDxf(ssObj, _T("ATS_WALL,ATS_COLUMN,TCH_WALLPATCH"), 1)==Acad::eOk)
UpdateGraphic(ssObj);
adsout << _T("<墙体填充关>");
int nCmdActive=0;
xg_getvar(_T("CMDACTIVE"), &nCmdActive);
if(!nCmdActive)
acedPostCommandPrompt();
}
TARCH_IMPEXP void BoldLineOn()
{
DocSetIsLineWeight(TRUE);
PickSet ssObj(SS_FREE);
if(GetEntByDxf(ssObj, _T("ATS_WALL,ATS_COLUMN,TCH_WALLPATCH"), 1)==Acad::eOk) {
UpdateGraphic(ssObj);
}
adsout << _T("<墙线加粗开>");
int nCmdActive=0;
xg_getvar(_T("CMDACTIVE"), &nCmdActive);
if(!nCmdActive)
acedPostCommandPrompt();
}
TARCH_IMPEXP void BoldLineOff()
{
DocSetIsLineWeight(FALSE);
PickSet ssObj(SS_FREE);
if(GetEntByDxf(ssObj, _T("ATS_WALL,ATS_COLUMN,TCH_WALLPATCH"), 1)==Acad::eOk)
UpdateGraphic(ssObj);
adsout << _T("<墙线加粗关>");
int nCmdActive=0;
xg_getvar(_T("CMDACTIVE"), &nCmdActive);
if(!nCmdActive)
acedPostCommandPrompt();
}
//////////////////////////////////////////////////
// Command: 开关基线的显示
// 系统变量_T("WallBaseLine"), 保存在OS注册表中
TARCH_IMPEXP void TogWallBase()
{
TDonotMonitorMe vTemp;
int nVal=g_bShowBase+1;
if(nVal>2) nVal=0;
DocSetShowBase(nVal);
PickSet ss(SS_FREE);
if(GetEntByDxf(ss, _T("ATS_WALL,ATS_CURTAIN_WALL"), 1)==Acad::eOk) {
UpdateGraphic(ss);
}
}
// Command: 开关基线的显示
// 系统变量_T("WallBaseLine"), 保存在OS注册表中
TARCH_IMPEXP void ToggleWallBase()
{
TDonotMonitorMe vTemp;
if(g_bShowBase)
{
DocSetShowBase(FALSE);
adsout << _T("<墙基线关>");
}
else
{
DocSetShowBase(TRUE);
adsout << _T("<墙基线开>");
}
PickSet ss(SS_FREE);
if(GetEntByDxf(ss, _T("ATS_WALL,ATS_CURTAIN_WALL"),1)==Acad::eOk) {
UpdateGraphic(ss);
}
int nCmdActive=0;
xg_getvar(_T("CMDACTIVE"), &nCmdActive);
if(!nCmdActive)
acedPostCommandPrompt();
}
//////////////////////////////////////////////////
// Command: 开关画墙模式的(设计/测量)
// 系统变量_T("DrawWall"), 保存在OS注册表中
TARCH_IMPEXP void TogDrawWall()
{
DocSetDrawWall(!g_nDrawWall);
CRegProperty regProp(GetRegLocation(), _T("Settings"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("DrawWall"), g_nDrawWall);
}
TARCH_IMPEXP void ToggleModelNumber()
{
g_bModelNumber=!g_bModelNumber;
adsout << _T("<模数") << (g_bModelNumber? _T("开>") : _T("关>"));
int nCmdActive=0;
xg_getvar(_T("CMDACTIVE"), &nCmdActive);
if(!nCmdActive)
acedPostCommandPrompt();
CRegProperty regProp(GetRegLocation(), _T("Settings"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("ModelNumber"), g_bModelNumber);
}
// 透明命令
void DragRubber()
{
adsout << _T("\n自由复制的拖动方式<") << g_bDragRubber << _T(">:");
ads_initget(RSG_NONEG, NULL);
if(ads_getint(_T(""), &g_bDragRubber)==RTNORM) {
if(g_bDragRubber)
g_bDragRubber=TRUE;
CRegProperty regProp(GetRegLocation(), _T("Settings"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("DragRubber"), g_bDragRubber);
}
}
//////////////////////////////////////////////////////////////////////
int GetCoordPrec2()
{
return ads_retint(DocGetPrec2());
}
int SetCoordPrec2()
{
BOOL bVal=DocGetPrec2();
DocSetPrec2(!bVal);
return ads_retint(DocGetPrec2());
}
int GetDynamicCoord()
{
return ads_retint(g_bDynamicCoord);
}
int SetDynamicCoord()
{
g_bDynamicCoord=!g_bDynamicCoord;
return GetDynamicCoord();
}
// sg add 100824,增加编组开关
int GetMakeGroupState()
{
return ads_retint(g_bMakeGroup);
}
int SetMakeGroupState()
{
g_bMakeGroup=!g_bMakeGroup;
// sg add 100915,根据编组按钮的状态,修改系统变量值
int nPickStyle = 0;
TGGetVar(_T("pickstyle"), &nPickStyle);
if (nPickStyle==0 || nPickStyle==1)
{
nPickStyle = g_bMakeGroup?1:0;
}
else
{
nPickStyle = g_bMakeGroup?3:2;
}
TGSetVar(_T("pickstyle"), nPickStyle);
return GetMakeGroupState();
}
// sg add 100915,增加文字图层控制开关
int TARCH_IMPEXP GetTextLayerChange() { return ads_retint(g_bTextDefaultLayer); }
int TARCH_IMPEXP SetTextLayerChange() { g_bTextDefaultLayer = !g_bTextDefaultLayer; return GetTextLayerChange(); }
// add by gjm 2015/05/05
bool TARCH_IMPEXP GetSymbolDefLayer() { return g_bSymbolDefLayer; }
bool TARCH_IMPEXP SetSymbolDefLayer() {g_bSymbolDefLayer = !g_bSymbolDefLayer; return GetSymbolDefLayer();}
bool TARCH_IMPEXP GetCoordDefLayer() { return g_bCoordDefLayer; }
bool TARCH_IMPEXP SetCoordDefLayer() {g_bCoordDefLayer = !g_bCoordDefLayer; return GetCoordDefLayer();}
bool TARCH_IMPEXP GetElevaDefLayer() { return g_bElevaDefLayer; }
bool TARCH_IMPEXP SetElevaDefLayer() {g_bElevaDefLayer = !g_bElevaDefLayer; return GetElevaDefLayer();}
// end
int GetABCoord()
{
return ads_retint(g_bABCoord);
}
int SetABCoord()
{
g_bABCoord=!g_bABCoord;
CRegProperty regProp(GetRegLocation(), _T("Settings"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("ABCoord"), g_bABCoord);
return GetABCoord();
}
int GetSolidFillState()
{
ads_retint(DocGetIsSolidFill());
return RTNORM;
}
int SetSolidFillState()
{
if(DocGetIsSolidFill())
SolidFillOff();
else
SolidFillOn();
return GetSolidFillState();
}
int GetBoldLineState()
{
ads_retint(DocGetIsLineWeight());
return RTNORM;
}
int SetBoldLineState()
{
if(DocGetIsLineWeight())
BoldLineOff();
else
BoldLineOn();
return GetBoldLineState();
}
int GetSpaceAreaState()
{
int nSpCode=DocGetSpaceDispMode();
BOOL bShow=(nSpCode&SPF_AREA)!=0;
ads_retint(bShow);
return RTNORM;
}
int GetSpaceUnitState()
{
int nSpCode=DocGetSpaceDispMode();
BOOL bShow=(nSpCode&SPF_UNIT)!=0;
ads_retint(bShow);
return RTNORM;
}
int SetSpaceAreaState()
{
int nSpCode=DocGetSpaceDispMode();
BOOL bShow=(nSpCode&SPF_AREA)!=0;
bShow=!bShow;
if(bShow) nSpCode|=SPF_AREA;
else nSpCode &= ~SPF_AREA;
DocSetSpaceDispMode(nSpCode);
ads_retint(bShow);
return RTNORM;
}
int SetSpaceUnitState()
{
int nSpCode=DocGetSpaceDispMode();
BOOL bShow=(nSpCode&SPF_UNIT)!=0;
bShow=!bShow;
if(bShow) nSpCode|=SPF_UNIT;
else nSpCode &= ~SPF_UNIT;
DocSetSpaceDispMode(nSpCode);
ads_retint(bShow);
return RTNORM;
}
int GetDimChkState()
{
return ads_retint(DocGetCheckDim());
}
int SetDimChkState()
{
BOOL bNewCheck=!DocGetCheckDim();
DocSetCheckDim(bNewCheck);
PickSet ssUpdate(SS_FREE);
if(GetEntByDxf(ssUpdate, _T("ATS_DIMENSION2"), 0)==Acad::eOk) {
UpdateGraphic(ssUpdate);
}
return GetDimChkState();
}
int GetDimAdjState()
{
ads_retint(g_nDimAdjust);
return RTNORM;
}
int SetDimAdjState()
{
g_nDimAdjust++; //=!g_nDimAdjust;
if(g_nDimAdjust>2)
g_nDimAdjust=0;
return GetDimAdjState();
}
int GetBaselineState()
{
return ads_retint(DocGetShowBase());
}
int SetBaselineState()
{
TogWallBase();
return GetBaselineState();
}
int Is2DOnly()
{
if(DocGetDrawMode()==DRAW_2D)
ads_rett();
return RTNORM;
}
int Is3DOnly()
{
if(DocGetDrawMode()==DRAW_3D)
ads_rett();
return RTNORM;
}
int Is2Dand3D()
{
if(DocGetDrawMode()==DRAW_2D+DRAW_3D)
ads_rett();
return RTNORM;
}
int GetPScale()
{
double nScale=DocGetPScale();
int cvport;
VERIFY(xg_getvar(_T("CVPORT"), &cvport)==RTNORM);
if(cvport==1)
nScale=1.0;
return ads_retint( AS_INT(nScale));
}
int SetPScale()
{
resbuf *rbArg=ads_getargs();
if(rbArg) {
if(rbArg->restype==RTSHORT) {
double nScale=rbArg->resval.rint;
if(nScale>1.0E-3) {
if(DocSetPScale(nScale))
xg_setvar(_T("HPSCALE"), nScale);
DocStatus();
}
} else if(rbArg->restype==RTREAL) {
double nScale=rbArg->resval.rreal;
if(nScale>1.0E-3) {
if(DocSetPScale(nScale))
xg_setvar(_T("HPSCALE"), nScale);
DocStatus();
}
}
ads_relrb(rbArg);
}
return RTNORM;
}
int TMakeBlock()
{
resbuf *rbArg=ads_getargs();
RBList rbBuf=rbArg;
if(rbArg && rbArg->restype==RTPICKS) {
PickSet ss(SS_FREE);
ss = rbArg->resval.rlname;
if(!g_nRunMode) {
XPoint ptLow, ptUp;
ss.GetExtend(ptLow, ptUp);
XString sName;
if(ss.MakeAnonymous(ptLow, sName, FALSE)==RTNORM) {
MakeTBlockInsert(sName, ptLow, 1.0, 1.0, 1.0, 0.0, 0);
ads_rett();
return RTNORM;
}
}
}
ads_retnil();
return RTNORM;
}
int GetPfx()
{
TCHAR dir[256]=_T("");
_tcscpy(dir, g_sAppPath);
TCHAR *p=&dir[_tcslen(dir)-2];
while(*p!=_T('\\') && p!=dir) p--;
if(*p==_T('\\')) *(p+1)=0;
ads_retstr(dir);
return RTNORM;
}
int GetLispPath()
{
TCHAR dir[256]=_T("");
_tcscpy(dir, g_sAppPath);
TCHAR *p=&dir[_tcslen(dir)-2];
while(*p!=_T('\\') && p!=dir) p--;
if(*p==_T('\\')) *(p+1)=0;
if(g_nRunMode)
_tcscat(dir, _T("LISP2D\\"));
else
_tcscat(dir, _T("LISP\\"));
ads_retstr(dir);
return RTNORM;
}
int Circle2Polyline()
{
resbuf *rbArg=ads_getargs();
if(rbArg && rbArg->restype==RTENAME) {
Entity ent;
ent = rbArg->resval.rlname;
if(ent.Is(_T("CIRCLE"))) {
XCircle cir(ent);
XCurveSegment seg;
seg=cir;
XPoly2D poly;
seg.AsPoly2D(poly);
AcDbPolyline *pline=new AcDbPolyline;
PolyConvert(poly, *pline);
AcDbEntity *pCir=NULL;
AcDbObjectId id;
acdbGetObjectId(id, ent);
if(acdbOpenObject(pCir, id, AcDb::kForWrite)==Acad::eOk && pCir) {
pline->setPropertiesFrom(pCir);
Acad::ErrorStatus es=pCir->handOverTo(pline);
if(es==Acad::eObjectToBeDeleted) {
pline->close();
delete pCir;
ads_rett();
} else {
pCir->close();
delete pline;
}
}
}
}
if(rbArg)
ads_relrb(rbArg);
return RTNORM;
}
int TDocStatus()
{
DocStatus();
ads_retvoid();
return RTNORM;
}
int ApplyLayerChange()
{
extern void InitLayers(BOOL bTrue);
InitLayers(FALSE);
InitLayers(TRUE);
return RTNORM;
}
int DragTitle()
{
extern TARCH_IMPEXP int DragMovePickSet(PickSet &ss, const TCHAR *pszPrompt,
const XPoint &ptBase, XPoint &ptFinal);
resbuf *rbArg=ads_getargs();
if(rbArg && rbArg->restype==RTPICKS) {
PickSet ss(SS_FREE);
ss = rbArg->resval.rlname;
//modified by whl for UCS
XPoint ptLow, ptUp;
double angle=Ucs2Wcs(0.0);
if(fabs(angle)>0.00001)
{
ads_matrix mat;
XPoint pt;
pt.GetRotationMatrix(angle,mat);
XPushVar<int> osmode(_T("OSMODE"), 0);
SHads_command(RTSTR, _T(".ROTATE"), RTPICKS, (TLong_ptr*)ss, RTSTR, _T(""),RT3DPOINT,&pt, RTREAL, -angle*180/PI, RTNONE);
ss.GetExtend(ptLow, ptUp);
SHads_command(RTSTR, _T("ROTATE"), RTPICKS, (TLong_ptr*)ss, RTSTR, _T(""),RT3DPOINT,&pt, RTREAL, angle*180/PI, RTNONE);
ptLow.TransformBy(mat);
}
else
ss.GetExtend(ptLow,ptUp);
XPoint ptLimMin;
VERIFY(xg_getvar(_T("LIMMIN"), ptLimMin)==RTNORM);
adsout << _T("\n图框位置<") << Dist2Str(ptLimMin.x) << _T(",") <<
Dist2Str(ptLimMin.y) << _T(">:");
XPoint xp;
int nRet= TchExport::DragMovePickSet(ss, _T(""), Wcs2Ucs(ptLow), xp);
if(nRet==RTNORM) ;
else if(nRet==RTNONE) {
ptLow=Wcs2Ucs(ptLow);
XPushVar<int> osmode(_T("OSMODE"), 0);
SHads_command(RTSTR, _T(".MOVE"), RTPICKS, (TLong_ptr *)ss, RTSTR, _T(""),
RT3DPOINT, &ptLow, RT3DPOINT, &ptLimMin, RTNONE);
}
else ss.Erase();
}
if(rbArg)
ads_relrb(rbArg);
ads_retvoid();
return RTNORM;
}
//////////////////////////////////////////////////////////////
// 配合二维工具集
// 窗-门-高窗循环切换
int GetWDState()
{
int _wdins=1;
if(xg_getsym(_T("_wdins"), &_wdins)!=RTNORM) {
_wdins=1;
xg_putsym(_T("_wdins"), 1);
}
return ads_retint(_wdins);
}
int SetWDState()
{
int _wdins=1;
if(xg_getsym(_T("_wdins"), &_wdins)==RTNORM) {
_wdins++;
if(_wdins>3)
_wdins=1;
xg_putsym(_T("_wdins"), _wdins);
} else {
_wdins=1;
xg_putsym(_T("_wdins"), 1);
}
return ads_retint(_wdins);
}
// 自调开关
int GetDamnu1()
{
resbuf *v=NULL;
if(ads_getsym(_T("_dim_auto"), &v)!=RTNORM || !v)
return ads_retint(0);
ads_retint(v->restype==RTNIL? 0 : 1);
ads_relrb(v);
//int _dim_auto=1; // t--自调开, nil--自调关
return RTNORM;
}
int SetDamnu1()
{
resbuf *v=NULL;
if(ads_getsym(_T("_dim_auto"), &v)!=RTNORM || !v) {
resbuf *rb = ads_buildlist(RTT, NULL);
//rb.restype=RTT;
ads_putsym(_T("_dim_auto"), rb);
ads_retint(1);
ads_relrb(rb);
} else {
int nVal= v->restype==RTNIL? 0 : 1;
nVal=!nVal;
//resbuf rb;
v->restype = nVal? RTT:RTNIL;
VERIFY(ads_putsym(_T("_dim_auto"), v)==RTNORM);
ads_retint(nVal);
ads_relrb(v);
}
return RTNORM;
}
// _up_down: t--上调, nil--下调
int GetLineThick()
{
double nThick=DocGetHighBold();
ads_retreal(nThick);
return RTNORM;
}
//////////////////////////////////////////////////////////////////////////////
TARCH_IMPEXP void ToggleOsnapWall()
{
DocSetWallOsnapType(!g_nOsnapType);
adsout << _T("<墙体捕捉") << (g_nOsnapType? _T("边线>") : _T("基线>"));
int nCmdActive=0;
xg_getvar(_T("CMDACTIVE"), &nCmdActive);
if(!nCmdActive)
acedPostCommandPrompt();
CRegProperty regProp(GetRegLocation(), _T("Settings"));
regProp.SetTopRootKey(HKEY_CURRENT_USER);
regProp.SetValue(_T("OsnapWall"), g_nOsnapType);
}
void TogIntWall()
{
DocSetInt3DWallVisible(!g_bIntWall3DVisible);
RBList mask(RTDXF0, _T("ATS_WALL,ATS_CURTAIN_WALL,ATS_OPENING"), NULL);
PickSet ss(SS_FREE);
if(ss.Get(_T("X"), NULL, NULL, mask)==RTNORM) {
UpdateGraphic(ss);
}
}
// Command:
void CurLayerHeight()
{
double nHeight=DocGetLHeight();
if(GetDist(_T("\n当前层高"), nHeight, RSG_NONEG|RSG_NOZERO)==RTNORM) {
DocSetLHeight(nHeight);
}
}
void Text2Base()
{
double nDist2Base=DocGetText2Base();
if(GetReal(_T("\n文字距离基线"), nDist2Base, RSG_NONEG|RSG_NOZERO)==RTNORM) {
DocSetText2Base(nDist2Base);
}
}
void DblClkEdit()
{
int nAns=YesNoQuestion(_T("\n鼠标双击是否进行对象编辑"),g_bDblClkEditObj);
if(nAns==RTCAN)
return;
g_bDblClkEditObj=nAns!=Q_NO;
}
int LevelLine()
{
int nAns=YesNoQuestion(_T("\n是否隐去层间线"), !DocGetLevelLine());
if(nAns==RTCAN)
return RTNORM;
DocSetLevelLine(nAns==Q_NO);
return RTNORM;
}
TARCH_IMPEXP const TCHAR * GetRegLocation()
{
return (const TCHAR *)g_szRegLoc;
}
TARCH_IMPEXP int GetCustomFlag()
{
return g_nCustomFlag;
}
// Command:
void CurPScale()
{
double nHeight=DocGetPScale();
if(GetReal(_T("\n当前比例"), nHeight, RSG_NONEG|RSG_NOZERO)==RTNORM) {
if(DocSetPScale(nHeight))
xg_setvar(_T("HPSCALE"), nHeight);
}
DocStatus();
}
int SpaceSwitch()
{
PickSet ssSpaces(SS_FREE);
RBList spaceMask(RTDXF0, _T("ATS_SPACE"), NULL);
ssSpaces.Get(_T("X"), NULL, NULL, spaceMask);
int nSpFlag=DocGetSpaceDispMode();
if(nSpFlag&SPF_CODE) {
nSpFlag &= ~SPF_CODE;
} else {
nSpFlag |= SPF_CODE;
}
DocSetSpaceDispMode(nSpFlag);
UpdateGraphic(ssSpaces);
return RTNORM;
}
int IsAcad2002sc()
{
extern double g_nAcadVer;
// sg modify 120228,自R19平台起,API进行了调整,下面的函数作废了
//const TCHAR *pszRegAcad=acrxProductKey();
const TCHAR *pszRegAcad=NULL;
#if (ADS > 18)
pszRegAcad = acdbHostApplicationServices()->getMachineRegistryProductRootKey();
#else
pszRegAcad = acrxProductKey();
#endif
ASSERT(pszRegAcad);
XString sRegAcad, sReg1, sReg2;
sRegAcad=pszRegAcad;
BOOL bCont=FALSE;;
int nCount=sRegAcad.Length();
for(int n=nCount-1; n>=0; n--) {
if(sRegAcad[n]==_T('\\')) {
if(n==nCount-1)
return RTERROR;
StrCpy(sReg1, sRegAcad, &sRegAcad[n]);
StrCpy(sReg2, &sRegAcad[n+1], NULL);
bCont=TRUE;
break;
}
}
if(!bCont)
return RTERROR;
CString csLangAbbrev;
CRegProperty regProp(sReg1, sReg2);
regProp.SetTopRootKey(HKEY_LOCAL_MACHINE);
regProp.GetValue(_T("LangAbbrev"), csLangAbbrev);
if(_tcsicmp(csLangAbbrev, _T("chs"))==0 && fabs(TchGeLib::g_nAcadVer-15.06)<1.0E-6)
ads_rett();
else
ads_retnil();
return RTNORM;
}
// sg add 091222,增加一个版本信息的命令,主要考虑知道插件的版本信息
void TPlugBbxx()
{
XString sTchIni;
if (!FindFile(_T("tch.ini"), sTchIni))
{
acutPrintf(_T("找不到上华配置文件,无法获取版本信息! "));
return;
}
// 获得标题
CString sTittle;
GetPrivateProfileString(_T("Product"), _T("Title"), _T("TPlugIn8.0"),
sTittle.GetBuffer(MAX_PATH), MAX_PATH, sTchIni);
sTittle.ReleaseBuffer();
// 获得版本信息
CString sSubVer;
GetPrivateProfileString(_T("Product"), _T("SubVer"), _T("Build091225"),
sSubVer.GetBuffer(MAX_PATH), MAX_PATH, sTchIni);
sSubVer.ReleaseBuffer();
// 对版本信息进行组合
CString sResult;
sResult = sTittle + _T(" ") + sSubVer;
// 输出
acutPrintf(sResult);
}
//监控系统消息类 和 选择集类声明
int THookMsg::s_iValue = -1;
THookMsg::THookMsg()
{
acedRegisterFilterWinMsg(ListenMsg);
}
THookMsg::~THookMsg()
{
acedRemoveFilterWinMsg(ListenMsg);
}
int THookMsg::GetValue()
{
int iRe = s_iValue;
s_iValue = -1;
return iRe;
}
#if ADS > 22
bool THookMsg::ListenMsg(MSG* pMsg)
#else
BOOL THookMsg::ListenMsg(MSG* pMsg)
#endif
{
switch (pMsg->message)
{
case WM_RBUTTONDOWN:
{
s_iValue = 1;
}
break;
case WM_LBUTTONDOWN:
{
s_iValue = 0;
}
break;
case WM_KEYDOWN:
{
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_SPACE)
{
s_iValue = 2;
}
else if (pMsg->wParam == VK_ESCAPE)
{
s_iValue = 3;
}
}
break;
default:
break;
}
return(false);//消息继续传递下去
}