找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 499|回复: 7

[推荐]:直接写dwg文件的函数库

[复制链接]
发表于 2005-3-29 10:45:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
直接写dwg文件的函数库,我试用过,很好
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-29 11:27:08 | 显示全部楼层
用C写.DWG图形函数库dwg.dll,使用说明
                ***************************************
                           (VC++ 6.0 版)

                         作者: 朱群   2001.7.29

一、样板文件版本为ACAD 10.06版,文件名为std.dwd,已合并入dwg.dll,
    程序运行时会将其释放到C:\std.dwd,本函数库已删除了turbo 2.0版的
    支持建图块、插入图块的函数、图块属性函数。

  

      所有实体的坐标均是相对于基点的坐标,实体的尺寸乘以比例因子。
      同一张图纸中可能有几幅比例不同的图,作图时可将每一幅图设一基点和比例
      因子,各图均用相对于基点的坐标和实际尺寸绘出,设置坐标基点和绘图比例
      用下面的函数。
      a.设置图块基点,初始设置为(0,0)
        setbaseXY(double x,double y)
        x,y---总体坐标基点

      b. 设置局部坐标基点,初始设置为(0,0)
        setrbase(double x,double y)
        x,y---相对于总体坐标的局部坐标基点

      c.设置绘图比例,初始设置为 1
        setscale(double sca)

      d.返回当前基点及比例
        double getscale()
        double getbasex()
        double getbasey()

      e.总体坐标基点、局部坐标基点、比例三者之间的关系
        设总体坐标基点为zt_x,zt_y,局部坐标基点为zb_x,zb_y,
        局部坐标基点的绝对坐标为jd_x,jd_y,则:
        jd_x=zt_x+zb_x*scale;
        jd_y=zt_y+zb_y*scale;

二、构造DWG文件头尾
    1. 构造DWG文件的文件头
       startdwg(char *filename)
       char *filename=DWG文件名(不含"DWG"扩展名)
    2. 构造DWG文件的文件尾
       enddwg()

三、实体颜色线型的修改
    1. 修改实体颜色
       chgcolor(char nom)

    2. 修改实体线型
       chgltype(char nom)

    3. 恢复为层颜色
       colorbylayer()

    4. 恢复为层线型
       ltypebylayer()


    线型定义:
     *DASHED,__ __ __ __ __ __ __ __ __ __ __ __ __ __ __
     A,.5,-.25
     *HIDDEN,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
     A,.25,-.125
     *CENTER,____ _ ____ _ ____ _ ____ _ ____ _ ____ _ ____
     A,1.25,-.25,.25,-.25
     *PHANTOM,_____ _ _ _____ _ _ _____ _ _ _____ _ _ ____
     A,1.25,-.25,.25,-.25,.25,-.25
     *DOT,...............................................
     A,0,-.25
     *DASHDOT,__ . __ . __ . __ . __ . __ . __ . __ . __ . __
     A,.5,-.25,0,-.25
     *BORDER,__ __ . __ __ . __ __ . __ __ . __ __ . __ __
     A,.5,-.25,.5,-.25,0,-.25
     *DIVIDE,__ . . __ . . __ . . __ . . __ . . __ . . __
     A,.5,-.25,0,-.25,0,-.25
     ( STD.DWG中线型比例为20.00 )

   线型定义
    CONTINUOUS 0
    DASHED     1
    HIDDEN     2
    CENTER     3
    PHANTOM    4
    DOT        5
    DASHDOT    6
    BORDER     7
    DIVIDE     8

   颜色定义
    Red        1
    Yellow     2
    Green      3
    Cyan       4
    Blue       5
    Magenta    6
    White      7

四、实体
    1. 写入直线实体
       wline(double x1,double y1,double x2,double y2)
       double x1,y1=直线起点
       double x2,y2=直线终点

    2.  写入圆实体
       wcircle(double x,double y,double r)
       double x,y=圆心
       double r=  半径

    3. 写入点实体
       double x,y=点座标

    4. 写入圆弧实体
       warc(double x,double y,double r,double sa,double ea)
       double x,y=  圆心
       double r=    半径
       double sa,ea=圆弧的起始角和终止角(角度制)

    5. 三维面
       w3dface(double x1,double y1,double x2,double y2,\
        double x3,double y3,double x4,double y4,double thick)

    6. 填充
       wsolid(x1,y1,x2,y2,x3,y3,x4,y4)
       double x1,y1,x2,y2,x3,y3,x4,y4;

    7. 画LINE多折线
       nline(int n,...)
       n---折线坐标点数,n>=2
       (...)---坐标必须为浮点数,且最少有两个点

    8. 画LINE多边形
       lpolygon(int n,...)
       n---折线坐标点数,n>=2
       (...)---坐标必须为浮点数,且最少有两个点

五、文本处理,[]中为初始设置
   1. 设置字高[3.5],文本字高不受图中比例的影响
      settexthigh( double h)

   2. 设置文本旋转角[0]
      settextrotang( double ang)

   3. 设置宽度因子[1]
      settextxscale( double xsca)

   4. 设置倾斜角[0]
      settextobliq( double obl)

   5. 设置字型 [STANDARD]
      settextstyle( char sty)

      字型sty取下面宏定义
      STANDARD        0   /* txt */
      HZ_CMPLX        1   /* complex,hztxt */
      CMPLX_VERT      2   /* complex 垂直字型 大字体无垂直字型*/
      HZ_ROMS         3   /* romans,tztxt */
      ROMS_VERT       4   /* romans 垂直字型  大字体无垂直字型*/

      注:请不要将对齐方式Fit用于垂置字形


   6. 设置生成方式
      settextccstyle( char cc)
      Bkword    0x02    反向
      Updown    0x04    颠倒

   7. 设置对齐方式
      settextdqstyle(char dq)
      Start     0       起点
      Center    1       中央
      Right     2       右对齐
      Align     3       两点这间对准,高度可变
      Mid       4       中点对准
      Fit       5       文本在两点之间拟合,宽度可变

    注:  设置对齐方式Align/Fit后,wtext 函数要输入对齐点,否则会出现浮点错

   8. 除字高外,恢复系统初始设置
      cltextset()

   9. 写入文本实体
      wtext(double x,double y,char *text,...)
      double x,y=文本左下角起始点或对齐点(中心点,中央点)
      char *text=文本字符串
      ...为对齐点 double dqx,double dqy,仅在Fit及Align方式要输入
  10. wtext(double x,double y,char *text,double dqx,double dqy)
      double x,y=文本左下角起始点或对齐点(中心点,中央点)
      char *text=文本字符串
      double dqx,double dqy为对齐点,仅在Fit及Align方式起作用

六、设置层名称及该层的颜色号、线型
    setlayer(char *layna,int color,int linetp)
    char *layna=要设置的层名
    int color  =要设置的颜色号
    int linetp =要设置的线型

七、多义线
    1. 设置多义线的线宽
       setplinew(double sw,double ew)
       sw=多义线的起始宽度
       ew=多义线的结束宽度

    2. 写入多义线的头部
       wpline(char attr2)
       attr2:=0 非闭合的
        =1 闭合的(close)
        =2 园弧拟合的(fit)
        =4 B样条拟合的(spline)
      可以进行叠加(如5=1+4)

   3.写入多义线的顶点
     wvertex(double x,double y,char attr2)
     double x,y 顶点座标
     attr2:=0   多义线为直线
        =1   多义线为园弧

   4.写入多义线的尾部
     wseqend()

   5.画园环
     wdoughnut(double x,double y,double rr,double ww)
     double x,y=  园环的园心座标
     double rr,ww=半径及线宽

   6.画矩形
     wrect(double sx,double sy,double ex,double ey)

   7.画单条复线
     pline(double x1,double y1,double x2,double y2)

   8.画PLINE多折线,用本函数前可用setplinew(sw,ew)设置线宽
     npline(int n,...)
        n---折线坐标点数,n>=2
        (...)---坐标必须为浮点数,且最少有两个点

   9. 画多边形,用本函数前可用setplinew(sw,ew)
     ppolygon(int n,...)
     设置线宽
        n---多边坐标点数,n>=3
        (..)---坐标必须为浮点数,且最少有三个点

八、其它
     计算字符串长度,一个汉字算一个字符,返回字符串长度
     int Strlen(char *str)
     主要用于水位及高程标注文字
九、使用方法:
    (1) 将DWG.DLL拷到C:\windows\system中
    (2)生成自己的项目文件,并将DWG.LIB、DWG.H加入其中
    (3)按通常的编程方法调用DWG.H中的上述函数即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-29 20:50:56 | 显示全部楼层
如果不搞软件开发,没有什么参考价值
因为用VB写一个参数化绘图SCR程序很容易
我们需要的是掌握最快捷、最方便的方法,去解决实际工作中的问题

我说的只代表个人看法,不一定对,请大家指正。

最后感谢楼主,如此无私的提供机会,供大家学习,真心的谢谢楼主
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-30 22:05:23 | 显示全部楼层
R12以上的版本,能直接写吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-30 22:55:37 | 显示全部楼层
朋友:"castwaymen"我不是很赞成你的说法,我有个朋友对这个很熟,并且自己开发了很多程序,可以直接生成施工图(连续刚构和预应力空心板),.如果这方面的资料在多点,我想会有更多人,会加入到这行业,国家也会富强.俗话说的好万事开头难.
  我喜欢共享的朋友,如果有成熟我第一个不用windows系统,改用中国的linux.但在上面运行的中国自己的cad还不曾听说,这不面是个遗憾!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-1 15:44:54 | 显示全部楼层
直接写DXF的函数库CADLIB+例子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-1 22:46:24 | 显示全部楼层
看看再说,虽然不太懂!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-2 13:15:36 | 显示全部楼层
有VB方面的吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 08:33 , Processed in 0.515773 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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