高分请教用VC如何实现类似于AutoCAD中命令的功能, up有分!!! 在AutoCAD中不仅可以用鼠标画图,还可以通过键盘输入命令、参数来画图,请问这些命令是如何处理和实现的?怎样得到参数?怎样把参数传给画图函数?------在线等待 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用VC和ARX对AUTOCAD进行二次开发,现在CAD时常已经很规范,你很难开发一套系统超过AUTOCAD 用VC和objARX对AutoCAD进行二次开发,同意xc(xc) 只是一个方法的问题,当用命令的话,如:MyLineTO 11,11;这个命令就是你自己定义的,你可以自己去解析,把它变成一个执行的命令,如你可以先取出MyLineTo,你在判断是画线,还是画园,这又你在程序中来定,。。关键是对执行命令的解析问题。 如果不是在AutoCAD中进行二次开发可以将所有的键盘消息捕捉,然后具体进行消息处理。 int ParseCommand(LPCTSTR lpCmd){ if(lpCmd==NULL) return ERROR_CMD_EMPTY; char szCmd[MAX_CMDSIZE]={0}; strncpy(szCmd,lpCmd); FormatCmd(szCmd);//格式化命令字符串,去掉多余的空格,TAB, //同时变成小写 if(szCmd[0]==0) return ERROR_CMD_EMPTY; char* pCmdLine=szCmd; int nRet=ERROR_CMD_INVOLID; if(strstr(pCmdLine,"lineto ")==pCmdLine) { pCmdLine+=strlen("lineto ");//取参数 nRet=LineTo(pCmdLine); } else if(strstr(pCmdLine,"textout ")==pCmdLine) { pCmdLine+=strlen("textout ");//取参数 nRet=TextOut(pCmdLine); } .... return nRet;} 看你一个人在UP,好辛苦啊!我帮你UP!UPUP AutoCAD用过吗?输入命令如‘l’,可以用鼠标按键画图,也可以通过输入坐标点等参数来画图,坐标点是用空格或逗号分开的。鼠标和键盘操作可以交互使用,效果类似。哎呀,到底怎么做呀??? 我不同意 xc(xc) 和 bufferly(缓冲器) 的说法,autocad虽然做得很好,但他也有它的致命伤,例如由于它的内核不公开,企业和erp做集成就很麻烦了,还有他的兼容性做得好,但有的企业有保密的需求却没法满足。还有它的价格也太贵了,中有多少企业能买得起正版呢?还有很多问题,这里没法一一表述。我觉得现在开发一套二维的cad软件,只要切合企业的需求,应该很有市场的。 使用键盘和鼠标控制画图其实就是捕捉键盘鼠标消息,然后自己解析绘图如果有兴趣,可以看看OpenGL的书,如清华有本《OpenGL编程指南》,作图很方便,2D+3D……附盘 本人就是用VC+ObjectARX做AutoCAD的二次开发,当然其内部机理也多少研究了一些,原理很简单,就是Windows的消息机制.你用VC的工具Spy++跟踪以下,就会发现AutoCAD会有两个进程!在主进程里,即AutoCAD的主窗口有不同的窗口(线程),以响应不同的事件.至于如何处理这些消息,事件就是你的事了.比如:在命令行里输入"L "(画线),可以在命令行里输入第一点坐标,在绘图区用鼠标确定第二点! 呵呵!最好站在别人的肩膀上做事!别抛开ACAD,这样得不偿失!建议用AutoListp语言,进行二次开发,这样你可以写出个性的CAD来! 听说用AutoListp语言进行二次开发,可以提高一个人的水平。 其实AutoCAD还是有很多可以改进的地方! 建议使用ARX开发.稳定,速度快,但需要较高的C根基 caxa电子图板,一个很好的例子。至于命令解释,看编译原理里的句法分析,自己做一个分析器(其实我感觉做这个甚至还没有做计算器的句法分析难)。当然工作量是很大的。具体的我也没做过。 nod. CAD里命令解析很简单的。只是一条一条去做就是了。我们的CAD产品这部分实现的方式大概是这样的:把所有的命令每个做一个交互类。每个交互类负责管理该命令过程中的交互处理。有一个全局的命令Controller,维护一个交互对象堆栈;从键盘、鼠标等处把Windows消息搜集过来,首先看是否是一个交互命令,如果是,产生新的交互对象并压栈;否则,简单地把消息传递给交互对象进行处理。 代码异常的很。。。。 一个用VC++编写的局域网聊天室 视频教程! 还有人吗?我这里出现怪异问题了? 98资源耗尽问题 共享一个矢量图设计文档,高兴散分100 操作文件的问题 开发一简单机器人的控制程序!有谁会啊!可以加分啊!完整的程序更好!大概的思路也行! 编译设置的问题 请指教,关于CFileDialog的问题 如何在vc中调用vb控件???请大家详细一点,谢谢!!! 工具栏的问题,一定有人知道。如果不是那么简单可再加分。 菜鸟问题!对话框标题栏怎么在程序中修改?
开发一套系统超过AUTOCAD
你自己定义的,你可以自己去解析,把它变成一个执行的命令,如你可以先取出
MyLineTo,你在判断是画线,还是画园,这又你在程序中来定,。。关键是对
执行命令的解析问题。
可以将所有的键盘消息捕捉,然后具体进行消息处理。
{
if(lpCmd==NULL) return ERROR_CMD_EMPTY;
char szCmd[MAX_CMDSIZE]={0};
strncpy(szCmd,lpCmd);
FormatCmd(szCmd);//格式化命令字符串,去掉多余的空格,TAB,
//同时变成小写
if(szCmd[0]==0) return ERROR_CMD_EMPTY; char* pCmdLine=szCmd;
int nRet=ERROR_CMD_INVOLID;
if(strstr(pCmdLine,"lineto ")==pCmdLine)
{
pCmdLine+=strlen("lineto ");//取参数
nRet=LineTo(pCmdLine);
}
else if(strstr(pCmdLine,"textout ")==pCmdLine)
{
pCmdLine+=strlen("textout ");//取参数
nRet=TextOut(pCmdLine);
}
....
return nRet;
}
我帮你UP!
UP
UP
如果有兴趣,可以看看OpenGL的书,如清华有本《OpenGL编程指南》,作图很方便,2D+3D……附盘
我们的CAD产品这部分实现的方式大概是这样的:把所有的命令每个做一个交互类。
每个交互类负责管理该命令过程中的交互处理。
有一个全局的命令Controller,维护一个交互对象堆栈;从键盘、鼠标等处把Windows消息搜集过来,首先看是否是一个交互命令,如果是,产生新的交互对象并压栈;否则,简单地把消息传递给交互对象进行处理。