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 座標を取得するにはどうすればよいでしょうか?