Files
envi-code/SourceCode/Code2026/tg_shs/shs_kernal/global.cpp
T
2026-09-28 15:28:50 +08:00

1460 lines
46 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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);//消息继续传递下去
}