找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?在线3D打印服务,一键上传,自动报价 
查看: 39213|回复: 60
打印 上一主题 下一主题

【日积月累】:初学者必看!!!

[复制链接]
跳转到指定楼层
1
发表于 2002-10-23 21:45:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
为了减少初学者的弯路,希望在这个论坛提问时,先看看这些是不是你所需要的答案
问题一:如何加载一种自己定义的线,并把它变成线型            自己定义线型需要在aCAD.lin文件中添加定义,具体语法格式不是很复杂,可以查查手册之类的书,一般举一反三就能掌握。acad.lin是纯文本文件可以用记事本(如Windows记事本)编辑。
  
问题二如何将AutoCad图形转换成光栅图
             众所周知矢量图和光栅图各有优点,将两者结合起来取长补短乃是上上之策。AutoCad所绘制的图形是矢量图,在使用中也有一些缺点。例如:所绘制的图形颜色比较少,没有退晕等色彩变化,如果将它转换成光栅图,在Photoshop等软件中稍加修饰,其画面效果便大为增强,在方案竞选中更容易获胜。又如:用投影仪向大家介绍设计方案时,AutoCad在几个文件中切换速度非常慢,有时会缺少字体文件,令人十分尴尬。类似的问题还有许多,我们发现将AutoCad图形转换成光栅图可以很好的解决这些问题。下面以AutoCad R14为例,简述如下:  
  
---- 如果只需精度较低的光栅文件,只需在AutoCad中打开需要的图,单击菜单Tools→Display Image→Save ...,将需要的图储存为BMP图象即可,但通常这样生成的图精度太低。  
  
---- 如果需要精度较高的光栅文件,首先配置光栅文件打印机,启动AutoCAD R14,选择下位菜单Tools(工具)-&gtreferences...(系统配置...),屏幕出现系统配置话框,在对话框中选择Printer(打印机),然后选择右边的New...(新建N...),此时会出现添加打印机对话框,在该对话框中选择 Raster file export ADI 4.3 - by Autodesk, Inc 为可用打印机驱动程序,确定后会出现可供选择的支持模式,为了得到高质量的光栅文件,应该选择<11>,回车后会出现  
  
---- Enter width in pixels, 16 to 8000 <8000>可选择8000,数字越大光栅文件质量越好) Enter height in pixels, 16 to 8000 <8000>必须保持所选择的width/height的比值同所需转换的图形*.dwg的width/height比值相同)  
  
---- You can export the drawing in any of the following raster file formats. Please select the format you prefer.  
  
---- 1.Microsoft Windows Device-independent Bitmap (.BMP)  
---- 2.TrueVision TGA Format  
---- 3.Z-Soft PCX Format  
---- 4.TIFF (Tag Image File Format)  
  
---- Enter selection, 1 to 4 < 1 >如果需要真彩光栅文件请选择2.TrueVision TGA Format)  
  
---- 以下按提示回答就可以了。经过以上过程就完成了光栅文件打印机的配置工作,接下来就可以制作光栅文件了。  
  
---- 在Command:命令下键入Plot,在弹出的对话框的左上角选择 Device and Default Selection(设备和缺省选择),然后在选择设备配置中选择你所配的光栅文件打印机名称,以后的操作同制作一般的打印文件过程相同。
  
问题三给AutoCAD 增加超级编辑命令
             ---- AutoCAD在中国有很广泛的用户基础,同时也有很多专业的、业余的开发人员。从R13版本开始,Autodesk 提供了ARX开发工具,面向对象的特性使开发人员如沐春风。有关ARX编程与ADS编程的比较这里不再赘述,此处只讲如何用ARX实现我们所要求的功能,不足之处请指正。  
---- 许多二次开发软件均提供超级编辑命令,如Genius 14、HMCAD 6.0等等。读者或许对这些命令很感兴趣,能不能自己开发类似的功能呢?只要您对C++和ARX编程有一些了解,利用Autodesk提供的ObjectARX SDK软件包(可以到Autodesk网址上免费下载),您能很方便的写出此类程序,虽说不能和专业人员提供的超级编辑命令相媲美,但也能给您带来不少方便。本文利用ObjectARX提供的范例程序(缺省安装ObjectARX SDK后的路径是X:\OBJECTARX\ARXLABS\LAB07)进行简单的修改即可实现我们所要求的功能。以下是采用ObjectARX SDK 2.0,在MSVC 5.0编译环境下测试通过。  
  
---- 首先我们要修改enttemp.h文件:  
  
---- 原文件如下:  
  
class EntTemperature : public AcRxObject
{
public:
ACRX_DECLARE_MEMBERS(EntTemperature);
virtual double reflectedEnergy(AcDbEntity* pEnt) const = 0;
};
将斜体部分修改成如下:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt)  
const = 0;
  
---- 因为我们以后要以EntTemperature作为基类,而且HgyModify函数在继承类中要重写并要求实现动态调用,故此处必须声明为虚拟函数。Virtual关健字即为C++面向对象的重要的特性。  
---- 第二、删除tempapp.def文件中的energy文本。  
  
---- 第三、修改tempapp.cpp文件:  
  
---- 1、 删除CircleTemperature、RigonTemperature及EllipseTemperature类的所有相关内容。  
  
---- 2、 修改原文件中如下的内容:  
  
class DefaultTemperature : public EntTemperature
{
public:
virtual double reflectedEnergy(AcDbEntity* pEnt) const;
};
double DefaultTemperature::reflectedEnergy
(AcDbEntity* pEnt) const
{
ads_printf("\nThis entity has no area, and no reflection.\n");
return -1.0;
}
修改后的内容如下:
class DefaultTemperature : public EntTemperature
{
public:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;
};
  
Adesk::Boolean DefaultTemperature::
HgyModify(AcDbEntity* pEnt) const
{
ads_printf("\nThe entity hasn't defined,  
and nothing to be modified.\n");
return Acad::eOk;
}
为简单起见,我们只对直线和圆定义超级编辑命令,
在此定义有关line和circle类。在tempapp.cpp
文件中增加CircleTemperature和LineTemperature类,
定义如下:
class CircleTemperature : public EntTemperature
{
public:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;
};
  
Adesk::Boolean
CircleTemperature::HgyModify(AcDbEntity* pEnt) const
{
AcDbCircle *pCircle = AcDbCircle::cast(pEnt);
if (!pCircle) {
ads_printf("The entity selected is not a circle\n");
pEnt- >close();
return Acad::eNotImplementedYet;
}
AcGePoint3d p,q;
double r;
p=P_TO_P(pCircle- >center());
  
if (getPoint((double*)(&p), "Center Point: ", p)== RTNORM
&& ads_getdist((double*)(&p), "Blob radius: ", &r) == RTNORM)
{
pCircle- >setCenter(p);
pCircle- >setRadius(r);
pCircle- >close();
}
return Acad::eOk;
}
  
class LineTemperature : public EntTemperature
{
public:
virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;
};
  
Adesk::Boolean
LineTemperature::HgyModify(AcDbEntity* pEnt) const
{
AcDbLine *pLine = AcDbLine::cast(pEnt);
if (!pLine) {
ads_printf("The entity selected is not a line.\n");
pEnt- >close();
return eNotImplementedYet;
}
AcGePoint3d p,q;
p= P_TO_P (pLine- >startPoint());
  
if (getPoint ((double*)(&p), "From Point: ", p)== RTNORM
&& getPoint((double*)(&p), "To point: ", q) == RTNORM)
{
pLine- >setStartPoint(p);
pLine- >setEndPoint(q);
pLine- >close();
}
return Acad::eOk;
}
  
---- 如您所见,HgyModify函数也要完全重写。至此我们对CircleTemperature和LineTemperature的定义已经完成。上面P_TO_P()只是一个点对点赋值,getPoint()是自定义的取点函数。增加全局变量:这样我们在初始化或清除内存过程中可以存取该类。  
LineTemperature *pLineTemp;
CircleTemperature *pCircleTemp;
InitApp()函数中更改部分:
acedRegCmds- >addCommand("TEMPERATURE_APP",  
"MODIFY", "MODIFY",
ACRX_CMD_TRANSPARENT, printEnergy);
更改程序中别的函数中的相应的部分。
注意printEnergy()函数中selectEntity()
函数的第二个参数必须是AcDb::kForWrite;
  
---- 编译后在AutoCAD(如R14)中测试运行,敲入modify后随便选取直线或圆,您就会能体会到超级编辑命令的方便之处。或许您会认为此命令没有什么特别之处,但若您仔细研究lab10子目录中的内容,定义自己的实体如门、窗或机械特征,特别是您自己才会用到的特殊对象,给对象增加此命令,您就会体会到ARX编程的魅力了
  
            
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
2
 楼主| 发表于 2002-10-23 21:49:56 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3
 楼主| 发表于 2002-10-23 21:50:41 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4
 楼主| 发表于 2002-10-23 21:51:21 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5
 楼主| 发表于 2002-10-23 21:53:26 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6
 楼主| 发表于 2002-10-23 21:54:12 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
7
 楼主| 发表于 2002-10-23 21:55:06 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8
 楼主| 发表于 2002-10-23 21:57:36 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9
 楼主| 发表于 2002-10-23 21:58:34 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
10
 楼主| 发表于 2002-10-23 21:59:16 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-5-8 19:50 , Processed in 0.029268 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

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