注册 登录
编程论坛 程序供求

c语言读取step文件信息

lihouqi 发布于 2017-03-14 16:42, 3417 次点击
从step文件中读取三维模型的信息,比如面的类型和数量,边的类型和数量。QQ 915601564
7 回复
#2
寒风中的细雨2017-03-14 22:16
如果是类似txt 贴一段 文本  或是  上传一个step文件  看看
#3
lihouqi2017-03-16 22:31
回复 2楼 寒风中的细雨
只有本站会员才能查看附件,请 登录
这是step文件中的一段,数据段每行都是以‘#’开头,‘;’结尾。比如查找整个文本中的‘ADVANCED_FACE',‘EDGE_LOOP’等出现的次数,返回一个向量,存储出现的次数.
#4
zbjzbj2017-03-16 23:21
什么条件?
#5
lihouqi2017-03-16 23:49
只有本站会员才能查看附件,请 登录

    在这个文件中,数据段都是以‘#’开始,‘;’结尾。先查找每个ADVANCED_FACE行,看里面的括号里有几个‘#xxx(数字)’(比如有的行:#130 = ADVANCED_FACE ( 'NONE', ( #317 ), #213, .T. ) ;里面的括号就一个#317,而#108 = ADVANCED_FACE ( 'NONE', ( #188, #223 ), #266, .T. ) ;里面的括号有两个,#188和#233),一个的就直接定位到括号里对应的行,比如对前一个ADVANCED_FACE找到行:#317 = FACE_OUTER_BOUND ( 'NONE', #301, .T. ) ;,继续找到行:#301 = EDGE_LOOP ( 'NONE', ( #68, #27, #233, #308 ) ) ;,到EDGE_LOOP为止,此时这个EDGE_LOOP里有4个数,那么这个ADVANCED_FACE就有4个数。超过两个以上的就要分别定位到对应的行,比如找到行:#188 = FACE_OUTER_BOUND ( 'NONE', #309, .T. ) ;,继续找到行:#309 = EDGE_LOOP ( 'NONE', ( #297, #183 ) ) ;此时看EDGE_LOOP里的括号有几个#xxx(这里是两个#297和#183),记下个数2;同理找到行:#223 = FACE_BOUND ( 'NONE', #337, .T. ) ;,继续找到行:#337 = EDGE_LOOP ( 'NONE', ( #142, #29, #161, #239 ) ) ;,此时EDGE_LOOP里的括号里有4个#xxx,那么这个ADVANCED_FACE就有6个数(2+4)。 同理ADVANCED_FACE里面的括号里有两个以上的数用类似的方法。然后输出每个ADVANCED_FACE有多少个数。求高手指导 QQ:915601564.不胜感激!
#6
寒风中的细雨2017-03-17 23:58
语言 没限制吧

能提取出来  符合要求就OK吧?
#7
寒风中的细雨2017-03-18 01:01
shell 脚本

提取 基本思路  没写完 参考下

程序代码:

$ IFS=$'\n'; for line in $(grep "^#.*;$" step.txt | grep "ADVANCED_FACE") ;do echo $line; done
#28 = ADVANCED_FACE ( 'NONE', ( #325 ), #221, .F. ) ;
#77 = ADVANCED_FACE ( 'NONE', ( #326 ), #260, .T. ) ;
#108 = ADVANCED_FACE ( 'NONE', ( #188, #223 ), #266, .T. ) ;
#130 = ADVANCED_FACE ( 'NONE', ( #317 ), #213, .T. ) ;
#185 = ADVANCED_FACE ( 'NONE', ( #137 ), #184, .F. ) ;
#211 = ADVANCED_FACE ( 'NONE', ( #134 ), #242, .F. ) ;
#235 = ADVANCED_FACE ( 'NONE', ( #111 ), #40, .T. ) ;
#259 = ADVANCED_FACE ( 'NONE', ( #63 ), #65, .F. ) ;
#307 = ADVANCED_FACE ( 'NONE', ( #10 ), #227, .F. ) ;
#329 = ADVANCED_FACE ( 'NONE', ( #236 ), #257, .T. ) ;

$ IFS=$'\n'; i=0; for line in $(grep "^#.*;$" step.txt | grep "ADVANCED_FACE") ;do adv[$i]=$line; ((++i)); done


$ grep "^#.*;$" step.txt | grep "ADVANCED_FACE" | egrep -o "\( #[^\)]*\)" | sed -e 's/ //g' | egrep -o "#[^\)]*" | awk -F, '{for (i=1;i<=NF; ++i){if (i>1) printf(" ");printf("%s", $i)} printf("\n");}'
#325
#326
#188 #223
#317
#137
#134
#111
#63
#10
#236

$ i=0; for line in $(grep "^#.*;$" step.txt | grep "ADVANCED_FACE" | egrep -o "\( #[^\)]*\)" | sed -e 's/ //g' | egrep -o "#[^\)]*" | awk -F, '{for (i=1;i<=NF; ++i){if (i>1) printf(" ");printf("%s", $i)} printf("\n");}');do advline[$i]=$line; ((++i));done

$ i=0; while [ $i -le ${#advline[@]} ];do echo ${advline[$i]}; ((++i)); done
#325
#326
#188 #223
#317
#137
#134
#111
#63
#10
#236


$ i=0; while [ $i -lt ${#advline[@]} ];do echo ${advline[$i]}; egrep "^${advline[$i]} = " step.txt; ((++i)); done
#325
#325 = FACE_OUTER_BOUND ( 'NONE', #314, .T. ) ;
#326
#326 = FACE_OUTER_BOUND ( 'NONE', #87, .T. ) ;
#188 #223
#317
#317 = FACE_OUTER_BOUND ( 'NONE', #301, .T. ) ;
#137
#137 = FACE_OUTER_BOUND ( 'NONE', #272, .T. ) ;
#134
#134 = FACE_OUTER_BOUND ( 'NONE', #267, .T. ) ;
#111
#111 = FACE_OUTER_BOUND ( 'NONE', #107, .T. ) ;
#63
#63 = FACE_OUTER_BOUND ( 'NONE', #99, .T. ) ;
#10
#10 = FACE_OUTER_BOUND ( 'NONE', #18, .T. ) ;
#236
#236 = FACE_OUTER_BOUND ( 'NONE', #202, .T. ) ;


#8
lihouqi2017-03-20 00:32
回复 7楼 寒风中的细雨
看不太懂,大神能用C或C++吗?
1