天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 315|回复: 2

利用visual C++修改dxf文件

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-2-6 20:23:00 | 显示全部楼层 |阅读模式
    本次完成的是dxf文件的修改。
    问题:
    将上题的图形用DXFOUT命令生成完整的DXF文件。编写一C/C++语言程序,使之能够根据用户输入的时间,通过修改DXF文件来控制时针和分针的位置。交C/C++语言源程序。


    利用dxfout命令后,此时的dxf文件已经是完整的了,从几十行变成了2347行,内容就比较复杂了:


    代码如下:
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    const double PI=3.14159265358;
    void main()
    {
    FILE *fp1,*fp2;//文件指针
    double h,m,r;
    char name[80];//组代码字符串
    char value[80];//组值字符串
    int tag;//中间控制变量
    printf("Please input a number for the hour:\n");
    scanf("%lf",&h);
    printf("\nPlease input a number for the minutes:\n");
    scanf("%lf",&m);
    h=h+m/60;//对h进行处理
    fp1 = fopen("clock.dxf","r");//读取原始DXF文件
    if(fp1 == NULL)
    {
    printf("Can not open this file1 !\n");
    return;
    }
    fp2 = fopen("采用clock.dxf","w"); //修改后写入新的DXF文件
    if(fp2 == NULL)
    {
    printf("Can not open this file2 !\n");
    return;
    }
    tag = 0;
    while( !feof( fp1 ) )
    {
    fgets(name,80,fp1);// 读入组代码
    fgets(value,80,fp1); // 读入组值
    fprintf(fp2,"%s",name);// 写入组代码
    fprintf(fp2,"%s",value);// 写入组值
    if(strcmp(value,"CIRCLE\n") == 0)//找第一个圆实体
    {
    while(1)
    {
    fgets(name,80,fp1);
    fgets(value,80,fp1);
    fprintf(fp2,"%s",name);
    fprintf(fp2,"%s",value);
    if(strcmp(name," 40\n") == 0) // 读取半径
    {
    r = double (atof(value));
    printf("found radius r=%f\n",r);
    break;
    }
    }
    }
    if(strcmp(value,"LINE\n") == 0)//找到线实体
    {
    while(1)
    {
    fgets(name,80,fp1);
    fgets(value,80,fp1);
    fprintf(fp2,"%s",name);
    fprintf(fp2,"%s",value);// 写入组值
    if((strcmp(name," 10\n") == 0)&&(strcmp(value,"0.0\n") == 0))
    {
    fgets(name,80,fp1);
    fgets(value,80,fp1);
    fprintf(fp2,"%s",name);
    fprintf(fp2,"%s",value);
    if((strcmp(name," 20\n") == 0)&&(strcmp(value,"0.0\n") == 0))//找到以坐标原点为起点的线实体
    {
    fgets(name,80,fp1);
    fgets(value,80,fp1);
    fprintf(fp2,"%s",name);
    fprintf(fp2,"%s",value);//满足z坐标
    if(tag==0)//hour
    {
    fgets(name,80,fp1);
    fgets(value,80,fp1);
    fgets(name,80,fp1);
    fgets(value,80,fp1);//消耗4行
    fprintf(fp2," 11\n%f\n",0.4*r*cos((90-30*h)*PI/180));
    fprintf(fp2," 21\n%f\n",0.4*r*sin((90-30*h)*PI/180));
    tag = 1;
    break;
    }
    if(tag==1)//minute
    {
    fgets(name,80,fp1);
    fgets(value,80,fp1);
    fgets(name,80,fp1);
    fgets(value,80,fp1);//消耗4行
    fprintf(fp2," 11\n%f\n",0.6*r*cos((90-6*m)*PI/180));
    fprintf(fp2," 21\n%f\n",0.6*r*sin((90-6*m)*PI/180));
    break;
    }
    }
    if((strcmp(name," 20\n") == 0)&&(strcmp(value,"0.0\n") == 1))
    {
    break;
    }
    }
    if((strcmp(name," 10\n") == 0)&&(strcmp(value,"0.0\n") == 1))
    {
    break;
    }
    }
    }
    }
    }

     

     

     

     

    利用visual C++修改dxf文件
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
     楼主| 发表于 2024-2-6 20:25:26 | 显示全部楼层

     

     

     

     

    利用visual C++修改dxf文件
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
     楼主| 发表于 2024-2-6 20:25:30 | 显示全部楼层

     

     

     

     

    利用visual C++修改dxf文件
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 07:50 , Processed in 0.205693 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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