面不好吃 发表于 2012-11-30 09:29:33

梦回唐朝 发表于 2012-11-29 19:54 static/image/common/back.gif
不错,做个演示就更好啦

压缩包中Demo目录下ScrCadDrawing_vc2005.rar就是一个完整的演示工程实例,只要先熟悉一下,然后修修改改就能拿来直接用

背心 发表于 2012-11-30 09:32:37

听上去,好像很牛的样子。。

hhh454 发表于 2012-11-30 17:03:05

软件已经下载了,但是不知道怎么使用,写个说明就好了。

面不好吃 发表于 2012-11-30 17:33:48

现在传一个最基本的应用操作过程:
我门要绘制如下图所示范的图形
attach://71874.jpg图3
1.首先是创建一个应用程序,这里我们选择mfc对话框类型的应用程序做为示例;
attach://71875.JPG图1:
attach://71876.JPG图2
2.做界面
attach://71878.JPG图4
3.给各个edit控件添加变量:
attach://71879.JPG图5
4.添加绘图功能函数
attach://71880.JPG图六
5.将压缩包中的scrlib目录复制到工程目录下
attach://71881.JPG图7
6.将倒入库scrlib.lib放置到工程目录lib下
attach://71882.JPG图8
7.将scr驱动库scrlib.dll与应用程序放置到同一个目录下
attach://71883.JPG图9

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

11.修改构造函数MyDwgDraw()为MyDwgDraw(TCHAR workPath);
具体样子:
MyDwgDraw::MyDwgDraw(TCHAR workPath)
: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);      //可见性

        //保存图形文件
        charACADApplication[]="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;
        int i=0;
        for (i=0;i<4;i++)
        {
                Vertex=bPt;
        }
        Vertex.x+=m_a;
        Vertex.x=Vertex.x;
        Vertex.y+=m_b;
        Vertex.y=Vertex.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;
        pt1.y-=10;
        KHAlignedDim(Vertex,Vertex,   //标注界线第1点,第2点,
                               pt1,                   //尺寸线位置点,尺寸文字,
                               "",                  //标注样式,未指明之时,采用当前cad中当前设置的标注样式(具有不确定性)
                               "0",                   //标注层
                               "",                  //尺寸文字,(未指明之时则标注Pt1和Pt2的实测值)
                               0);                  //文字旋转角度(弧度)

        int row=2,col=3;
        Vertex.x+=m_e;
        Vertex.y=Vertex.y-m_d;
        Vertex.x=Vertex.x;
        Vertex.y=Vertex.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);      //可见性

                }
        }


        //保存图形文件
        charACADApplication[]="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;哈哈...

面不好吃 发表于 2012-11-30 17:39:58

hhh454 发表于 2012-11-30 17:03 static/image/common/back.gif
软件已经下载了,但是不知道怎么使用,写个说明就好了。

详细的说明大家可以先看看,头文件里头的注释。开发文档正在制作,大家耐心等待,

gbhsu 发表于 2012-11-30 20:13:26

顶一顶vvvvvv

zwqgdhl 发表于 2012-11-30 23:00:38

哈哈,看起来比编程还困难

chpmould 发表于 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 static/image/common/back.gif
山寨函数,这样开发太过于依耐LZ的这个函数库了,个人觉得这样还的花时间去理解LZ的每一个函数的用法 ...
首先我要纠正一下你的说法,“山寨”从何说起,现在在网上除了我提供这样的东西,还有第二家吗!
ARX是与cad共享内存的且庞大;VBA是微软的;LISP你能做大规模地做企业级应用吗?这些那个又少去了依赖?当然,只要你做的东西好,你自己写函数也很好啊。我们的东西呢,其实不是你想象的那样的,简单得只有三个类,即使你不用其他的扩充功能,只要熟悉了这三个类,小规模的参数设计软件完全够用;扩充部分的只是我们开发的一个面向机械设计专用的扩展模块;比如你只要掌握扩展库里的法兰类,机械设计类的参数设计软件做得就很轻松简单;螺钉螺栓那些类,拿来用就行,每个函数的参数都有中文说明,就像小学生做填空题一样简单。。。呵呵

kic 发表于 2012-12-2 17:40:00

有这么好么,下来学习一一下
页: 1 2 [3] 4 5 6
查看完整版本: C/C++语言直接驱动AutoCAD自动绘图技术应用,非ARX/VBA/LISP技术