catia知识工程编程概论、几个典型实例
本文标签: catia知识工程 

        众所周知:CATIA的各个模块基于统一的数据平台,因此CATIA

的各个模块存在着真正的全相关性,所以其知识工程里面的编程变量能够与外部设计显示特征形成一一对应的关系,一般地,任何一个创成式特征都能够用一个函数和或者公式来表达,不仅如此,从理论上,任何一个复杂的特征,即便它由几个子特征、甚至几十个子特征的复杂布尔运算、或其他复杂操作而构成,即便它的这些子特征具有完全的不确定性,乃至让人参与去操作都让人头疼,都可以通过知识工程编程和计算机数学逻辑语言,把它表达的很清楚,于是就能够让大量复杂的、不确定的操作,在知识工程里面变成一般性问题来处理。下面我们用一个巨大的空间点阵及其连接这些点阵的有规律的线的线框来为例子:

这里是1200个特征,当然是可以随时跟着参数瞬间剧变的一个空间点阵,也可以是更多

 



在不规则双空间曲线上依次按照预定生长的曲面


系在蛋形截面曲线上(非椭圆)的大小、长短、间距不一的风铃,但其间关系又很有规矩,可以随时更改所系风铃的数目和大小形状,而它却是知识工程的输出模型

从这几个实例可以看出,某些看似没有太多规律的设计,都可以通过知识工程和计算机逻辑,把她们描述为有规律的一般性问题,比如利用知识规程,把一些糟乱无章的线框,点,面,分门别类的提取出来,进行相应的操作,这些都是可以实现的,至此,可以说,知识工程已经能够把设计技术经验、设计的复杂需求、对已存在的复杂大量的模型特征的再处理和分类整理,完全融合起来,当然,如此一来,它就颠覆了我们常规的花费大量的人力时间去设计的模式。

下面是上面空间阵列的知识工程部分源代码,希望能够给爱好者带来帮助

let i(integer)
let n(integer)
let m(integer)
let k(integer)

let i1(integer)
let n1(integer)
let m1(integer)

let k1(integer)
let k2(integer)
let k3(integer)

let p1(point)
let p2(point)
let line1(line)
let line2(line)
let line3(line)
let line11(line)
let line12(line)
let line13(line)

let list1(List)
let list2(List)
let list3(List)
let list11(List)
let list12(List)
let list13(List)

list3=NULL
m=1
for m while m<=`parameter\parameter.1\int-3`
 
{         
 list2=NULL
 n=1
 for n while n<=`parameter\parameter.1\int-2`
 {     
  list1=NULL
  i=1
  for i while i<=`parameter\parameter.1\int-1`
   
  {     
   set p1=point(i*`parameter\parameter.1\length-1` ,n*`parameter\parameter.1\length-2` ,m*`parameter\parameter.1\length-3`) 
   list1=list1+List(p1)
   
  }
  
  list2=list2+list1
 }
    list3=list3+list2
}
list11=NULL
list12=NULL
k=1
for k while k <=list3->Size()
{
 set p2=CreateOrModifyDatum("point",`points`  ,`control-array-set\relationship-1\knowledge-array.1\point.1`  ,k) 
 set p2=list3->GetItem(k)
 p2.Name="p2-"+ToString(k)
 if k/`parameter\parameter.1\int-1` <>int(k/`parameter\parameter.1\int-1`)
 {
  set line1=line(list3->GetItem(k),list3->GetItem(k+1))
  list11=list11+List(line1)
 }
 
}
i1=1
for i1 while i1<=list11->Size()
 
{     
 set line11=CreateOrModifyDatum("line",`lines-1`,`control-array-set\relationship-1\knowledge-array.1\line-1` ,i1 )
 set line11=list11->GetItem(i1)
  line11.Name="line11-"+ToString(i1)
 
}
k1=1
for k1 while k1 <=list3->Size()
{
 
 set p2=list3->GetItem(k1)
 
 if abs( p2->coord(2)/1mm)*1mm<=abs((`parameter\parameter.1\int-2`-1) *`parameter\parameter.1\length-2`/1mm)*1mm
 {
  set line2=line(list3->GetItem(k1),list3->GetItem(k1+`parameter\parameter.1\int-1`))
  list12=list12+List(line2)
 }
}
n1=1
for n1 while n1<=list12->Size()
 
{     
 set line12=CreateOrModifyDatum("line",`lines-2`,`control-array-set\relationship-1\knowledge-array.1\line-2` ,n1 )
 set line12=list12->GetItem(n1)
  line12.Name="line12-"+ToString(n1)
 
}
k2=1
for k2 while k2 <=list3->Size()
{
 
 set p2=list3->GetItem(k2)
 
 if abs( p2->coord(3)/1mm)*1mm<=abs((`parameter\parameter.1\int-3`-1) *`parameter\parameter.1\length-3`/1mm)*1mm
 {
  set line3=line(list3->GetItem(k2),list3->GetItem(k2+`parameter\parameter.1\int-1`*`parameter\parameter.1\int-2`))
  list13=list13+List(line3)
 }
}
m1=1
for m1 while m1<=list13->Size()
 
{     
 set line13=CreateOrModifyDatum("line",`lines-3`,`control-array-set\relationship-1\knowledge-array.1\line-3` ,m1 )
 set line13=list13->GetItem(m1)
   line13.Name="line13-"+ToString(m1)
 
}




发表于: 2013-10-04 19:56 阅读(7142) 评论(0) 收藏 好文推荐

发表评论(网友发言只代表个人观点,不代表本网站观点或立场。)

您尚未登录,请先【登录或注册