hanfengleng 发表于 2007-1-24 22:13:13

大家对读取cad中的等高线很感兴趣,那我就介绍一下怎么搞把!

这个程序使用arx写的,如果大家想调试,就要安装arx及其对应的vc版本。
程序如下:
//
// ObjectARX defined commands

#include "StdAfx.h"
#include "StdArx.h"

// This is command 'READ'
void lenglengread()
{
        // TODO: Implement the command

        AcDbBlockTable *pBt=NULL;
        acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBt,AcDb::kForRead);
        if(!pBt)
                return;
        AcDbBlockTableRecord *pBtr=NULL;
        pBt->getAt(ACDB_MODEL_SPACE,pBtr,AcDb::kForRead);
        pBt->close();
        if(!pBtr)
                return;
       
        AcDbBlockTableRecordIterator *pIt=NULL;
        pBtr->newIterator(pIt);
        pBtr->close();
   

        if(!pIt)
                return;
    FILE * fp;
             fp=fopen("c:\\arx.txt","w");
       

        int ptN=0;


        for(;!pIt->done();pIt->step())
        {
                AcDbEntity *pEntity;
                pIt->getEntity(pEntity,AcDb::kForWrite);

                char Name;
                strcpy(Name,pEntity->isA()->name());
                BOOL c1,c3,c4;
                c1=strcmp(Name,"AcDbPolyline")==0;
                c3=strcmp(pEntity->layer(),"cudenggaoxian")==0;
                c4=strcmp(pEntity->layer(),"xidenggaoxian")==0;
               
                       
   if(c1&&(c3||c4))
                {
      
               AcDbPolyline *pLine=(AcDbPolyline *)pEntity;
               AcGePoint3d point;       
               int numVerts=pLine->numVerts();

               AcGePoint3dArray stretchPoints(numVerts,5);
               pLine->getStretchPoints(stretchPoints);

               
             for(int i=0;i<stretchPoints.length();i++)
               {
                   point=stretchPoints;
                   fprintf(fp,"%14.3f%14.3f%14.3f \n",point,point,pLine->elevation());
               }

                  
           }
                                       
                pEntity->close();
       
        }
       

fclose(fp);
AfxMessageBox("finisehd!");


        /*ads_printf("hello , everyone !!\n");
        ads_printf("if you have any problem , please mail to me .\n");
        ads_printf("mail: lengxianlun@tom.com !!\n");*/
}

[ 本帖最后由 hanfengleng 于 2007-1-24 22:20 编辑 ]

hanfengleng 发表于 2007-1-24 22:19:59

具体调试方法是:在vc建立一个arx程序,然后增加一个命名,把上面的代码去覆盖你建立的命名,具体的文件应该是*command.cpp,然后调试就可以在cad中调用。
具体用法:
1、打开cad,记住arx的版本要与cad的版本对应,
2、输入arx,然后输入load,找到你编译的文件*.arx,
3、把你要提取的等高线的图层名字改成粗等高线或细等高线,
4、最后输入你创建的arx的名字,就可以得到cad图形等高线的坐标了。
文件保存在c:\\arx.txt
为了便于下载,我把命名在以附件的形式贴上。

benjackxu 发表于 2007-1-24 22:47:04

up hanfengleng大侠一下:victory:;P!

xuxflying 发表于 2007-1-24 22:56:57

好东东!:)                                 
顶一个!

elite1218 发表于 2007-1-25 10:24:48

d顶一下
我们是用Autolisp做的切剖面和读坐标程序,挺方便
现在的地形图中的等高线大都是用很多控制点的多义线定义的,所以在读取坐标之前最好重新定义多义线,减少控制点数量。我们一般用剖面法建模型,就不用重定义了

[ 本帖最后由 elite1218 于 2007-1-25 10:28 编辑 ]

hanfengleng 发表于 2007-1-25 11:07:25

CAD 有很多二次开放的方法,还有一种是直接用ole来做,
利用cad的.atl模版做,效果一样,看自己的熟悉程度。

dragon_lee 发表于 2007-1-25 12:50:01

好东西,下载用一下!
顶,顶!!!!!!!!!!!!!!!!!

hanfengleng 发表于 2007-1-25 13:46:36

需要自己调试一下,并不是拿着就可以用的!

sunston 发表于 2007-1-29 16:21:54

好东西,可惜使用的相关软件太多,本人还无力使用呀

chunhuo420 发表于 2007-2-6 08:13:04

能不能举个例子,具体操作一下。。。 。。

njman 发表于 2007-2-6 12:12:42

楼主,讲讲原理吧

灰狼 发表于 2007-3-8 18:59:41

牛x大侠,小弟佩服的紧啊,如滔滔江水,,,,,,,,,

zhangleizy 发表于 2007-3-8 20:14:25

谢谢!!!几下了 呵呵!!大有裨益啊

bangbang130 发表于 2007-3-9 00:12:10

cad 转ansys有什么小程序

sunston 发表于 2007-3-9 11:13:16

真是高手啊,可惜我还不会用VC的,只能望而兴叹了!

183452529 发表于 2007-4-15 10:21:12

牛人呀。。。。。。。。。。。。。

wuchangyu_008 发表于 2007-4-20 09:43:23

heh呵呵,真实牛人
崇拜之情悠然而生呀
祝楼主,万事如意
以后继续发一些精华贴

heyihejie 发表于 2007-7-19 17:10:33

搂主真是牛人一个,佩服!

yyttmm 发表于 2007-7-20 13:05:01

为什么有些搞岩土的人在编程上这么强??好奇。

fairfanfan 发表于 2007-8-17 18:45:51

真是高手啊,可惜我还不会用VC的,只能望而兴叹了!
页: [1] 2 3 4 5
查看完整版本: 大家对读取cad中的等高线很感兴趣,那我就介绍一下怎么搞把!