• IDL 的读写


    read_ifc代码如下:

    Write_ifc代码分析如下:

    (1)将数字转换为字符串的函数。

    function ntoc,a
        return,string(a,format='(g0)')
    end

    (2)程序的开始和结尾,分号;代表注释

    pro 程序名

    end

    pro write_ifc
    ;......
    end

    FILE='D:1.3D';要读写的3D文件路径

    格式:openr 变量1,'文件名'[,/delete][,/error=变量2][,/get_lun]

    功能:按照变量指定的逻辑设备号,以只读方式打开已经存在的文件

    说明:1.变量1,指定的逻辑设备设备号

       2.文件名:要打开的文件的名字,可以包含盘符和路径

        3.[,/delete]:在使用Close命令关闭文件时,同时删除该文件

        4.Ereor=变量2:在打开文件出现错误时,将错误信息存入变量2

        5./get_lun :申请一个100-128中当前还没有被使用的合法逻辑设备号 。

    openr,fp,file,/get_lun;申请的逻辑设备号放在fp中,以只读方式打开文件file

    result=lonarr(n):返回指定长度为n的有符号长整型数组

    num=lonarr(3);返回长度为3的有符号长整型数组

    格式:readf,设备号变量,变量1,...变量n[,/format='(格式描述)']

    功能:按照格式描述的格式从设备号变量所对应的文本文件中读取多种类型的数据,并以此读取到变量1,,,,,,变量n中

    说明:设备号变量是打开文件时候付给该文件的逻辑设备号。

    readf,fp,num;从sp标示的文件中读取3个数字存入 num中

    r=lonarr(4);返回长度为4的有符号长整型数组

    r[0]=10,表示点数,r[1]=5,表示面数,r[2]=0,r[3]=64,表示组成面表的数字。

    readf,fp,r

    str=''

    readf,fp,str;读一个字符串

    nip=r[3]
    ip=lonarr(nip)
        readf,fp,ip        ;面表

    function ntoc,a
        return,string(a,format='(g0)')
    end
    pro write_ifc
        ;file='E:几个工区昆明20130402打通格式ifc1.3D'
        FILE='D:IDL-毛工作7.3-下午1.3D'
        openr,fp,file,/get_lun
        num=lonarr(3)
        readf,fp,num
        r=lonarr(4);
        readf,fp,r
        str=''
        readf,fp,str
        nip=r[3];nip=64
        ip=lonarr(nip);64大小的数组
        readf,fp,ip        ;面表
        np=r[0];np=10;np三维图形中点数
        p=dblarr(3,np);双精度浮点型数组
        readf,fp,p        ;三维图形中10个点的坐标表
        free_lun,fp
    ;;============
    
    
        newFile='D:2.ifc'
        openw,fp,newFile,/get_lun
        printf,fp,'ISO-10303-21;'
        printf,fp,'HEADER;'
        printf,fp,"FILE_DESCRIPTION(('ViewDefinition [CoordinationView]'),'2;1');"
        printf,fp,"FILE_NAME($,'2013-06-28T10:41:04',(''),(''),'Autodesk Revit 2013','20121003_2115(x64)','');"
        printf,fp,"FILE_SCHEMA(('IFC2X3'));"
        printf,fp,"ENDSEC;"
        printf,fp,"DATA;"
        printf,fp,"#1= IFCORGANIZATION($,'Autodesk Revit 2013',$,$,$);"
        printf,fp,"#2= IFCAPPLICATION(#1,'2013','Autodesk Revit 2013','Revit');"
        printf,fp,"#3= IFCCARTESIANPOINT((0.,0.,0.));"
        printf,fp,"#5= IFCCARTESIANPOINT((0.,0.));"
        printf,fp,"#7= IFCDIRECTION((1.,0.,0.));"
        printf,fp,"#9= IFCDIRECTION((-1.,0.,0.));"
        printf,fp,"#11= IFCDIRECTION((0.,1.,0.));"
        printf,fp,"#13= IFCDIRECTION((0.,-1.,0.));"
        printf,fp,"#15= IFCDIRECTION((0.,0.,1.));"
        printf,fp,"#17= IFCDIRECTION((0.,0.,-1.));"
        printf,fp,"#19= IFCDIRECTION((1.,0.));"
        printf,fp,"#21= IFCDIRECTION((-1.,0.));"
        printf,fp,"#23= IFCDIRECTION((0.,1.));"
        printf,fp,"#25= IFCDIRECTION((0.,-1.));"
        printf,fp,"#27= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);"
        printf,fp,"#28= IFCSIUNIT(*,.AREAUNIT.,.MILLI.,.SQUARE_METRE.);"
        printf,fp,"#29= IFCSIUNIT(*,.VOLUMEUNIT.,.MILLI.,.CUBIC_METRE.);"
        printf,fp,"#30= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);"
        printf,fp,"#31= IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0);"
        printf,fp,"#32= IFCMEASUREWITHUNIT(IFCRATIOMEASURE(0.0174532925199433),#30);"
        printf,fp,"#33= IFCCONVERSIONBASEDUNIT(#31,.PLANEANGLEUNIT.,'DEGREE',#32);"
        printf,fp,"#34= IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);"
        printf,fp,"#35= IFCUNITASSIGNMENT((#27,#28,#29,#33,#34));"
        printf,fp,"#37= IFCAXIS2PLACEMENT3D(#3,$,$);"
        bh=37;逻辑编号#37,先存起来
        bhs=lonarr(np);np点数
        for k=0,np-1 do begin;k由np控制循环10次,np是点数,(x,y,z)
            bh=bh+2
            printf,fp,'#'+ntoc(bh)+'= IFCCARTESIANPOINT(('+$
                ntoc(p[0,k])+','+ntoc(p[1,k])+','+ntoc(p[2,k])+'));'
            bhs[k]=bh;bhs[0]=#...
        endfor
        nip=nip/4;几个面,nip=16
        ip=reform(ip,4,nip)
        facebh=lonarr(nip)
        for i=0,nip-1 do begin        ;ip[4,nip]即ip=[4,16]
            dh=ip[1:3,i]
            a=bhs[dh];bhs[0,1,2]当i=0时候。a[0]=bhs[0]=39,当i=1,
            bh=bh+2;bh=59
            printf,fp,'#'+ntoc(bh)+'= IFCPOLYLOOP((#'+$
                ntoc(a[0])+',#'+ntoc(a[1])+',#'+ntoc(a[2])+'));'
            bh=bh+2
            printf,fp,'#'+ntoc(bh)+'= IFCFACEOUTERBOUND(#'+ntoc(bh-2)+',.T.);'
            bh=bh+1
            printf,fp,'#'+ntoc(bh)+'= IFCFACE((#'+ntoc(bh-1)+'));'
            facebh[i]=bh
        endfor
        bh=bh+2
        str='#'+ntoc(bh)+'= IFCCLOSEDSHELL(('
        str=str+strjoin('#'+ntoc(facebh),',')
        str=str+'));'
        printf,fp,str
    ;#2113= IFCPOLYLOOP((#447,#159,#161));
    ;#2115= IFCFACEOUTERBOUND(#2113,.T.);
    ;#2116= IFCFACE((#2115));
    ;#34623= IFCCLOSEDSHELL((#2116,#2121,#2126,#2131,#2136,#214
    ;#34625= IFCFACETEDBREP(#34623);
        free_lun,fp
    end
  • 相关阅读:
    注册表编程初步
    内层位移换算到外层
    运算符重载
    按右手定则求已经知三点的法向量
    链接错误 2001、2019
    UML规则笔记
    关于动态链接库、静态链接库
    05 nfs、rsync、inotify综合案例
    rsync本地同步
    05 NFS基础知识
  • 原文地址:https://www.cnblogs.com/qiushuixizhao/p/3171345.html
Copyright © 2020-2023  润新知