几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(C++)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-14, 03:32 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】arx初学请教如何设置osmode变量

arx初学请教如何设置osmode变量
arx初学请教如何设置osmode变量
我写的
static void baotest1test(void)
{
// add your code for command baotest1.test here
struct resbuf cmd, os, os1 , os2;
ads_real radius , dist;
ads_point pt1 , pt2 , pt3 ;
//acedgetvar("osmode", & os);
cmd.restype = rtreal;
cmd.resval.rreal = 0;
os.restype = rtreal;
os.resval.rreal = 0;
acedsetvar("cmdecho", &cmd);//(setvar "cmdecho" 0)
//acaderrorstatustext;
acedgetvar("osmode", &os1);
os.resval.rreal = os1.resval.rreal + 16384;
acedsetvar("osmode", &os);//(setvar "osmode" 0)
acedcommand(rtstr , "undo" , rtstr , "_group" , 0);//(vl-cmdf "_.undo" "_group")
acedgetpoint(null , "\nget center point :" , pt1);
acedgetdist(null ,"\n请输入圆的半径啦靓仔:", &radius);
acedgetdist(null ,"\n请输入圆的的圆心距:", &dist);
acutpolar(pt1 , 0 , dist , pt2);
acutpolar(pt1 , 3.14159 , dist , pt3);
acedcommand(rtstr , "circle" , rt3dpoint , pt1 , rtreal, radius , 0);
acedcommand(rtstr , "circle" , rt3dpoint , pt2 , rtreal, radius , 0);
acedcommand(rtstr , "circle" , rt3dpoint , pt3 , rtreal, radius , 0);
acedsetvar("osmode", &os1);
acedcommand(rtstr , "undo" , rtstr , "_end" , 0);
//acutprintf(&os);
acutprintf("\n可以画圆的arx写成功了! 呵呵,加油!!!");
}
// ----- ads_setdefun001 symbol (do not rename)
大家好! 我是用lisp转到想用arx的初级用户.
现在上面这个小小学习用的测试程序我在编写时为了保证可以成功运行, 要把捕捉osmode变量设为关, 在lisp的做法是把当前osmode变量加上16384就相当关了捕捉, 可是arx的编写要转换好多 东东, 我在书本本上找不到, 又不好意思发问, 我闷找书找的一个月找不到(vc++ 基础不好的原因)
还望大家在百忙中指点指点这几句怎么写才对
acedgetvar("osmode", &os1);
os.resval.rreal = os1.resval.rreal + 16384;
acedsetvar("osmode", &os);//(setvar "osmode" 0)
谢谢!!!!!
bdycad
struct resbuf rb1,rb2;
ads_getvar("osmode",&rb1);
rb2.restype=rtshort; //设置系统变量数据类型
rb2.resval.rint=(short)16438; //系统变量的新值.
ads_setvar("osmode",&rb2); //设置新值.
二楼的程序行中缺少类型的设置.类型的设置也是错误的.
另外,用autolisp转arx时,除数学运算、字符运算、文件操作、表处理外。其余函数基本是autolisp函数加前缀ads_构成。
以aced前缀构成的arx库函数与其大部分是等价的。

这是修改系统变量的标准过程.

【送花】送上鲜花一朵 鲜花+1 [bdycad |
谢谢楼上朋友,我试一下, 可以了,真开心. 呵呵!!
三楼朋友下午好! 再请教一下
struct resbuf cmd, os, os1 , os2 ;
ads_getvar("osmode",&os1);
os2.restype=rtshort;//设置系统变量数据类型
os2.resval.rint= (short)16438;//系统变量的新值.
ads_setvar("osmode",&os2); //设置新值.
这样只把osmode变量设为 16438, 而我是想把osmode的变量设成 os1+os2的值, 不知怎么办?
老朋友了,送你几个函数
/////////////////////////////////////////////////////////////////////////////
//////////////////////////// global getvar functions ////////////////////////
/////////////////////////////////////////////////////////////////////////////
/****************************************************************************
**
** getsysvar (int)
**
** **jma
**
*************************************/
acad::errorstatus
getsysvar(lpctstr varname, int& val)
{
resbuf rb;
if (acedgetvar(varname, &rb)== rtnorm) {
assert(rb.restype == rtshort);
val = rb.resval.rint;
return(acad::eok);
}
else
return(acad::einvalidinput);
}
/****************************************************************************
**
** getsysvar (double)
**
** **jma
**
*************************************/
acad::errorstatus
getsysvar(lpctstr varname, double& val)
{
resbuf rb;
if (acedgetvar(varname, &rb) == rtnorm) {
assert(rb.restype == rtreal);
val = rb.resval.rreal;
return(acad::eok);
}
else
return(acad::einvalidinput);
}
/****************************************************************************
**
** getsysvar (string)
**
** **jma
**
*************************************/
acad::errorstatus
getsysvar(lpctstr varname, cstring& val)
{
resbuf rb;
if (acedgetvar(varname, &rb) == rtnorm) {
assert(rb.restype == rtstr);
val = rb.resval.rstring;
free(rb.resval.rstring);
return(acad::eok);
}
else
return(acad::einvalidinput);
}
/****************************************************************************
**
** getsysvar (2d point)
**
** **jma
**
*************************************/
acad::errorstatus
getsysvar(lpctstr varname, acgepoint2d& val)
{
resbuf rb;
if (acedgetvar(varname, &rb) == rtnorm) {
assert(rb.restype == rtpoint);
val.set(rb.resval.rpoint[x], rb.resval.rpoint[y]);
return(acad::eok);
}
else
return(acad::einvalidinput);
}
/****************************************************************************
**
** getsysvar (3d point)
**
** **jma
**
*************************************/
acad::errorstatus
getsysvar(lpctstr varname, acgepoint3d& val)
{
resbuf rb;
if (acedgetvar(varname, &rb) == rtnorm) {
assert(rb.restype == rt3dpoint);
val.set(rb.resval.rpoint[x], rb.resval.rpoint[y], rb.resval.rpoint[z]);
return(acad::eok);
}
else
return(acad::einvalidinput);
}
/////////////////////////////////////////////////////////////////////////////
//////////////////////////// global setvar functions ////////////////////////
/////////////////////////////////////////////////////////////////////////////
/****************************************************************************
**
** setsysvar(int)
**
** **jma
**
*************************************/
acad::errorstatus
setsysvar(lpctstr varname, int val)
{
assert(varname != null);
resbuf rb;
rb.restype = rtshort;
rb.resval.rint = val;
return(sdsysvarstack::setvar(varname, &rb));
}
/****************************************************************************
**
** setsysvar (double)
**
** **jma
**
*************************************/
acad::errorstatus
setsysvar(lpctstr varname, double val)
{
assert(varname != null);
resbuf rb;
rb.restype = rtreal;
rb.resval.rreal = val;
return(sdsysvarstack::setvar(varname, &rb));
}
/****************************************************************************
**
** setsysvar (string)
**
** **jma
**
*************************************/
acad::errorstatus
setsysvar(lpctstr varname, const char* val)
{
assert(varname != null);
resbuf rb;
rb.restype = rtstr;
rb.resval.rstring = const_cast<char*>(val);
return(sdsysvarstack::setvar(varname, &rb));
}
/****************************************************************************
**
** setsysvar (3d point)
**
** **jma
**
*************************************/
acad::errorstatus
setsysvar(lpctstr varname, const acgepoint3d& val)
{
assert(varname != null);
resbuf rb;
rb.restype = rt3dpoint;
copyadspt(rb.resval.rpoint, asdblarray(val));
return(sdsysvarstack::setvar(varname, &rb));
}
/****************************************************************************
**
** setsysvar (2d point)
**
** **jma
**
*************************************/
acad::errorstatus
setsysvar(lpctstr varname, const acgepoint2d& val)
{
assert(varname != null);
resbuf rb;
rb.restype = rtpoint;
copyadspt(rb.resval.rpoint, asdblarray(val));
return(sdsysvarstack::setvar(varname, &rb));
}
【送花】送上鲜花一朵 鲜花+1 [bdycad |
使用示例
setsysvar("limcheck", 1);
setsysvar("limmax", acgepoint2d(worklength,0));
setsysvar("limmin", acgepoint2d(0,0 - workwidth));
setsysvar("isavebak", 0);
具体要设置全局变量,请查阅《autocad
回答5楼:
" 这样只把osmode变量设为 16438, 而我是想把osmode的变量设成 os1+os2的值, 不知怎么办?"
struct resbuf 0s1,0s2;
ads_getvar("osmode",&os1);
os2.restype=rtshort;
os2.resval.rint=(short)(os1.resval.rint | 14638);
ads_setvar("osmode",&os2);
上行用位操作而不用加操作的原因是加法操作可能引起进位,影响下位的设置.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 04:19 PM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多