明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 面不好吃

C/C++语言直接驱动AutoCAD自动绘图技术应用,非ARX/VBA/LISP技术

  [复制链接]
 楼主| 发表于 2012-11-30 09:29:33 | 显示全部楼层
梦回唐朝 发表于 2012-11-29 19:54
不错,做个演示就更好啦

压缩包中Demo目录下ScrCadDrawing_vc2005.rar就是一个完整的演示工程实例,只要先熟悉一下,然后修修改改就能拿来直接用
发表于 2012-11-30 09:32:37 | 显示全部楼层
听上去,好像很牛的样子。。
发表于 2012-11-30 17:03:05 | 显示全部楼层
软件已经下载了,但是不知道怎么使用,写个说明就好了。
 楼主| 发表于 2012-11-30 17:33:48 | 显示全部楼层
现在传一个最基本的应用操作过程:
我门要绘制如下图所示范的图形
图3
1.首先是创建一个应用程序,这里我们选择mfc对话框类型的应用程序做为示例;
图1:
图2
2.做界面
图4
3.给各个edit控件添加变量:
图5
4.添加绘图功能函数
图六
5.将压缩包中的scrlib目录复制到工程目录下
图7
6.将倒入库scrlib.lib放置到工程目录lib下
图8
7.将scr驱动库scrlib.dll与应用程序放置到同一个目录下
图9

9.编译并运行一次程序;
10.添加一个专门用来画图的类MyDwgDraw,在类的头文件内添加代码如图示:
在工程中倒入scrlib.lib库,扩充继承,修改构造函数.
图11
,12

11.修改构造函数MyDwgDraw()为MyDwgDraw(TCHAR workPath[_MAX_PATH]);
具体样子:
MyDwgDraw::MyDwgDraw(TCHAR workPath[_MAX_PATH])
:DwgDraw(workPath),dimSet(this)
{

}

12.MyDwgDraw类添加公有绘图函数:
void Drawing(bool bShow=false);  //生成二维产品图

13.在void CScrlibDlg::OnOK()中实例化一个MyDwgDraw类;
(当然你首先要在头部包含头文件#include "MyDwgDraw.h")
void CScrlibDlg::OnOK()
{
        // TODO: Add extra validation here
        MyDwgDraw mydwg("C:\\work");//这个目录你要自己创建了,最好先不要先不要用中文目录.
       //把程序界面上的数据传到MyDwgDraw类中去
        mydwg.Drawing(true);//是否显示图形
       
        CDialog::OnOK();
}

14.现在就可以开始正式绘制图形了,在Drawing()函数中试绘一条直线:

void MyDwgDraw::Drawing(bool bShow)  
{
        AcGePoint3d ptStart,ptEnd;
        ptStart.set(10,10,0);
        ptEnd.set(52,73,0);
        //绘制直线
        DrawLine(ptStart,    //直线起点坐标
                         ptEnd,      //直线终点坐标
                         "0",        //层,
                         LT_BYLAYER, //线型,
                         CLR_BYLAYER,//颜色,0;随层,1:红色,2:黄色3:绿色,4:青色,5:兰色,6:紫色,7:白色
                         LW_BYLAYER, //线宽
                         true);      //可见性

        //保存图形文件
        char  ACADApplication[]="C:\\Program Files\\AutoCAD 2002\\acad.exe";//此处放置autocad应用程序安装全路径
        char DwgFileName[]="C:\\work\\scrlib应用示例\\dwg\\test.dwg";
        //以下操作会删除现有的dwg文件,需要自己检查是否覆盖现有文件
        saveToDwg(ACADApplication,DwgFileName, bShow); //autocad应用程序的全路径(包括文件名称),要保存的dwg文件名称(路径+文件名+扩展名[.dwg])
}

15.现在编译并运行程序,然后点击"绘dwg图",没有问题的话,你就真正可以用scrlib库开始做开发了;

16.我们现在把界面上图形绘制的代贴出来;
//生成二维图
//
void MyDwgDraw::Drawing(bool bShow)  
{
        AcGePoint3d bPt,pt1,pt2,pt3,pt4;
        bPt.set(100,100,0);
        m_r=5.0;

        //绘制多义线
        AcGePoint3d Vertex[4];
        int i=0;
        for (i=0;i<4;i++)
        {
                Vertex=bPt;
        }
        Vertex[1].x+=m_a;
        Vertex[2].x=Vertex[1].x;
        Vertex[2].y+=m_b;
        Vertex[3].y=Vertex[2].y;
       
        DrawPline(Vertex,          //多义线<AcGePoint3dArray有问题时用该函数>,顶点坐标数组
                          4,               //顶点数组顶点个数
                          1,               //类型,1:多段线,2:曲线拟合,3:二次样条,4:三次样条,
                          true,            //多义线是否闭合,
                          1,               //指定一个可以拾取多义线的点,默认使用第一点,当类型为2/4时必须指定真正能够拾取的点(并且该点上没有其它实体线型)
                          NULL,            //<起点切向点<type为2/4时须要设置>>:未指明时使用第一个点.闭合时的切点也使用该参数指定.
                          NULL,            //<终点切向点<type为2/4时须要设置>>:未指明时使用最后个点.
                          LAYER_0,         //层,
                            LT_BYLAYER,      //线型,
                          CLR_BYLAYER,     //颜色,0;随层,1:红色,2:黄色3:绿色,4:青色,5:兰色,6:紫色,7:白色
                          LW_BYLAYER,      //线宽
                          true);           //可见性

        //标注a
        pt1=Vertex[0];
        pt1.y-=10;
        KHAlignedDim(Vertex[0],Vertex[1],   //标注界线第1点,第2点,
                                 pt1,                   //尺寸线位置点,尺寸文字,
                                 "",                    //标注样式,未指明之时,采用当前cad中当前设置的标注样式(具有不确定性)
                                 "0",                   //标注层
                                 "",                    //尺寸文字,(未指明之时则标注Pt1和Pt2的实测值)
                                 0);                    //文字旋转角度(弧度)

        int row=2,col=3;
        Vertex[0].x+=m_e;
        Vertex[0].y=Vertex[3].y-m_d;
        Vertex[1].x=Vertex[0].x;
        Vertex[1].y=Vertex[0].y-m_c;
        for (i=0;i<row;i++)
        {
                pt1=Vertex;
                for (int j=0;j<col;j++)
                {
                        pt2=pt1;
                        pt2.x +=j*m_f;
                        DrawCircle(pt2,           //圆心坐标
                                                m_r,          //半径
                                                LAYER_0,      //层,
                                                LT_BYLAYER,   //线型,
                                                CLR_BYLAYER,  //颜色,0;随层,1:红色,2:黄色3:绿色,4:青色,5:兰色,6:紫色,7:白色
                                                LW_BYLAYER,   //线宽
                                                true);        //可见性

                }
        }


        //保存图形文件
        char  ACADApplication[]="C:\\Program Files\\AutoCAD 2002\\acad.exe";//此处放置autocad应用程序安装全路径
        char DwgFileName[]="C:\\work\\scrlib应用示例\\dwg\\test.dwg";
        //以下操作会删除现有的dwg文件,需要自己检查是否覆盖现有文件
        saveToDwg(ACADApplication,DwgFileName, bShow); //autocad应用程序的全路径(包括文件名称),要保存的dwg文件名称(路径+文件名+扩展名[.dwg])
}
17.更强大的应用去参考demo中的例子;研发经费赞助电话13517605601;哈哈...

本帖子中包含更多资源

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

x
 楼主| 发表于 2012-11-30 17:39:58 | 显示全部楼层
hhh454 发表于 2012-11-30 17:03
软件已经下载了,但是不知道怎么使用,写个说明就好了。

详细的说明大家可以先看看,头文件里头的注释。开发文档正在制作,大家耐心等待,
发表于 2012-11-30 20:13:26 | 显示全部楼层
顶一顶vvvvvv
发表于 2012-11-30 23:00:38 | 显示全部楼层
哈哈,看起来比编程还困难
发表于 2012-12-1 07:56:13 | 显示全部楼层
         山寨函数,这样开发太过于依耐LZ的这个函数库了,个人觉得这样还的花时间去理解LZ的每一个函数的用法,这样和自己写通用函数有什么区别...
 楼主| 发表于 2012-12-1 13:50:40 | 显示全部楼层
本帖最后由 面不好吃 于 2012-12-1 14:24 编辑
chpmould 发表于 2012-12-1 07:56
山寨函数,这样开发太过于依耐LZ的这个函数库了,个人觉得这样还的花时间去理解LZ的每一个函数的用法 ...

首先我要纠正一下你的说法,“山寨”从何说起,现在在网上除了我提供这样的东西,还有第二家吗!
ARX是与cad共享内存的且庞大;VBA是微软的;LISP你能做大规模地做企业级应用吗?这些那个又少去了依赖?当然,只要你做的东西好,你自己写函数也很好啊。我们的东西呢,其实不是你想象的那样的,简单得只有三个类,即使你不用其他的扩充功能,只要熟悉了这三个类,小规模的参数设计软件完全够用;扩充部分的只是我们开发的一个面向机械设计专用的扩展模块;比如你只要掌握扩展库里的法兰类,机械设计类的参数设计软件做得就很轻松简单;螺钉螺栓那些类,拿来用就行,每个函数的参数都有中文说明,就像小学生做填空题一样简单。。。呵呵
发表于 2012-12-2 17:40:00 | 显示全部楼层
有这么好么,下来学习一一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 09:58 , Processed in 0.166191 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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