这里介绍一些常用系统变量有String、double、long、McGePoint3d等类型,其中有部分系统变量是随图纸保存,再次打开时就会读取图纸中的系统变量,有些系统变量不随图纸保存,其作用来控制当前各种状态。
setSysVar function
作用:设置系统变量.支持int,double,LPCTSTR,McGePoint3d,McGePoint2d类型变量。
接口:static Mcad::ErrorStatus setSysVar(LPCTSTR varName, long val,McDbDatabase * pDatabase = NULL);
参数:
名称 | 说明 |
---|---|
varName |
变量名 |
返回值:成功返回Mcad::eOk;
参考例程:
long lWdith = McDb::kLnWt015; MrxDbgUtils::setSysVar(_T("CELWEIGHT"),lWdith);
该函数有种参数类型重载,可以支持int,double,LPCTSTR,McGePoint3d,McGePoint2d类型变量。
COM接口:
_DMxDrawX::SetSysVarDouble
_DMxDrawX::SetSysVarLong
_DMxDrawX::SetSysVarString
SetSysVarLong function
作用:设置long类型的系统变量。
参考例程:
例如: 设置当前绘图颜色为白色,16777215 = 0xFFFFFF,它是RGB三个颜色的组合。
axMxDrawX1.SetSysVarLong("CECOLOR", 16777215);
例如: 设置点样式。
// 设置点样式,为67.,具体的值,可以看autocad帮助 axMxDrawX1.SetSysVarLong("PDMODE", 67); // 设置点大小,0.0表示它随屏幕 axMxDrawX1.SetSysVarDouble("PDSIZE", 0.0); // 重新生成,所有实体。, axMxDrawX1.Regen();
例如: 修改当前线重。
// 修改当前线重,为0.6mm. //可以取如下值: //-1 // -2 // -3 //0 //5 //9 //13 //15 //18 //20 //25 //30 //35 //40 //50 //53 //60 //70 //80 //90 //100 //106 //120 //140 //158 //200 //211 axMxDrawX1.SetSysVarLong("CELWEIGHT", 60); // 设置显示线重. axMxDrawX1.Cal("Mx_ShowWeight");
getSysVar function
作用:得到系统变量.支持int,double,LPCTSTR,McGePoint3d,McGePoint2d类型变量。
接口:static Mcad::ErrorStatus getSysVar(LPCTSTR varName, long & val, McDbDatabase * pDatabase = NULL);
参数:
名称 | 说明 |
---|---|
varName | 变量名 |
返回值:成功返回Mcad::eOk;
参考例程:
long lShow = 0; MrxDbgUtils::getSysVar(_T("LWDISPLAY"),lShow); m_isShow = (lShow != 0);
COM接口:
_DMxDrawX::GetSysVarDouble
_DMxDrawX::GetSysVarLong
_DMxDrawX::GetSysVarString
主要用到函数说明:
_DMxDrawX::GetSysVarString
得到一个字符串类型的系统变量。
js中使用如下:
var pRet = mxOcx.Call("GetSysVar","ORTHOMODE"); if(pRet != null) { var iOrthoMode = pRet.AtLong(1); alert(iOrthoMode); }
c#中使用如下:
// C# 取当前图层 String s = ""; axMxDrawX1.GetSysVarString("CLAYER", ref s); MessageBox.Show(s);
栅格设置
系统变量名:GRIDMODE
打开与关闭栅格捕捉:
打开栅格捕捉: axMxDrawX1.SetSysVarLong("GRIDMODE", 1); 关闭栅格捕捉: axMxDrawX1.SetSysVarLong("GRIDMODE", 0);
栅格间距系统变量名:SNAPUNIT
设置栅格间距为500,500如下:
MxDrawPoint ptSNAPUNIT = new MxDrawPoint(); ptSNAPUNIT.x = 500; ptSNAPUNIT.y = 500; param.AddString("SNAPUNIT"); param.AddPointEx(ptSNAPUNIT,5002); axMxDrawX1.CallEx("Mx_SetSysVar", param);
图层和线型设置
主要用到函数说明:
MxDrawXCustomFunction::Mx_SetSysVar
得到当前空间的所有实体。详细说明如下:
参数 | 说明 |
---|---|
CString sVarName | 系统变量名 |
Value | 需要设置的值 |
设置图层使用如下:
Dim param As MxDrawResbuf Set param = New MxDrawResbuf param.AddString "CLAYER" param.AddString "图层1", 5005 ' 5005 = RTSTR,代码是一个字符串类型的值 MxDrawX1.CallEx "Mx_SetSysVar", param
js创建图层,并设置成当前层代码如下:
function CreateCommentLayer() { var mxOcx = document.getElementById("MxDrawXCtrl"); mxOcx.AddLayer("MyComment"); mxOcx.LayerName = "MyComment"; var param = mxOcx.NewResbuf(); param.AddString("CLAYER"); param.AddStringEx("MyComment",5005); mxOcx.CallEx("Mx_SetSysVar", param); }
设置线型使用如下:
Dim param As MxDrawResbuf Set param = New MxDrawResbuf param.AddString "CELTYPE" param.AddString "DOT", 5005 ' 5005 = RTSTR,代码是一个字符串类型的值 MxDrawX1.CallEx "Mx_SetSysVar", param
正交设置
系统变量名:ORTHOMODE
启用正交:
axMxDrawX1.SetSysVarLong("ORTHOMODE", 1);
正交模式打开后,需要参考上一次的输入点,一般控件会自动确定,也可以用户自己指定,指定系统变量名:LASTPOINT。
设置上一次用户输入点(C++)语言:
resbuf rb; rb.restype = RTPOINT; rb.resval.rpoint[X]= prvPoint.x; rb.resval.rpoint[Y]= prvPoint.y; rb.resval.rpoint[Z]= prvPoint.z; Mx::mcedSetVar(_T("LASTPOINT"),&rb);
极轴设置
调用自定义函数Mx_SetPoloarTracee实现,如下,VC2005代码:
IDispatchPtr spRet1(m_ocx.CallLongParam1(_T("Mx_SetPoloarTracee"),1),false);
另外它是系统变量:AUTOSNAP的第4个二制位控制,打开极轴(C#代码):
int iRet = 0; axMxDrawX1.GetSysVarLong("AUTOSNAP",ref iRet); iRet |= 8; axMxDrawX1.SetSysVarLong("AUTOSNAP",iRet);
对象捕捉
系统变量名:OSMODE
去掉最近点捕捉标志(C++代码):
MrxDbgRbList spVal = Mx::mcutNewRb(RTSHORT); Mx::mcedGetVar(_T("OSMODE"),spVal.data()); // 最近点捕足的值为512,进行位运算,去掉最近点捕捉标志 int iNewMode = spVal.data()->resval.rint & (~512); // 设置新值 spVal.data()->resval.rint = iNewMode; Mx::mcedSetVar(_T("OSMODE"),spVal.data() );
关闭捕捉(C#代码):
axMxDrawX1.SetSysVarLong("OSMODE", 0);
对象追踪
系统变量名:DYNTRACE
禁用动态追踪(C++代码):
MrxDbgUtils::setSysVar(_T("DYNTRACE"),0);
禁用动态追踪(C#代码):
axMxDrawX1.SetSysVarLong("DYNTRACE", 0);
系统变量名:DYNINPUT
禁用动态输入(C++代码):
MrxDbgUtils::setSysVar(_T("DYNINPUT"),0);
禁用动态输入(C#代码):
axMxDrawX1.SetSysVarLong("DYNINPUT", 0);
系统变量名:LWDISPLAY
显示线重(C#代码):
调用自定义函数Mx_ShowWeight实现(C#代码):
mxOcx.Cal("Mx_ShowWeight");
不显示线重(C#代码):
axDrawX.CallLongParam1("Mx_ShowWeight", 0);