明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2626|回复: 0

ARX格式化输出

[复制链接]
发表于 2004-8-24 20:49:00 | 显示全部楼层 |阅读模式
ARX中使用与C中printf函数类似的acedPrintf函数,向ACAD文本窗口输出数据,这种数据输出方式无法在编译时检测到数据的正确性,也无法扩展数据结构输出包括ARX定义的数据结构。格式化输出就是使用类似于C++标准中的方式:
Cout << “文字” << number << endl;
来向ACAD文本窗口数据数据.
1)扩展标准对象
在C++标准对象strstreambuf基础上建立数据缓存对象:
class cadstreambuf : public strstreambuf
{
public:
//……
};
缓存对象中保存需要向ACAD文本窗口的数据,对象构析或者更新时,将缓存中的数据用acedPrintf函数输出到ACAD文本窗口中. 标准的sync函数实现实际的数据输出.
virtual int sync();
virtual ~cadstreambuf()
{
sync();
strstreambuf::~strstreambuf();
}
包含缓存对象的实际输出流对象:
class ocadstream : public ostream
{
private:
cadstreambuf sb_;
public:
ocadstream() : ostream(&sb_){}
};
这样就可以与C++标准相同的方式向ACAD数据文本格式的数据了:
ocadstream os;
os << “输出距离:” << 1000.0 << endl;
控制符号同样可以使用:
os << setwid(10) << 500.4 << setwid(15) << setfill(“*”) << 300.0 << endl;
2)数据格式输出
ARX中有一些常用的数据需要输出,如AcGePoint3d, AcDbObjectIdd等,可以扩展这种数据输出:
ostream& operator << (ostream& s, AcDbObjectId & x)
{
return s << "AcDbObjectId:" << x.asOldId();
}
ostream& operator << (ostream& s, AcGePoint3d & x)
{
return s << "(" << x.x << "," << x.y << "," << x.z << ")";
}
一旦完成数据类型的输出重载,数据的输出就非常简单了,比如:
os << “点的坐标是:” << AcGePoint3d(1000,1000,0) << endl;
这种扩展可以针对任意的数据类型,ARX定义的或者用户定义的,也可以定义:
ostream& operator << (ostream& s, AcDbEntity* x)
{
x->list();
return s;
}
输出AcDbEntity对象时,自动调用对象的list方法.
3)控制输出
ARX有是需要根据内部的系统变量来控制数据的输出格式,典型的是函数:
int acdbRToS(ads_real val,int unit,int prec,char * str);
unit为实数的输出格式,由系统变量LUNITS决定.prec为数据的输出精度,由LUPREC系统变量决定.可以定义对象:
class rtos{
private:
//…..
public:
rtos(double r);
char* str() const;
};
构造对象时调用acdbRtoS将r转换为对应的字符串,调用str获得.
ostream& operator << (ostream& s, const rtos& x)
{
return s<< x.str();
}
这样就可以简单的使用当前的系统变量来输出数据了:
os << rtos(100.0) << endl;

评分

参与人数 1金钱 +10 贡献 +5 激情 +5 收起 理由
easypower + 10 + 5 + 5 【精华】专题管理

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 08:38 , Processed in 0.162822 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表