梦想CAD控件系统变量说明

时间:2025-02-06 17:08:08

这里介绍一些常用系统变量有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);