our
$VERSION
=
'0.014'
;
use
Weed
'X3DFieldDefinition : X3DObject { }'
;
return
YES
if
!
defined
(
$_
[0]->getValue ) && !
defined
(
$_
[1]->getValue );
return
NO
if
defined
(
$_
[0]->getValue ) ^
defined
(
$_
[1]->getValue );
return
$_
[0]->getValue eq
$_
[1];
};
sub
new {
my
$this
=
shift
->X3DObject::new;
@$this
{
qw'type in out name value range'
} =
@_
;
return
$this
;
}
sub
getType {
$_
[0]->{type} }
sub
isIn {
$_
[0]->{in} }
sub
isOut {
$_
[0]->{out} }
sub
getAccessType { (
$_
[0]->{out} << 1 ) |
$_
[0]->{in} }
sub
getName {
$_
[0]->{name} }
sub
getValue {
$_
[0]->{value} }
sub
getRange {
$_
[0]->{range} }
sub
createField {
my
(
$this
,
$node
) =
@_
;
my
$field
=
$this
->getType->X3DObject::new;
$field
->getParents->add(
$node
);
$field
->setDefinition(
$this
);
$field
->create;
return
$field
;
}
sub
toString {
my
(
$this
) =
@_
;
my
$type
=
$this
->getType;
my
$string
=
''
;
$string
.=
$type
;
$string
.= X3DGenerator->space;
$string
.= X3DGenerator->open_bracket;
$string
.=
join
X3DGenerator->comma,
grep
{
$_
}
$this
->isIn && X3DGenerator->in,
$this
->isOut && X3DGenerator->out;
$string
.= X3DGenerator->close_bracket;
$string
.= X3DGenerator->tidy_space
if
$this
->getAccessType != X3DConstants->inputOutput;
$string
.=
join
''
,
map
{ X3DGenerator->tidy_space x
length
$_
}
grep
{
$_
}
!
$this
->isIn && X3DGenerator->in,
!
$this
->isOut && X3DGenerator->out;
$string
.= X3DGenerator->space;
$string
.=
$this
->getName;
$string
.= X3DGenerator->space;
my
$value
=
$this
->getValue;
if
( UNIVERSAL::isa(
$value
,
'X3DArray'
) )
{
$string
.=
@$value
?
join
X3DGenerator->space,
@$value
:
X3DGenerator->open_bracket . X3DGenerator->close_bracket;
}
else
{
if
(
$type
eq
'SFBool'
) {
$string
.=
$value
? X3DGenerator->TRUE : X3DGenerator->FALSE;
}
elsif
(
$type
eq
'SFString'
) {
$string
.=
sprintf
X3DGenerator->STRING,
$value
;
}
elsif
(
$type
eq
'SFNode'
) {
$string
.=
$value
|| X3DGenerator->NULL;
}
else
{
$string
.=
$value
;
}
}
$string
.= X3DGenerator->tab;
$string
.=
$this
->getRange;
return
$string
;
}
1;