明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1802|回复: 1

请教关于链表的问题

[复制链接]
发表于 2003-11-10 20:43:00 | 显示全部楼层 |阅读模式
下面是我的一个画地面线的程序代码,我想做两个修改:
1、高程放大10倍
2、画出高程线
请问我应该如何修改?

代码如下:
/////////////////////////////////////////////
// ObjectARX defined commands

#include "StdAfx.h"
#include "StdArx.h"
#include<math.h>

void layer_operation( char *manner, char *layer_name );

// This is command 'DMX'
void try_try_dmx()
{
        // TODO: Implement the command
    ads_point Coor, pt1;
        //double scale;
        int os_flag, status;
        struct resbuf *entlist, result, osrb;
        FILE *fp;
        char *fn = "dmxcheck.txt";
        char tempstr[32];


        // 修改捕捉方式
        ads_getvar( "OSMODE", &osrb );
    os_flag = osrb.resval.rint;
    osrb.resval.rint = 0; // Osnap off
    ads_setvar( "OSMODE", &osrb );

        //设置图层
        layer_operation( "make", "graph" );
        layer_operation( "set", "graph" );

        //打开数据文件
        fp = fopen ( fn, "r" );

        //检查数据文件是否存在
        if ( fp == NULL ) {
                sprintf( tempstr, "\n地面线数据文件不存在!");
                acedAlert( tempstr );
                return;
        }

        //设置高程放大系数
        //acedGetReal( "\n 请输入高程放大系数(纵向:横向)", &scale );

        //初始化多义线链表
        entlist = acutBuildList (
                RTDXF0, "OLYLINE",
                8, "graph",
                66, 1,
                75, 6,
                0 );
       
        if ( entlist == NULL ) {
                sprintf( tempstr, "\n不能创建实体数据链表!");
                acedAlert( tempstr );
                return;
        }

        status = acdbEntMake (entlist);
        acutRelRb (entlist);

        if ( status != RTNORM ) {
                acutPrintf ( "%d", status );
                acedGetVar ( "ERROR NUM", &result );
                acutPrintf ( "\nERROR== %d", result.resval.rint );
               
                sprintf( tempstr, "\n不能创建地面线!");
                acedAlert( tempstr );
                return;
        }

        //绘制多义线
        while ( !feof(fp) ) {
               
                fscanf ( fp, "%lf %lf", &Coor[X], &Coor[Y] );
               
                //Coor[Y] = Coor[Y] * scale;
               
                pt1[X] = Coor[X];
                pt1[Y] = 0.0;
                pt1[Z] = 0.0;

                entlist = acutBuildList (
                        RTDXF0, "VERTEX",
                        8, "graph",
                        10, Coor,
                        0 );
               
                if ( entlist == NULL ) {
                        sprintf( tempstr, "\n创建链表失败!");
                        acedAlert( tempstr );
                        return;
                }
               
                status = acdbEntMake ( entlist );
                acutRelRb ( entlist );
               
                if ( status != RTNORM ) {
                        sprintf( tempstr, "\n不能在地面线中增加节点!");
                        acedAlert( tempstr );
                        return;               
                }               
        }

        //定义多义线终点
        entlist = acutBuildList (
                RTDXF0, "SEQEND",
                8, "graph",
                0 );

        if ( entlist == NULL ) {
                sprintf( tempstr, "\n 创建链表失败!");
                acedAlert( tempstr );
                return;
        }

        status = acdbEntMake ( entlist );
        acutRelRb ( entlist );

        if ( status == RTERROR ) {
                sprintf( tempstr, "\n不能完成地面线的创建!");
                acedAlert( tempstr );
                return;
        }
       
        fclose ( fp );

        layer_operation( "set", "0" );

        //绘制背景格网高程线
        layer_operation( "make", "backgroud" );
        layer_operation( "set", "backgroud" );

        //Top = ceil( Hmax ) * scale;
        //*while ( Top > 0 ) {
                Coor[Y] = Coor[Y] * scale;
               
                pt1[X] = Coor[X];
                pt1[Y] = 0.0;
                pt1[Z] = 0.0;*/







        acedCommand( RTSTR, "zoom", RTSTR, "e", RTNONE );
}


//层操作
void layer_operation( char *manner, char *layer_name )     
{
        if ( ads_command(RTSTR,"layer",RTSTR,manner,RTSTR,layer_name,RTSTR,"", 0 ) != RTNORM) {
                ads_printf("Can not run layer operation\n");
        }
        return;
}






// This is command 'CHECKDATA'
void try_try_checkdata()
{
        // TODO: Implement the command
        FILE *in, *out;
        char *fn1 = "dmx.txt", *fn2 = "dmxcheck.txt";
        double Stake, High, CheckStake;
        double Hmax, FirstStake;
        char tempstr[32];


        in = fopen ( fn1, "r" );
        out = fopen ( fn2, "w");

        //检测数据文件是否存在
        if( in == NULL ) {
          sprintf(tempstr, "\n数据文件不存在!");
          acedAlert( tempstr );
          return ;          
        }

        fscanf ( in, "%lf %lf\n" , &Stake, &High );

        CheckStake = Stake;
        FirstStake = Stake;
        Hmax = High;
        acutPrintf( "\nStake==%8.3lf,High==%6.2lf", Stake, High );

        fprintf ( out, "%lf %lf \n", Stake, High );


        while ( !feof(in) ) {
                fscanf ( in, "%lf %lf\n", &Stake, &High );
                acutPrintf( "\nStake==%8.3lf,High==%6.2lf", Stake, High );
               
                if ( Stake < CheckStake ) {
                        sprintf(tempstr, "\n数据文件有误,请检查!");
                        acedAlert( tempstr );
                        fclose ( out );
                        return ;          
                }
               
                CheckStake = Stake;

                if ( High > Hmax ) Hmax = High;

                fprintf ( out, "%lf %lf \n", Stake, High );
        }

        fclose ( in );
        fclose ( out );



}
发表于 2003-11-10 23:14:00 | 显示全部楼层
为什么要用链表???多麻烦!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 20:46 , Processed in 0.941564 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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