35#include <system_threads.h>
39#include <libFreeWRL.h>
41#include "../vrml_parser/Structs.h"
42#include "../main/headers.h"
43#include "../vrml_parser/CParseGeneral.h"
44#include "../main/Snapshot.h"
45#include "../scenegraph/Collision.h"
46#include "../scenegraph/quaternion.h"
47#include "../scenegraph/Viewer.h"
48#include "../input/SensInterps.h"
49#include "../x3d_parser/Bindable.h"
50#include "../scenegraph/LinearAlgebra.h"
56#include "jsVRMLClasses.h"
71JS_MY_Finalize(JSContext *cx, JSObject *obj){
73JS_MY_Finalize(JSFreeOp *fop, JSObject *obj){
78 #ifdef JSVRMLCLASSESVERBOSE
79 printf (
"finalizing %p\n",obj);
85 if ((ptr = (
void *)JS_GetPrivateFw(cx, obj)) != NULL) {
91 if(any->gc) FREE_IF_NZ(any->v);
94 JS_SetPrivateFw(cx,obj,NULL);
99 #ifdef JSVRMLCLASSESVERBOSE
101 printf (
"Finalize - no private data!\n");
110MFColorToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
112MFColorToString(JSContext *cx, uintN argc, jsval *vp) {
113 JSObject *obj = JS_THIS_OBJECT(cx,vp);
114 jsval *argv = JS_ARGV(cx,vp);
120 return doMFToString(cx, obj,
"MFColor", rval);
122 if (!doMFToString(cx, obj,
"MFColor", &rval)) {
return JS_FALSE; }
123 JS_SET_RVAL(cx,vp,rval);
130MFColorAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
131 return _standardMFAssign (cx, obj, argc, argv, rval, &MFColorClass,FIELDTYPE_SFColor);
133MFColorAssign(JSContext *cx, uintN argc, jsval *vp) {
134 JSObject *obj = JS_THIS_OBJECT(cx,vp);
135 jsval *argv = JS_ARGV(cx,vp);
137 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFColorClass,FIELDTYPE_SFColor)) {
return JS_FALSE; }
138 JS_SET_RVAL(cx,vp,rval);
145MFColorConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
147MFColorConstr(JSContext *cx, uintN argc, jsval *vp) {
148 JSObject *obj = JS_NewObject(cx,&MFColorClass,NULL,NULL);
149 jsval *argv = JS_ARGV(cx,vp);
150 jsval rval = OBJECT_TO_JSVAL(obj);
151 if (!MFColorConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
152 JS_SET_RVAL(cx,vp,rval);
155JSBool MFColorConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
166 if(argc == 1 && argv){
169 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
170 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
174 if(JS_IsArrayObject(cx, _arrayObj)){
179 JS_GetArrayLength(cx,_arrayObj, &lengthp);
184 if(SM_method() == 2){
187 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFColor,NULL,NULL)) == NULL){
188 printf(
"AnyfNativeNew failed in MFColorConstr.\n");
191 if (!JS_SetPrivateFw(cx, obj, any)) {
192 printf(
"JS_SetPrivate failed in MFColorConstr.\n");
196 newsize =
sizeof(
struct SFColor)*upper_power_of_two(argc);
198 anyv->mfcolor.p = MALLOC(
struct SFColor*,newsize);
199 memset(anyv->mfcolor.p,0,newsize);
203 DEFINE_LENGTH(cx,obj,argc)
209 #ifdef JSVRMLCLASSESVERBOSE
210 printf(
"MFColorConstr: obj = %p, %u args\n",
214 for (i = 0; i < argc; i++) {
217 JS_GetElement(cx, _arrayObj, i, &vp);
222 if (!JS_ValueToObject(cx, vp, &_obj)) {
224 "JS_ValueToObject failed in MFColorConstr.\n");
228 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFColorClass)
231 if((any2 = JS_GetPrivateFw(cx,_obj)) != NULL){
234 if(any2->type == FIELDTYPE_SFColor || any2->type == FIELDTYPE_SFVec3f || any2->type == FIELDTYPE_SFColorRGBA){
235 shallow_copy_field(FIELDTYPE_SFColor,any2->v,(
union anyVrml*)&anyv->mfcolor.p[i]);
236 anyv->mfcolor.n = i+1;
241 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
242 printf(
"JS_DefineElement failed for arg %u in MFColorConstr.\n", i);
247 *rval = OBJECT_TO_JSVAL(obj);
253MFColorAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
254#elif JS_VERSION == 185
255MFColorAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
257MFColorAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
258 JSObject *obj = *hobj._;
262 return doMFAddProperty(cx, obj,
id, vp,
"MFColorAddProperty");
267MFColorGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
268#elif JS_VERSION == 185
269MFColorGetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
271MFColorGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
272 JSObject *obj = *hobj._;
276 return _standardMFGetProperty(cx, obj,
id, vp,
277 "_FreeWRL_Internal = new SFColor()", FIELDTYPE_MFColor);
282MFColorSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
283#elif JS_VERSION == 185
284MFColorSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
286MFColorSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
287 JSObject *obj = *hobj._;
292 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFColor);
297MFFloatToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
299MFFloatToString(JSContext *cx, uintN argc, jsval *vp) {
300 JSObject *obj = JS_THIS_OBJECT(cx,vp);
301 jsval *argv = JS_ARGV(cx,vp);
307 return doMFToString(cx, obj,
"MFFloat", rval);
309 if (!doMFToString(cx, obj,
"MFFloat", &rval)) {
311 JS_SET_RVAL(cx,vp,rval);
318MFFloatAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
320MFFloatAssign(JSContext *cx, uintN argc, jsval *vp) {
321 JSObject *obj = JS_THIS_OBJECT(cx,vp);
322 jsval *argv = JS_ARGV(cx,vp);
325 SET_MF_ECMA_HAS_CHANGED
328 return _standardMFAssign (cx, obj, argc, argv, rval, &MFFloatClass,FIELDTYPE_SFFloat);
330 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFFloatClass,FIELDTYPE_SFFloat)) {
return JS_FALSE; }
331 JS_SET_RVAL(cx,vp,rval);
338MFFloatConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
340MFFloatConstr(JSContext *cx, uintN argc, jsval *vp) {
341 JSObject *obj = JS_NewObject(cx,&MFFloatClass,NULL,NULL);
342 jsval *argv = JS_ARGV(cx,vp);
343 jsval rval = OBJECT_TO_JSVAL(obj);
344 if (!MFFloatConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
345 JS_SET_RVAL(cx,vp,rval);
348JSBool MFFloatConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
360 if(argc == 1 && argv){
363 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
364 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
368 if(JS_IsArrayObject(cx, _arrayObj)){
373 JS_GetArrayLength(cx,_arrayObj, &lengthp);
378 if(SM_method() == 2){
380 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFFloat,NULL,NULL)) == NULL){
381 printf(
"AnyfNativeNew failed in MFFloatConstr.\n");
384 if (!JS_SetPrivateFw(cx, obj, any)) {
385 printf(
"JS_SetPrivate failed in MFFloatConstr.\n");
390 anyv->mffloat.p = malloc(
sizeof(
float)*upper_power_of_two(argc));
393 DEFINE_LENGTH(cx,obj,argc)
394 DEFINE_MF_ECMA_HAS_CHANGED
401 #ifdef JSVRMLCLASSESVERBOSE
402 printf(
"MFFloatConstr: obj = %p, %u args\n", obj, argc);
404 for (i = 0; i < argc; i++) {
407 JS_GetElement(cx, _arrayObj, i, &vp);
412 if (!JS_ValueToNumber(cx, vp, &_d)) {
413 printf(
"JS_ValueToNumber failed in MFFloatConstr.\n");
417 anyv->mffloat.p[i] = _d;
418 anyv->mffloat.n = i+1;
420 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
421 printf(
"JS_DefineElement failed for arg %u in MFFloatConstr.\n", i);
426 *rval = OBJECT_TO_JSVAL(obj);
432MFFloatAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
433#elif JS_VERSION == 185
434MFFloatAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
436MFFloatAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
437 JSObject *obj = *hobj._;
441 return doMFAddProperty(cx, obj,
id, vp,
"MFFloatAddProperty");
446MFFloatGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
447#elif JS_VERSION == 185
448MFFloatGetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
450MFFloatGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
451 JSObject *obj = *hobj._;
455 return _standardMFGetProperty(cx, obj,
id, vp,
456 "_FreeWRL_Internal = 0.0", FIELDTYPE_MFFloat);
461MFFloatSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
462#elif JS_VERSION == 185
463MFFloatSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
465MFFloatSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
466 JSObject *obj = *hobj._;
470 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFFloat);
476MFInt32ToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
478MFInt32ToString(JSContext *cx, uintN argc, jsval *vp) {
479 JSObject *obj = JS_THIS_OBJECT(cx,vp);
480 jsval *argv = JS_ARGV(cx,vp);
485 #ifdef JSVRMLCLASSESVERBOSE
486 printf (
"start of MFInt32ToString\n");
490 return doMFToString(cx, obj,
"MFInt32", rval);
492 if (!doMFToString(cx, obj,
"MFInt32", &rval)) {
return JS_FALSE; }
493 JS_SET_RVAL(cx,vp,rval);
500MFInt32Assign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
502MFInt32Assign(JSContext *cx, uintN argc, jsval *vp) {
503 JSObject *obj = JS_THIS_OBJECT(cx,vp);
504 jsval *argv = JS_ARGV(cx,vp);
507 #ifdef JSVRMLCLASSESVERBOSE
508 printf (
"start of MFInt32Assign\n");
511 SET_MF_ECMA_HAS_CHANGED
514 return _standardMFAssign (cx, obj, argc, argv, rval, &MFInt32Class,FIELDTYPE_SFInt32);
516 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFInt32Class,FIELDTYPE_SFInt32)) {
return JS_FALSE; }
517 JS_SET_RVAL(cx,vp,rval);
525MFInt32Constr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
527MFInt32Constr(JSContext *cx, uintN argc, jsval *vp) {
528 JSObject *obj = JS_NewObject(cx,&MFInt32Class,NULL,NULL);
529 jsval *argv = JS_ARGV(cx,vp);
530 jsval rval = OBJECT_TO_JSVAL(obj);
531 if (!MFInt32ConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
532 JS_SET_RVAL(cx,vp,rval);
535JSBool MFInt32ConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
542 #ifdef JSVRMLCLASSESVERBOSE
543 printf (
"start of MFInt32Constr\n");
548 if(argc == 1 && argv){
551 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
552 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
556 if(JS_IsArrayObject(cx, _arrayObj)){
561 JS_GetArrayLength(cx,_arrayObj, &lengthp);
566 if(SM_method() == 2){
569 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFInt32,NULL,NULL)) == NULL){
570 printf(
"AnyfNativeNew failed in MFInt32Constr.\n");
573 if (!JS_SetPrivateFw(cx, obj, any)) {
574 printf(
"JS_SetPrivate failed in MFInt32Constr.\n");
578 newsize =
sizeof(int) * upper_power_of_two(argc);
580 anyv->mfint32.p = MALLOC(
int*,newsize);
581 memset(anyv->mfint32.p,0,newsize);
585 DEFINE_LENGTH(cx,obj,argc)
586 DEFINE_MF_ECMA_HAS_CHANGED
592 #ifdef JSVRMLCLASSESVERBOSE
593 printf(
"MFInt32Constr: obj = %p, %u args\n", obj, argc);
597 for (i = 0; i < argc; i++) {
600 JS_GetElement(cx, _arrayObj, i, &vp);
605 if (!JS_ValueToInt32(cx, vp, &_i)) {
606 printf(
"JS_ValueToInt32 failed in MFInt32Constr.\n");
609 #ifdef JSVRMLCLASSESVERBOSE
610 printf (
"value at %d is %d\n",i,_i);
613 anyv->mfint32.p[i] = _i;
614 anyv->mfint32.n = i+1;
616 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
617 printf(
"JS_DefineElement failed for arg %u in MFInt32Constr.\n", i);
623 *rval = OBJECT_TO_JSVAL(obj);
629MFInt32AddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
630#elif JS_VERSION == 185
631MFInt32AddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
633MFInt32AddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
634 JSObject *obj = *hobj._;
638 #ifdef JSVRMLCLASSESVERBOSE
639 printf (
"start of MFInt32AddProperty\n");
642 return doMFAddProperty(cx, obj,
id, vp,
"MFInt32AddProperty");
647MFInt32GetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
648#elif JS_VERSION == 185
649MFInt32GetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
651MFInt32GetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
652 JSObject *obj = *hobj._;
656 #ifdef JSVRMLCLASSESVERBOSE
657 printf (
"start of MFInt32GetProperty\n");
660 return _standardMFGetProperty(cx, obj,
id, vp,
661 "_FreeWRL_Internal = 0", FIELDTYPE_MFInt32);
666MFInt32SetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
667#elif JS_VERSION == 185
668MFInt32SetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
670MFInt32SetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
671 JSObject *obj = *hobj._;
675 #ifdef JSVRMLCLASSESVERBOSE
676 printf (
"start of MFInt32SetProperty\n");
679 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFInt32);
685MFNodeToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
687MFNodeToString(JSContext *cx, uintN argc, jsval *vp) {
688 JSObject *obj = JS_THIS_OBJECT(cx,vp);
689 jsval *argv = JS_ARGV(cx,vp);
695 #ifdef JSVRMLCLASSESVERBOSE
696 printf (
"start of MFNODETOSTRING, obj %p\n",obj);
699 return doMFToString(cx, obj,
"MFNode", rval);
701 if (!doMFToString(cx, obj,
"MFNode", &rval)) {
return JS_FALSE; }
702 JS_SET_RVAL(cx,vp,rval);
709MFNodeAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
711MFNodeAssign(JSContext *cx, uintN argc, jsval *vp) {
712 JSObject *obj = JS_THIS_OBJECT(cx,vp);
713 jsval *argv = JS_ARGV(cx,vp);
716 #ifdef JSVRMLCLASSESVERBOSE
717 printf (
"start of MFNODEASSIGN, obj %p\n",obj);
721 return _standardMFAssign (cx, obj, argc, argv, rval, &MFNodeClass,FIELDTYPE_SFNode);
723 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFNodeClass,FIELDTYPE_SFNode)) {
return JS_FALSE; }
724 JS_SET_RVAL(cx,vp,rval);
731MFNodeConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
733MFNodeConstr(JSContext *cx, uintN argc, jsval *vp) {
734 JSObject *obj = JS_NewObject(cx,&MFNodeClass,NULL,NULL);
735 jsval *argv = JS_ARGV(cx,vp);
736 jsval rval = OBJECT_TO_JSVAL(obj);
737 if (!MFNodeConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
738 JS_SET_RVAL(cx,vp,rval);
741JSBool MFNodeConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
751 if(argc == 1 && argv){
754 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
755 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
759 if(JS_IsArrayObject(cx, _arrayObj)){
764 JS_GetArrayLength(cx,_arrayObj, &lengthp);
769 if(SM_method() == 2){
772 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFNode,NULL,NULL)) == NULL){
773 printf(
"AnyfNativeNew failed in MFNodeConstr.\n");
776 if (!JS_SetPrivateFw(cx, obj, any)) {
777 printf(
"JS_SetPrivate failed in MFNodeConstr.\n");
781 newsize =
sizeof(
struct X3D_Node *) * upper_power_of_two(argc);
783 anyv->mfnode.p = MALLOC(
struct X3D_Node**,newsize);
784 memset(anyv->mfnode.p,0,newsize);
788 DEFINE_LENGTH(cx,obj,argc)
794 #ifdef JSVRMLCLASSESVERBOSE
795 printf(
"MFNodeConstr: obj = %p, %u args\n", obj, argc);
798 for (i = 0; i < argc; i++) {
801 JS_GetElement(cx, _arrayObj, i, &vp);
806 if (JSVAL_IS_OBJECT(vp)) {
808 if (!JS_ValueToObject(cx, vp, &_obj)) {
809 printf(
"JS_ValueToObject failed in MFNodeConstr.\n");
813 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFNodeClass)
816 if((any2 = JS_GetPrivateFw(cx,_obj)) != NULL){
817 if(any2->type == FIELDTYPE_SFNode){
818 shallow_copy_field(FIELDTYPE_SFNode,any2->v,(
union anyVrml*)&anyv->mfnode.p[i]);
819 anyv->mfnode.n = i+1;
824 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
825 printf(
"JS_DefineElement failed for arg %d in MFNodeConstr.\n", i);
833 #ifdef JSVRMLCLASSESVERBOSE
834 if (JSVAL_IS_NULL(argv[i])) { printf (
"MFNodeConstr - its a NULL\n");}
835 if (JSVAL_IS_INT(argv[i])) { printf (
"MFNodeConstr - its a INT\n");}
836 if (JSVAL_IS_STRING(argv[i])) { printf (
"MFNodeConstr - its a STRING\n");}
840 *rval = OBJECT_TO_JSVAL(obj);
846MFNodeAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
847#elif JS_VERSION == 185
848MFNodeAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
850MFNodeAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
851 JSObject *obj = *hobj._;
855 #ifdef JSVRMLCLASSESVERBOSE
856 printf (
"startof MFNODEADDPROPERTY\n");
858 return doMFAddProperty(cx, obj,
id, vp,
"MFNodeAddProperty");
863MFNodeGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
864#elif JS_VERSION == 185
865MFNodeGetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
867MFNodeGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
868 JSObject *obj = *hobj._;
872 #ifdef JSVRMLCLASSESVERBOSE
873 printf (
"start of MFNODEGETPROPERTY obj %p\n",obj);
875 return _standardMFGetProperty(cx, obj,
id, vp,
876 "_FreeWRL_Internal = 0",
882MFNodeSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
883#elif JS_VERSION == 185
884MFNodeSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
886MFNodeSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
887 JSObject *obj = *hobj._;
891 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFNode);
897MFTimeAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
898#elif JS_VERSION == 185
899MFTimeAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
901MFTimeAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
902 JSObject *obj = *hobj._;
906 return doMFAddProperty(cx, obj,
id, vp,
"MFTimeAddProperty");
911MFTimeGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
912#elif JS_VERSION == 185
913MFTimeGetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
915MFTimeGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
916 JSObject *obj = *hobj._;
920 return _standardMFGetProperty(cx, obj,
id, vp,
921 "_FreeWRL_Internal = 0.0",
927MFTimeSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
928#elif JS_VERSION == 185
929MFTimeSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
931MFTimeSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
932 JSObject *obj = *hobj._;
936 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFTime);
941MFTimeToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
943MFTimeToString(JSContext *cx, uintN argc, jsval *vp) {
944 JSObject *obj = JS_THIS_OBJECT(cx,vp);
945 jsval *argv = JS_ARGV(cx,vp);
951 return doMFToString(cx, obj,
"MFTime", rval);
953 if (!doMFToString(cx, obj,
"MFTime", &rval)) {
return JS_FALSE; }
954 JS_SET_RVAL(cx,vp,rval);
961MFTimeConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
963MFTimeConstr(JSContext *cx, uintN argc, jsval *vp) {
964 JSObject *obj = JS_NewObject(cx,&MFTimeClass,NULL,NULL);
965 jsval *argv = JS_ARGV(cx,vp);
966 jsval rval = OBJECT_TO_JSVAL(obj);
967 if (!MFTimeConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
968 JS_SET_RVAL(cx,vp,rval);
971JSBool MFTimeConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
981 if(argc == 1 && argv){
984 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
985 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
989 if(JS_IsArrayObject(cx, _arrayObj)){
994 JS_GetArrayLength(cx,_arrayObj, &lengthp);
999 if(SM_method() == 2){
1002 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFTime,NULL,NULL)) == NULL){
1003 printf(
"AnyfNativeNew failed in MFTimeConstr.\n");
1006 if (!JS_SetPrivateFw(cx, obj, any)) {
1007 printf(
"JS_SetPrivate failed in MFTimeConstr.\n");
1011 newsize =
sizeof(double) * upper_power_of_two(argc);
1013 anyv->mftime.p = MALLOC(
double*,newsize);
1014 memset(anyv->mftime.p,0,newsize);
1018 DEFINE_LENGTH(cx,obj,argc)
1019 DEFINE_MF_ECMA_HAS_CHANGED
1025 #ifdef JSVRMLCLASSESVERBOSE
1026 printf(
"MFTimeConstr: obj = %p, %u args\n", obj, argc);
1028 for (i = 0; i < argc; i++) {
1031 JS_GetElement(cx, _arrayObj, i, &vp);
1036 if (!JS_ValueToNumber(cx, vp, &_d)) {
1038 "JS_ValueToNumber failed in MFTimeConstr.\n");
1042 anyv->mftime.p[i] = _d;
1043 anyv->mftime.n = i+1;
1045 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
1046 printf(
"JS_DefineElement failed for arg %u in MFTimeConstr.\n", i);
1051 *rval = OBJECT_TO_JSVAL(obj);
1057MFTimeAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1059MFTimeAssign(JSContext *cx, uintN argc, jsval *vp) {
1060 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1061 jsval *argv = JS_ARGV(cx,vp);
1064 SET_MF_ECMA_HAS_CHANGED
1067 return _standardMFAssign (cx, obj, argc, argv, rval, &MFTimeClass,FIELDTYPE_SFTime);
1069 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFTimeClass,FIELDTYPE_SFTime)) {
return JS_FALSE; }
1070 JS_SET_RVAL(cx,vp,rval);
1079MFVec2fAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp) {
1080#elif JS_VERSION == 185
1081MFVec2fAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
1083MFVec2fAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
1084 JSObject *obj = *hobj._;
1088 return doMFAddProperty(cx, obj,
id, vp,
"MFVec2fAddProperty");
1093MFVec2fGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1094#elif JS_VERSION == 185
1095MFVec2fGetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
1097MFVec2fGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
1098 JSObject *obj = *hobj._;
1102 return _standardMFGetProperty(cx, obj,
id, vp,
1103 "_FreeWRL_Internal = new SFVec2f()",FIELDTYPE_MFVec2f);
1108MFVec2fSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1109#elif JS_VERSION == 185
1110MFVec2fSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
1112MFVec2fSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1113 JSObject *obj = *hobj._;
1117 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFVec2f);
1122MFVec2fToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1124MFVec2fToString(JSContext *cx, uintN argc, jsval *vp) {
1125 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1126 jsval *argv = JS_ARGV(cx,vp);
1132 return doMFToString(cx, obj,
"MFVec2f", rval);
1134 if (!doMFToString(cx, obj,
"MFVec2f", &rval)) {
return JS_FALSE; }
1135 JS_SET_RVAL(cx,vp,rval);
1142MFVec2fConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1144MFVec2fConstr(JSContext *cx, uintN argc, jsval *vp) {
1145 JSObject *obj = JS_NewObject(cx,&MFVec2fClass,NULL,NULL);
1146 jsval *argv = JS_ARGV(cx,vp);
1147 jsval rval = OBJECT_TO_JSVAL(obj);
1148 if (!MFVec2fConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
1149 JS_SET_RVAL(cx,vp,rval);
1152JSBool MFVec2fConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1154 JSObject *_arrayObj;
1162 if(argc == 1 && argv){
1165 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
1166 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
1170 if(JS_IsArrayObject(cx, _arrayObj)){
1175 JS_GetArrayLength(cx,_arrayObj, &lengthp);
1180 if(SM_method() == 2){
1183 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFVec2f,NULL,NULL)) == NULL){
1184 printf(
"AnyfNativeNew failed in MFVec2fConstr.\n");
1187 if (!JS_SetPrivateFw(cx, obj, any)) {
1188 printf(
"JS_SetPrivate failed in MFVec2fConstr.\n");
1192 newsize =
sizeof(
struct SFVec2f)*upper_power_of_two(argc);
1194 anyv->mfvec2f.p = MALLOC(
struct SFVec2f*,newsize);
1195 memset(anyv->mfvec2f.p,0,newsize);
1199 DEFINE_LENGTH(cx,obj,argc)
1206 #ifdef JSVRMLCLASSESVERBOSE
1207 printf(
"MFVec2fConstr: obj = %p, %u args\n", obj, argc);
1210 for (i = 0; i < argc; i++) {
1213 JS_GetElement(cx, _arrayObj, i, &vp);
1218 if (!JS_ValueToObject(cx, vp, &_obj)) {
1219 printf(
"JS_ValueToObject failed in MFVec2fConstr.\n");
1223 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFVec2fClass)
1226 if((any2 = JS_GetPrivateFw(cx,_obj)) != NULL){
1229 if(any2->type == FIELDTYPE_SFVec2f || any2->type == FIELDTYPE_SFColor || any2->type == FIELDTYPE_SFVec3f || any2->type == FIELDTYPE_SFColorRGBA){
1230 shallow_copy_field(FIELDTYPE_SFVec2f,any2->v,(
union anyVrml*)&anyv->mfvec2f.p[i]);
1231 anyv->mfvec2f.n = i+1;
1236 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
1237 printf(
"JS_DefineElement failed for arg %d in MFVec2fConstr.\n", i);
1242 *rval = OBJECT_TO_JSVAL(obj);
1248MFVec2fAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1249 return _standardMFAssign (cx, obj, argc, argv, rval, &MFVec2fClass,FIELDTYPE_SFVec2f);
1251MFVec2fAssign(JSContext *cx, uintN argc, jsval *vp) {
1252 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1253 jsval *argv = JS_ARGV(cx,vp);
1255 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFVec2fClass,FIELDTYPE_SFVec2f)) {
return JS_FALSE; }
1256 JS_SET_RVAL(cx,vp,rval);
1264MFVec3fAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1265#elif JS_VERSION == 185
1266MFVec3fAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
1268MFVec3fAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
1269 JSObject *obj = *hobj._;
1273 return doMFAddProperty(cx, obj,
id, vp,
"MFVec3fAddProperty");
1278MFVec3fGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1279#elif JS_VERSION == 185
1280MFVec3fGetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
1282MFVec3fGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
1283 JSObject *obj = *hobj._;
1287 return _standardMFGetProperty(cx, obj,
id, vp,
1288 "_FreeWRL_Internal = new SFVec3f()",FIELDTYPE_MFVec3f);
1293MFVec3fSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
1294#elif JS_VERSION == 185
1295MFVec3fSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
1297MFVec3fSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
1298 JSObject *obj = *hobj._;
1302 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFVec3f);
1307MFVec3fToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1309MFVec3fToString(JSContext *cx, uintN argc, jsval *vp) {
1310 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1311 jsval *argv = JS_ARGV(cx,vp);
1318 return doMFToString(cx, obj,
"MFVec3f", rval);
1320 if (!doMFToString(cx, obj,
"MFVec3f", &rval)) {
return JS_FALSE; }
1321 JS_SET_RVAL(cx,vp,rval);
1328MFVec3fConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1330MFVec3fConstr(JSContext *cx, uintN argc, jsval *vp) {
1331 JSObject *obj = JS_NewObject(cx,&MFVec3fClass,NULL,NULL);
1332 jsval *argv = JS_ARGV(cx,vp);
1333 jsval rval = OBJECT_TO_JSVAL(obj);
1334 if (!MFVec3fConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
1335 JS_SET_RVAL(cx,vp,rval);
1338JSBool MFVec3fConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1340 JSObject *_arrayObj;
1349 if(argc == 1 && argv){
1352 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
1353 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
1357 if(JS_IsArrayObject(cx, _arrayObj)){
1362 JS_GetArrayLength(cx,_arrayObj, &lengthp);
1369 if(SM_method() == 2){
1372 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFVec3f,NULL,NULL)) == NULL){
1373 printf(
"AnyfNativeNew failed in MFVec3fConstr.\n");
1376 if (!JS_SetPrivateFw(cx, obj, any)) {
1377 printf(
"JS_SetPrivate failed in MFVec3fConstr.\n");
1381 newsize =
sizeof(
struct SFVec3f)*upper_power_of_two(argc);
1383 anyv->mfvec3f.p = MALLOC(
struct SFVec3f*,newsize);
1384 memset(anyv->mfvec3f.p,0,newsize);
1388 DEFINE_LENGTH(cx,obj,argc)
1394 #ifdef JSVRMLCLASSESVERBOSE
1395 printf(
"MFVec3fConstr: obj = %p, %u args\n", obj, argc);
1397 for (i = 0; i < argc; i++) {
1400 JS_GetElement(cx, _arrayObj, i, &vp);
1405 if (!JS_ValueToObject(cx, vp, &_obj)) {
1406 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
1410 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFVec3fClass)
1414 if((any2 = JS_GetPrivateFw(cx,_obj)) != NULL){
1417 if(any2->type == FIELDTYPE_SFVec3f || any2->type == FIELDTYPE_SFColor || any2->type == FIELDTYPE_SFColorRGBA){
1418 shallow_copy_field(FIELDTYPE_SFVec3f,any2->v,(
union anyVrml*)&anyv->mfvec3f.p[i]);
1419 anyv->mfvec3f.n = i+1;
1425 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
1426 printf(
"JS_DefineElement failed for arg %d in MFVec3fConstr.\n", i);
1431 *rval = OBJECT_TO_JSVAL(obj);
1437MFVec3fAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1438 return _standardMFAssign (cx, obj, argc, argv, rval, &MFVec3fClass,FIELDTYPE_SFVec3f);
1440MFVec3fAssign(JSContext *cx, uintN argc, jsval *vp) {
1441 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1442 jsval *argv = JS_ARGV(cx,vp);
1444 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFVec3fClass,FIELDTYPE_SFVec3f)) {
return JS_FALSE; }
1445 JS_SET_RVAL(cx,vp,rval);
1452static void _setmatrix (JSContext *cx, JSObject *obj,
double *matrix) {
1455 for (i=0; i<16; i++) {
1457 if (JS_NewNumberValue(cx, matrix[i],&val) == JS_FALSE) {
1458 printf (
"problem creating id matrix\n");
1462 if (!JS_SetElement(cx, obj, (jsint) i, &val)) {
1463 printf(
"JS_DefineElement failed for arg %u in VrmlMatrixSetTransform.\n", i);
1470static void _getmatrix (JSContext *cx, JSObject *obj,
double *fl) {
1477 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_length_val)) {
1478 printf(
"JS_GetProperty failed for \"%s\" in _getmatrix.\n", MF_LENGTH_FIELD);
1481 _length = JSVAL_TO_INT(_length_val);
1484 #ifdef JSVRMLCLASSESVERBOSE
1485 printf (
"_getmatrix, length %d\n",_length);
1489 if (_length>16) _length = 16;
1491 for (i = 0; i < _length; i++) {
1492 if (!JS_GetElement(cx, obj, (jsint) i, &val)) {
1493 printf(
"failed in get of copyElements index %d.\n", i);
1496 if (!JS_ValueToNumber(cx, val, &d)) {
1497 printf (
"this is not a mumber!\n");
1504 for (i=_length; i < 16; i++) {
1512VrmlMatrixToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1514VrmlMatrixToString(JSContext *cx, uintN argc, jsval *vp) {
1515 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1516 jsval *argv = JS_ARGV(cx,vp);
1523 return doMFToString(cx, obj,
"MFFloat", rval);
1525 if (!doMFToString(cx, obj,
"MFFloat", &rval)) {
return JS_FALSE; }
1526 JS_SET_RVAL(cx,vp,rval);
1532void _get4f(
double *ret,
double *mat,
int row) {
1533 if (row == 0) {ret[0]=MAT00;ret[1]=MAT01;ret[2]=MAT02;ret[3]=MAT03;}
1534 if (row == 1) {ret[0]=MAT10;ret[1]=MAT11;ret[2]=MAT12;ret[3]=MAT13;}
1535 if (row == 2) {ret[0]=MAT20;ret[1]=MAT21;ret[2]=MAT22;ret[3]=MAT23;}
1539void _set4f(
double len,
double *mat,
int row) {
1540 if (row == 0) {MAT00=MAT00/len;MAT01=MAT01/len;MAT02=MAT02/len;MAT03=MAT03/len;}
1541 if (row == 1) {MAT10=MAT10/len;MAT11=MAT11/len;MAT12=MAT12/len;MAT13=MAT13/len;}
1542 if (row == 2) {MAT20=MAT20/len;MAT21=MAT21/len;MAT22=MAT22/len;MAT23=MAT23/len;}
1547VrmlMatrixgetTransform(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1549VrmlMatrixgetTransform(JSContext *cx, uintN argc, jsval *vp) {
1550 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1551 jsval *argv = JS_ARGV(cx,vp);
1554 JSObject *transObj = NULL;
1555 JSObject *rotObj = NULL;
1556 JSObject *scaleObj = NULL;
1563 double r0[4], r1[4], r2[4];
1567 _getmatrix(cx,obj,matrix);
1569 _get4f(r0,matrix,0);
1570 _get4f(r1,matrix,1);
1571 _get4f(r2,matrix,2);
1573 l0 = sqrt(r0[0]*r0[0] + r0[1]*r0[1] + r0[2]*r0[2] +r0[3]*r0[3]);
1574 l1 = sqrt(r1[0]*r1[0] + r1[1]*r1[1] + r1[2]*r1[2] +r1[3]*r1[3]);
1575 l2 = sqrt(r2[0]*r2[0] + r2[1]*r2[1] + r2[2]*r2[2] +r2[3]*r2[3]);
1578 if (!JS_ConvertArguments(cx, argc, argv,
"o", &transObj)) {
1579 printf (
"getTransform, invalid parameters\n");
1584 if (!JS_ConvertArguments(cx, argc, argv,
"o o", &transObj, &rotObj)) {
1585 printf (
"getTransform, invalid parameters\n");
1590 if (!JS_ConvertArguments(cx, argc, argv,
"o o o",
1591 &transObj,&rotObj,&scaleObj)) {
1592 printf (
"getTransform, invalid parameters\n");
1598 if (transObj!=NULL) {
1599 CHECK_CLASS(cx,transObj,NULL,__FUNCTION__,SFVec3fClass)
1601 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, transObj)) == NULL) {
1602 printf(
"JS_GetPrivate failed.\n");
1605 (Vptr->v).c[0] = (
float) matrix[12];
1606 (Vptr->v).c[1] = (
float) matrix[13];
1607 (Vptr->v).c[2] = (
float) matrix[14];
1608 Vptr->valueChanged++;
1614 CHECK_CLASS(cx,rotObj,NULL,__FUNCTION__,SFRotationClass)
1617 printf(
"JS_GetPrivate failed.\n");
1622 _set4f(l0, matrix, 0);
1623 _set4f(l1, matrix, 1);
1624 _set4f(l2, matrix, 2);
1627 matrix_to_quaternion (&quat, matrix);
1628 #ifdef JSVRMLCLASSESVERBOSE
1629 printf (
"quaternion %f %f %f %f\n",quat.x,quat.y,quat.z,quat.w);
1633 quaternion_to_vrmlrot(&quat, &qu[0],&qu[1],&qu[2],&qu[3]);
1636 for (i=0; i<4; i++) (Rptr->v).c[i] = (float) qu[i];
1637 Rptr->valueChanged = 1;
1641 if (scaleObj != NULL) {
1642 CHECK_CLASS(cx,scaleObj,NULL,__FUNCTION__,SFVec3fClass)
1644 if ((Vptr = (
SFVec3fNative*)JS_GetPrivateFw(cx, scaleObj)) == NULL) {
1645 printf(
"JS_GetPrivate failed.\n");
1648 (Vptr->v).c[0] = (
float) l0;
1649 (Vptr->v).c[1] = (
float) l1;
1650 (Vptr->v).c[2] = (
float) l2;
1651 Vptr->valueChanged = 1;
1657 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(NULL));
1671VrmlMatrixsetTransform(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1673VrmlMatrixsetTransform(JSContext *cx, uintN argc, jsval *vp) {
1674 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1675 jsval *argv = JS_ARGV(cx,vp);
1677 JSObject *transObj = NULL;
1678 JSObject *rotObj = NULL;
1679 JSObject *scaleObj = NULL;
1680 JSObject *scaleOObj = NULL;
1681 JSObject *centerObj = NULL;
1690 FW_GL_MATRIX_MODE(GL_MODELVIEW);
1691 FW_GL_PUSH_MATRIX();
1692 FW_GL_LOAD_IDENTITY();
1697 loadIdentityMatrix(matrix);
1700 if (!JS_InstanceOf(cx, obj, &VrmlMatrixClass, NULL)) {
1704 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1707 error = !JS_ConvertArguments(cx, argc, argv,
"o o", &transObj,
1711 error = !JS_ConvertArguments(cx, argc, argv,
"o o o",
1712 &transObj,&rotObj,&scaleObj);
1715 error = !JS_ConvertArguments(cx, argc, argv,
"o o o o",
1716 &transObj,&rotObj,&scaleObj,&scaleOObj);
1719 error = !JS_ConvertArguments(cx, argc, argv,
"o o o o o",
1720 &transObj,&rotObj,&scaleObj,&scaleOObj,¢erObj);
1722 if (argc > 5) { error = TRUE; }
1726 ConsoleMessage (
"setTransform: error in parameters");
1731 if (transObj != NULL)
1732 error = !JS_InstanceOf(cx, transObj, &SFVec3fClass, NULL);
1733 if (!error && (rotObj != NULL))
1734 error = !JS_InstanceOf(cx, rotObj, &SFRotationClass, NULL);
1735 if (!error && (scaleObj != NULL))
1736 error = !JS_InstanceOf(cx, scaleObj, &SFVec3fClass, NULL);
1737 if (!error && (scaleOObj != NULL))
1738 error = !JS_InstanceOf(cx, scaleOObj, &SFRotationClass, NULL);
1739 if (!error && centerObj != NULL)
1740 error = !JS_InstanceOf(cx, centerObj, &SFVec3fClass, NULL);
1743 ConsoleMessage (
"setTransform: at least one parameter incorrect type");
1751 error = (Vptr == NULL);
1754 matrix[12]=Vptr->v.c[0];
1755 matrix[13]=Vptr->v.c[1];
1756 matrix[14]=Vptr->v.c[2];
1760 if (!error && (rotObj != NULL)) {
1763 error = (Rptr == NULL);
1767 vrmlrot_to_quaternion(&quat, Rptr->v.c[0], Rptr->v.c[1], Rptr->v.c[2], Rptr->v.c[3]);
1770 quaternion_to_matrix (matrix, &quat);
1774 if (!error && (scaleObj != NULL)) {
1777 error = (Vptr == NULL);
1782 COPY_SFVEC3F_TO_POINT_XYZ (myScale,Vptr->v.c);
1783 scale_to_matrix(matrix, &myScale);
1789 _setmatrix (cx, obj, matrix);
1792 printf (
"calculated Matrix: \n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n",
1793 matrix[0], matrix[4], matrix[ 8], matrix[12],
1794 matrix[1], matrix[5], matrix[ 9], matrix[13],
1795 matrix[2], matrix[6], matrix[10], matrix[14],
1796 matrix[3], matrix[7], matrix[11], matrix[15]);
1797 glGetDoublev(GL_MODELVIEW,xxmat);
1798 printf (
"modelview Matrix: \n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n\t%5.2f %5.2f %5.2f %5.2f\n",
1799 xxmat[0], xxmat[4], xxmat[ 8], xxmat[12],
1800 xxmat[1], xxmat[5], xxmat[ 9], xxmat[13],
1801 xxmat[2], xxmat[6], xxmat[10], xxmat[14],
1802 xxmat[3], xxmat[7], xxmat[11], xxmat[15]);
1806#if JS_VERSION >= 185
1808 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(NULL));
1816VrmlMatrixinverse(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1818VrmlMatrixinverse(JSContext *cx, uintN argc, jsval *vp) {
1819 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1820 jsval *argv = JS_ARGV(cx,vp);
1828 printf (
"VrmlMatrix, expect 0 parameters\n");
1831 _getmatrix (cx, obj,src);
1832 matinverseFULL (dest,src);
1834 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1836 _setmatrix(cx,retObj,dest);
1838 *rval = OBJECT_TO_JSVAL(retObj);
1840 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1848VrmlMatrixtranspose(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1850VrmlMatrixtranspose(JSContext *cx, uintN argc, jsval *vp) {
1851 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1852 jsval *argv = JS_ARGV(cx,vp);
1860 printf (
"VrmlMatrix, expect 0 parameters\n");
1863 _getmatrix (cx, obj,src);
1864 mattranspose (dest,src);
1866 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1868 _setmatrix(cx,retObj,dest);
1870 *rval = OBJECT_TO_JSVAL(retObj);
1872 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1881VrmlMatrixmultLeft(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1883VrmlMatrixmultLeft(JSContext *cx, uintN argc, jsval *vp) {
1884 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1885 jsval *argv = JS_ARGV(cx,vp);
1887 JSObject *transObj = NULL;
1888 JSObject *retObj = NULL;
1895 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1896 }
else error = TRUE;
1898 if (!error)
if (!JS_InstanceOf(cx, transObj, &VrmlMatrixClass, NULL)) { error = TRUE;}
1901 ConsoleMessage (
"VrmlMatrixMultLeft, error in params");
1906 _getmatrix(cx,obj,matrix1);
1907 _getmatrix(cx,transObj,matrix2);
1908 matmultiplyFULL(matrix1,matrix1,matrix2);
1910 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1919 _setmatrix(cx,retObj,matrix1);
1921 *rval = OBJECT_TO_JSVAL(retObj);
1923 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1931VrmlMatrixmultRight(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1933VrmlMatrixmultRight(JSContext *cx, uintN argc, jsval *vp) {
1934 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1935 jsval *argv = JS_ARGV(cx,vp);
1937 JSObject *transObj = NULL;
1938 JSObject *retObj = NULL;
1945 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1946 }
else error = TRUE;
1948 if (!error)
if (!JS_InstanceOf(cx, transObj, &VrmlMatrixClass, NULL)) { error = TRUE;}
1951 ConsoleMessage (
"VrmlMatrixMultRight, error in params");
1956 _getmatrix(cx,obj,matrix1);
1957 _getmatrix(cx,transObj,matrix2);
1958 matmultiplyFULL(matrix1,matrix2,matrix1);
1960 retObj = JS_ConstructObjectFw(cx,&VrmlMatrixClass,NULL, NULL);
1969 _setmatrix(cx,retObj,matrix1);
1971 *rval = OBJECT_TO_JSVAL(retObj);
1973 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
1982VrmlMatrixmultVecMatrix(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
1984VrmlMatrixmultVecMatrix(JSContext *cx, uintN argc, jsval *vp) {
1985 JSObject *obj = JS_THIS_OBJECT(cx,vp);
1986 jsval *argv = JS_ARGV(cx,vp);
1988 JSObject *transObj = NULL;
1989 JSObject *retObj = NULL;
1995 outp.x = outp.y = outp.z = 0.0;
1998 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
1999 }
else error = TRUE;
2001 if (!error)
if (!JS_InstanceOf(cx, transObj, &SFVec3fClass, NULL)) { error = TRUE;}
2003 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, transObj)) == NULL) {
2008 ConsoleMessage (
"VrmlMatrixMultVec, error in params");
2012 COPY_SFVEC3F_TO_POINT_XYZ(inp,Vptr->v.c);
2015 _getmatrix(cx,obj,matrix1);
2020 matrotate2v(matrix1, inp, outp);
2022 retObj = JS_ConstructObjectFw(cx,&SFVec3fClass,NULL, NULL);
2023 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, retObj)) == NULL) {
2024 printf (
"error in new VrmlMatrix\n");
2028 COPY_POINT_XYZ_TO_SFVEC3F(Vptr->v.c,outp);
2030 *rval = OBJECT_TO_JSVAL(retObj);
2032 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
2041VrmlMatrixmultMatrixVec(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2043VrmlMatrixmultMatrixVec(JSContext *cx, uintN argc, jsval *vp) {
2044 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2045 jsval *argv = JS_ARGV(cx,vp);
2047 JSObject *transObj = NULL;
2048 JSObject *retObj = NULL;
2054 outp.x = outp.y = outp.z = 0.0;
2057 error = !JS_ConvertArguments(cx, argc, argv,
"o", &transObj);
2058 }
else error = TRUE;
2060 if (!error)
if (!JS_InstanceOf(cx, transObj, &SFVec3fClass, NULL)) { error = TRUE;}
2062 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, transObj)) == NULL) {
2067 ConsoleMessage (
"VrmlMatrixMultVec, error in params");
2071 COPY_SFVEC3F_TO_POINT_XYZ(inp,Vptr->v.c);
2074 _getmatrix(cx,obj,matrix1);
2077 mattranspose (matrix1, matrix1);
2079 matrotate2v(matrix1, inp, outp);
2081 retObj = JS_ConstructObjectFw(cx,&SFVec3fClass,NULL, NULL);
2082 if ((Vptr = (
SFVec3fNative *)JS_GetPrivateFw(cx, retObj)) == NULL) {
2083 printf (
"error in new VrmlMatrix\n");
2087 COPY_POINT_XYZ_TO_SFVEC3F(Vptr->v.c,outp);
2089 *rval = OBJECT_TO_JSVAL(retObj);
2091 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(retObj));
2100VrmlMatrixAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2101 return _standardMFAssign (cx, obj, argc, argv, rval, &VrmlMatrixClass,FIELDTYPE_FreeWRLPTR);
2103VrmlMatrixAssign(JSContext *cx, uintN argc, jsval *vp) {
2104 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2105 jsval *argv = JS_ARGV(cx,vp);
2107 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &VrmlMatrixClass,FIELDTYPE_FreeWRLPTR)) {
return JS_FALSE; }
2108 JS_SET_RVAL(cx,vp,rval);
2115VrmlMatrixConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2117VrmlMatrixConstr(JSContext *cx, uintN argc, jsval *vp) {
2118 JSObject *obj = JS_NewObject(cx,&VrmlMatrixClass,NULL,NULL);
2119 jsval *argv = JS_ARGV(cx,vp);
2120 jsval rval = OBJECT_TO_JSVAL(obj);
2121 if (!VrmlMatrixConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
2122 JS_SET_RVAL(cx,vp,rval);
2125JSBool VrmlMatrixConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2127 JSObject *_arrayObj;
2135 if(argc == 1 && argv){
2138 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
2139 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
2143 if(JS_IsArrayObject(cx, _arrayObj)){
2148 JS_GetArrayLength(cx,_arrayObj, &lengthp);
2153 if ((argc != 16) && (argc != 0)) {
2154 printf (
"VrmlMatrixConstr - require either 16 or no values\n");
2158 DEFINE_LENGTH(cx,obj,16)
2161 for (i = 0; i < 16; i++) {
2164 JS_GetElement(cx, _arrayObj, i, &vp);
2169 if (!JS_ValueToNumber(cx, vp, &_d)) {
2171 "JS_ValueToNumber failed in VrmlMatrixConstr.\n");
2175 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2176 printf(
"JS_DefineElement failed for arg %u in VrmlMatrixConstr.\n", i);
2183 loadIdentityMatrix(matrix);
2184 _setmatrix (cx, obj, matrix);
2186 *rval = OBJECT_TO_JSVAL(obj);
2192VrmlMatrixAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
2193#elif JS_VERSION == 185
2194VrmlMatrixAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
2196VrmlMatrixAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
2197 JSObject *obj = *hobj._;
2201 return doMFAddProperty(cx, obj,
id, vp,
"VrmlMatrixAddProperty");
2206VrmlMatrixGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
2207#elif JS_VERSION == 185
2208VrmlMatrixGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
2210VrmlMatrixGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
2211 JSObject *obj = *hobj._;
2215 int32 _length, _index;
2218#if JS_VERSION >= 185
2220 if (!JS_IdToValue(cx,iid,&
id)) {
2221 printf(
"JS_IdToValue failed in VrmlMatrixGetproperty.\n");
2226 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_length_val)) {
2227 printf(
"JS_GetProperty failed for \"%s\" in VrmlMatrixGetProperty.\n", MF_LENGTH_FIELD);
2230 _length = JSVAL_TO_INT(_length_val);
2250 if (JSVAL_IS_INT(
id)) {
2251 _index = JSVAL_TO_INT(
id);
2253 if (_index >= _length) {
2254 JS_NewNumberValue(cx,0.0,vp);
2255 if (!JS_DefineElement(cx, obj, (jsint) _index, *vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2256 printf(
"JS_DefineElement failed in VrmlMatrixGetProperty.\n");
2260 if (!JS_LookupElement(cx, obj, _index, vp)) {
2262 "JS_LookupElement failed in VrmlMatrixGetProperty.\n");
2265 if (JSVAL_IS_NULL(*vp)) {
2266 printf(
"VrmlMatrixGetProperty: obj = %p, jsval = %d does not exist!\n",
2271 }
else if (JSVAL_IS_OBJECT(
id)) {
2279VrmlMatrixSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
2280#elif JS_VERSION == 185
2281VrmlMatrixSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
2283VrmlMatrixSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
2284 JSObject *obj = *hobj._;
2288 return doMFSetProperty(cx, obj,
id, vp,1000);
2294MFRotationAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
2295#elif JS_VERSION == 185
2296MFRotationAddProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
2298MFRotationAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
2299 JSObject *obj = *hobj._;
2303 return doMFAddProperty(cx, obj,
id, vp,
"MFRotationAddProperty");
2308MFRotationGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
2309#elif JS_VERSION == 185
2310MFRotationGetProperty(JSContext *cx, JSObject *obj, jsid
id, jsval *vp){
2312MFRotationGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
2313 JSObject *obj = *hobj._;
2317 return _standardMFGetProperty(cx, obj,
id, vp,
2318 "_FreeWRL_Internal = new SFRotation()",FIELDTYPE_MFRotation);
2323MFRotationSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
2324#elif JS_VERSION == 185
2325MFRotationSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
2327MFRotationSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
2328 JSObject *obj = *hobj._;
2332 return doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFRotation);
2337MFRotationToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2339MFRotationToString(JSContext *cx, uintN argc, jsval *vp) {
2340 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2341 jsval *argv = JS_ARGV(cx,vp);
2347 return doMFToString(cx, obj,
"MFRotation", rval);
2349 if (!doMFToString(cx, obj,
"MFRotation", &rval)) {
return JS_FALSE; }
2350 JS_SET_RVAL(cx,vp,rval);
2357MFRotationConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2359MFRotationConstr(JSContext *cx, uintN argc, jsval *vp) {
2360 JSObject *obj = JS_NewObject(cx,&MFRotationClass,NULL,NULL);
2361 jsval *argv = JS_ARGV(cx,vp);
2362 jsval rval = OBJECT_TO_JSVAL(obj);
2363 if (!MFRotationConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
2364 JS_SET_RVAL(cx,vp,rval);
2367JSBool MFRotationConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2369 JSObject *_arrayObj;
2378 if(argc == 1 && argv){
2381 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
2382 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
2386 if(JS_IsArrayObject(cx, _arrayObj)){
2391 JS_GetArrayLength(cx,_arrayObj, &lengthp);
2396 if(SM_method() == 2){
2399 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFRotation,NULL,NULL)) == NULL){
2400 printf(
"AnyfNativeNew failed in MFRotationConstr.\n");
2403 if (!JS_SetPrivateFw(cx, obj, any)) {
2404 printf(
"JS_SetPrivate failed in MFRotationConstr.\n");
2408 newsize =
sizeof(
struct SFRotation)*upper_power_of_two(argc);
2410 anyv->mfrotation.p = MALLOC(
struct SFRotation*,newsize);
2411 memset(anyv->mfrotation.p,0,newsize);
2415 DEFINE_LENGTH(cx,obj,argc)
2422 #ifdef JSVRMLCLASSESVERBOSE
2423 printf(
"MFRotationConstr: obj = %p, %u args\n", obj, argc);
2425 for (i = 0; i < argc; i++) {
2428 JS_GetElement(cx, _arrayObj, i, &vp);
2433 if (!JS_ValueToObject(cx, vp, &_obj)) {
2435 "JS_ValueToObject failed in MFRotationConstr.\n");
2439 CHECK_CLASS(cx,_obj,NULL,__FUNCTION__,SFRotationClass)
2442 if((any2 = JS_GetPrivateFw(cx,_obj)) != NULL){
2443 if(any2->type == FIELDTYPE_SFRotation ){
2444 shallow_copy_field(FIELDTYPE_SFRotation,any2->v,(
union anyVrml*)&anyv->mfrotation.p[i]);
2445 anyv->mfrotation.n = i+1;
2450 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2451 printf(
"JS_DefineElement failed for arg %d in MFRotationConstr.\n", i);
2456 *rval = OBJECT_TO_JSVAL(obj);
2462MFRotationAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2463 return _standardMFAssign (cx, obj, argc, argv, rval, &MFRotationClass,FIELDTYPE_SFRotation);
2465MFRotationAssign(JSContext *cx, uintN argc, jsval *vp) {
2466 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2467 jsval *argv = JS_ARGV(cx,vp);
2470 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFRotationClass,FIELDTYPE_SFRotation)) {
return JS_FALSE; }
2471 JS_SET_RVAL(cx,vp,rval);
2479MFStringAddProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
2480#elif JS_VERSION == 185
2481MFStringAddProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp) {
2483 if (!JS_IdToValue(cx,iid,&
id)) {
2484 printf(
"JS_IdToValue failed in MFStringAddProperty\n");
2488MFStringAddProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
2489 JSObject *obj = *hobj._;
2493 if (!JS_IdToValue(cx,iid,&
id)) {
2494 printf(
"JS_IdToValue failed in MFStringAddProperty\n");
2499 #ifdef JSVRMLCLASSESVERBOSE
2500 printf(
"MFStringAddProperty: vp = %p\n", obj);
2501 if (JSVAL_IS_STRING(*vp)==TRUE) {
2502 printf(
" is a common string :%s:\n",
2504 JS_GetStringBytes(JS_ValueToString(cx, *vp)));
2506 JS_EncodeString(cx,JS_ValueToString(cx, *vp)));
2509 if (JSVAL_IS_OBJECT(*vp)==TRUE) {
2510 printf (
" parameter is an object\n");
2512 if (JSVAL_IS_PRIMITIVE(*vp)==TRUE) {
2513 printf (
" parameter is a primitive\n");
2515 if (JSVAL_IS_NULL(*vp)) { printf (
" - its a NULL\n");}
2516 if (JSVAL_IS_INT(*vp)) { printf (
" - its a INT %d\n",JSVAL_TO_INT(*vp));}
2518 printf(
"MFStringAddProperty: id = %p\n", obj);
2519 if (JSVAL_IS_STRING(
id)==TRUE) {
2520 printf(
" is a common string :%s:\n",
2522 JS_GetStringBytes(JS_ValueToString(cx,
id)));
2524 JS_EncodeString(cx,JS_ValueToString(cx,
id)));
2527 if (JSVAL_IS_OBJECT(
id)==TRUE) {
2528 printf (
" parameter is an object\n");
2530 if (JSVAL_IS_PRIMITIVE(
id)==TRUE) {
2531 printf (
" parameter is a primitive\n");
2533 if (JSVAL_IS_NULL(
id)) { printf (
" - its a NULL\n");}
2534 if (JSVAL_IS_INT(
id)) { printf (
" - its a INT %d\n",JSVAL_TO_INT(
id));}
2540 if (JSVAL_IS_STRING(*vp)) {
2541 if (!doMFStringUnquote(cx, vp)) {
2543 "doMFStringUnquote failed in MFStringAddProperty.\n");
2548 return doMFAddProperty(cx, obj,
id, vp,
"MFStringAddProperty");
2550 return doMFAddProperty(cx, obj, iid, vp,
"MFStringAddProperty");
2557MFStringGetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
2558#elif JS_VERSION == 185
2559MFStringGetProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
2561MFStringGetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
2562 JSObject *obj = *hobj._;
2568 int32 _length, _index;
2570#if JS_VERSION >= 185
2572 if (!JS_IdToValue(cx,iid,&
id)) {
2573 printf(
"JS_IdToValue failed in MFStringGetProperty\n");
2578 return _standardMFGetProperty(cx, obj, iid, vp,
2579 "_FreeWRL_Internal = new SFString()",FIELDTYPE_MFString);
2583 #ifdef JSVRMLCLASSESVERBOSE
2584 printf(
"MFStringGetProperty: obj = %p\n", obj);
2587 if (!JS_GetProperty(cx, obj, MF_LENGTH_FIELD, &_length_val)) {
2588 printf(
"JS_GetProperty failed for \"%s\" in MFStringGetProperty.\n", MF_LENGTH_FIELD);
2591 _length = JSVAL_TO_INT(_length_val);
2593 if (JSVAL_IS_INT(
id)) {
2594 _index = JSVAL_TO_INT(
id);
2596 if (_index >= _length) {
2597 _str = JS_NewStringCopyZ(cx,
"");
2598 *vp = STRING_TO_JSVAL(_str);
2599 if (!JS_DefineElement(cx, obj, (jsint) _index, *vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2600 printf(
"JS_DefineElement failed in MFStringGetProperty.\n");
2604 if (!JS_LookupElement(cx, obj, _index, vp)) {
2605 printf(
"JS_LookupElement failed in MFStringGetProperty.\n");
2608 if (JSVAL_IS_NULL(*vp)) {
2611 _str = JS_NewStringCopyZ(cx,
"NULL");
2612 *vp = STRING_TO_JSVAL(_str);
2613 if (!JS_DefineElement(cx, obj, (jsint) _index, *vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2614 printf(
"JS_DefineElement failed in MFStringGetProperty.\n");
2626MFStringSetProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp){
2627#elif JS_VERSION == 185
2628MFStringSetProperty(JSContext *cx, JSObject *obj, jsid
id, JSBool strict, jsval *vp){
2630MFStringSetProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSBool strict, JSMutableHandleValue hvp){
2631 JSObject *obj = *hobj._;
2637 #ifdef JSVRMLCLASSESVERBOSE
2638 printf(
"MFStringSetProperty: obj = %p id %d jsval %u\n", obj,
id, (
unsigned int)*vp);
2640printf (
"MFStringSetProperty, setting vp of type...\n");
2641 if (JSVAL_IS_OBJECT(*vp)) { printf (
" - MFStringSetProperty, vp is a OBJECT\n");}
2642 if (JSVAL_IS_PRIMITIVE(*vp)) { printf (
" - MFStringSetProperty, vp is a PRIMITIVE\n");}
2643 if (JSVAL_IS_NULL(*vp)) { printf (
" - MFStringSetProperty, vp is a NULL\n");}
2644 if (JSVAL_IS_STRING(*vp)) { printf (
" - MFStringSetProperty, vp is a STRING\n");}
2645 if (JSVAL_IS_INT(*vp)) { printf (
" - MFStringSetProperty, vp is a INT %d\n",JSVAL_TO_INT(*vp));}
2651 if (JSVAL_IS_STRING(*vp)) {
2652 if (!doMFStringUnquote(cx, vp)) {
2654 "doMFStringUnquote failed in MFStringSetProperty.\n");
2658 rv = doMFSetProperty(cx, obj,
id, vp,FIELDTYPE_MFString);
2659 #ifdef JSVRMLCLASSESVERBOSE
2660 printf (
"returning from MFStringSetProperty\n");
2669MFStringToString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2671MFStringToString(JSContext *cx, uintN argc, jsval *vp) {
2672 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2673 jsval *argv = JS_ARGV(cx,vp);
2678 #ifdef JSVRMLCLASSESVERBOSE
2679 printf(
"MFStringToString: obj = %p, %u args\n", obj, argc);
2684 return doMFToString(cx, obj,
"MFString", rval);
2686 if (!doMFToString(cx, obj,
"MFString", &rval)) {
return JS_FALSE; }
2687 JS_SET_RVAL(cx,vp,rval);
2695MFStringConstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2697MFStringConstr(JSContext *cx, uintN argc, jsval *vp) {
2698 JSObject *obj = JS_NewObject(cx,&MFStringClass,NULL,NULL);
2699 jsval *argv = JS_ARGV(cx,vp);
2700 jsval rval = OBJECT_TO_JSVAL(obj);
2701 if (!MFStringConstrInternals(cx,obj,argc,argv,&rval)) {
return JS_FALSE; }
2702 JS_SET_RVAL(cx,vp,rval);
2705JSBool MFStringConstrInternals(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2707 JSObject *_arrayObj;
2713 #ifdef JSVRMLCLASSESVERBOSE
2715 printf(
"MFStringConstr: cx %p, obj %p args %d rval %p parent %p... ", cx, obj, argc, rval, JS_GetParent(cx, obj));
2721 if(argc == 1 && argv){
2724 if (!JS_ValueToObject(cx, argv[0], &_arrayObj)) {
2725 printf(
"JS_ValueToObject failed in MFVec3fConstr.\n");
2729 if(JS_IsArrayObject(cx, _arrayObj)){
2734 JS_GetArrayLength(cx,_arrayObj, &lengthp);
2739 if(SM_method() == 2){
2742 if((any = (
AnyNative*)AnyNativeNew(FIELDTYPE_MFString,NULL,NULL)) == NULL){
2743 printf(
"AnyfNativeNew failed in MFStringConstr.\n");
2746 if (!JS_SetPrivateFw(cx, obj, any)) {
2747 printf(
"JS_SetPrivate failed in MFStringConstr.\n");
2751 newsize =
sizeof(
struct Uni_String*)*upper_power_of_two(argc);
2753 anyv->mfstring.p = MALLOC(
struct Uni_String**,newsize);
2754 memset(anyv->mfstring.p,0,newsize);
2758 DEFINE_LENGTH(cx,obj,argc)
2759 DEFINE_MF_ECMA_HAS_CHANGED
2766 for (i = 0; i < argc; i++) {
2769 JS_GetElement(cx, _arrayObj, i, &vp);
2774 #ifdef JSVRMLCLASSESVERBOSE
2775 printf (
"argv %d is a ...",i);
2777 if (JSVAL_IS_STRING(argv[i])==TRUE) {
2778 printf (
" Common String, is");
2779 _str = JS_ValueToString(cx, argv[i]);
2781 printf (
" %s",JS_GetStringBytes(_str));
2783 printf (
" %s",JS_EncodeString(cx,_str));
2788 if (JSVAL_IS_OBJECT(argv[i])==TRUE) {
2789 printf (
" is an object");
2791 if (JSVAL_IS_PRIMITIVE(argv[i])==TRUE) {
2792 printf (
" is a primitive");
2795 if ((_str = JS_ValueToString(cx, argv[i])) == NULL) {
2796 printf(
"JS_ValueToString failed in MFStringConstr.");
2803 char *cstring = NULL;
2804 if (JSVAL_IS_STRING(vp)==TRUE) {
2808 _str = JS_ValueToString(cx, vp);
2810 cstring = JS_GetStringBytes(_str);
2812 cstring = JS_EncodeString(cx,_str);
2822 us->strptr = cstring;
2823 us->len = strlen(cstring);
2825 anyv->mfstring.p[i] = us;
2826 anyv->mfstring.n = i+1;
2830 if (!JS_DefineElement(cx, obj, (jsint) i, vp, JS_GET_PROPERTY_STUB, JS_SET_PROPERTY_CHECK, JSPROP_ENUMERATE)) {
2831 printf(
"JS_DefineElement failed for arg %d in MFStringConstr.\n", i);
2836 *rval = OBJECT_TO_JSVAL(obj);
2838 #ifdef JSVRMLCLASSESVERBOSE
2839 printf (
"finished MFStringConstr\n");
2847MFStringAssign(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
2849MFStringAssign(JSContext *cx, uintN argc, jsval *vp) {
2850 JSObject *obj = JS_THIS_OBJECT(cx,vp);
2851 jsval *argv = JS_ARGV(cx,vp);
2855 #ifdef JSVRMLCLASSESVERBOSE
2856 printf(
"MFStringAssign: obj = %p args %d... ", obj, argc);
2858 if(SM_method() != 2){
2859 SET_MF_ECMA_HAS_CHANGED
2863 return _standardMFAssign (cx, obj, argc, argv, rval, &MFStringClass,FIELDTYPE_SFString);
2865 if (!_standardMFAssign (cx, obj, argc, argv, &rval, &MFStringClass,FIELDTYPE_SFString)) {
return JS_FALSE; }
2866 JS_SET_RVAL(cx,vp,OBJECT_TO_JSVAL(obj));
2873JSBool MFStringDeleteProperty(JSContext *cx, JSObject *obj, jsval
id, jsval *vp) {
2874#elif JS_VERSION == 185
2875MFStringDeleteProperty(JSContext *cx, JSObject *obj, jsid iid, jsval *vp){
2877MFStringDeleteProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid, JSMutableHandleValue hvp){
2878 JSObject *obj = *hobj._;
2882 #ifdef JSVRMLCLASSESVERBOSE
2883 printf (
"MFStringDeleteProperty\n");
2889MFStringEnumerateProperty(JSContext *cx, JSObject *obj) {
2891MFStringEnumerateProperty(JSContext *cx, JSHandleObject hobj) {
2892 JSObject *obj = *hobj._;
2894 #ifdef JSVRMLCLASSESVERBOSE
2895 printf (
"MFStringEnumerateProperty\n");
2901JSBool MFStringResolveProperty(JSContext *cx, JSObject *obj, jsval
id) {
2902#elif JS_VERSION == 185
2903JSBool MFStringResolveProperty(JSContext *cx, JSObject *obj, jsid
id) {
2905JSBool MFStringResolveProperty(JSContext *cx, JSHandleObject hobj, JSHandleId hiid){
2906 JSObject *obj = *hobj._;
2909 #ifdef JSVRMLCLASSESVERBOSE
2910 printf (
"MFStringResolveProperty\n");
2915JSBool MFStringConvertProperty(JSContext *cx, JSObject *obj, JSType type, jsval *vp) {
2917JSBool MFStringConvertProperty(JSContext *cx, JSHandleObject hobj, JSType type, JSMutableHandleValue hvp) {
2918 JSObject *obj = *hobj._;
2922 #ifdef JSVRMLCLASSESVERBOSE
2923 printf (
"MFStringConvertProperty\n");