我喜欢 发表于 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;


        // 修改捕捉方式
        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, "POLYLINE",
                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, &Coor );
               
                //Coor = Coor * scale;
               
                pt1 = Coor;
                pt1 = 0.0;
                pt1 = 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 = Coor * scale;
               
                pt1 = Coor;
                pt1 = 0.0;
                pt1 = 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;


        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 );



}

Gxiaofeng 发表于 2003-11-10 23:14:00

为什么要用链表???多麻烦!!!!
页: [1]
查看完整版本: 请教关于链表的问题