0

itcl を使い始めたばかりで、あるクラスから別のクラスに itcl オブジェクトを渡す方法を見つけました。しかし、それは私を助けませんでした。

次のオブジェクトが定義されています。

package require Itcl

namespace eval FEM {

   itcl::class Node {
       variable nid
       variable x
       variable y
       variable z

       constructor {{NID 0} {coordX 0} {coordY 0} {coordZ 0}} {
         set nid $NID
         set x $coordX
         set y $coordY
         set z $coordZ
         return $this}

       method is {nid coordX coordY coordZ}
       method printString  
      }

   itcl::body Node::is {NID coordX coordY coordZ} {
       set nid $NID  
       set x $coordX
       set y $coordY
       set z $coordZ}       

   itcl::body Node::printString {} {
       return "$nid $x $y $z"}

# #######################################################

   itcl::class CQUAD {
       variable eid
       variable pid
       variable node1
       variable node2
       variable node3
       variable node4

       constructor {{EID 0} {PID 0} {NODE1 0} {NODE2 0} {NODE3 0} {NODE4 0}} {
         set eid $EID
         set pid $PID
         set node1 $NODE1
         set node2 $NODE2
         set node3 $NODE3
         set node4 $NODE4
         return $this}

       method is {EID PID NODE1 NODE2 NODE3 NODE4}
       method printString  

      }  

   itcl::body CQUAD::is { EID PID NODE1 NODE2 NODE3 NODE4 } {
       set eid $EID
       set pid $PID  
       set node1 $NODE1
       set node2 $NODE2
       set node3 $NODE3
       set node4 $NODE4}       

   itcl::body CQUAD::printString {} {
       return "$eid $pid $node1 $node2 $node3 $node4"}
  }

}

# ########################################################
# Test  

for {set n 1} {$n <= 4} {incr n} {  
   set coord1 [expr {$n+1} ]
   set coord2 [expr {$n+2} ]
   set coord3 [expr {$n+3} ]   
   set NID N$n
   ::FEM::Node $NID $n $coord1 $coord2 $coord3
   puts "[$NID printString]"
 }

set PID 99
set EID 88 

$N1単純N1 に「ノード」であり、「ノード」ではないため、次は間違っています。N1

::FEM::CQUAD MyQuad $EID $PID $N1 $N2 $N3 $N4

しかし、 Node 型のオブジェクトを CQUAD 型の Object に渡すにはどうすればよいでしょうか? 私も試しました:

::FEM::CQUAD MyQuad $EID $PID $::FEM:Node::N1 $::FEM:Node::N2 $::FEM:Node::N3 $::FEM:Node::N4

また、オブジェクトを削除するにはどうすればよいですか? unset $N1間違ってunset $::FEM::Node::N1います 偽物でもあります

最後の質問: Node タイプのオブジェクトを含む CQUAD オブジェクトがあるとします。たとえば、CQUAD 1 の Node2 の y 座標を取得するにはどうすればよいでしょうか?

4

1 に答える 1