@@ -43,6 +43,14 @@ export function createVtkObjectProxy(
4343
4444 // Create methods
4545 const observerTags = [ ] ;
46+ function deleteObject ( ) {
47+ const result = wasm . destroy ( vtkId ) ;
48+ if ( result ) {
49+ const removedProxy = idToRef . delete ( vtkId ) ;
50+ vtkProxyCache . delete ( removedProxy ) ;
51+ }
52+ return result ;
53+ }
4654 function set ( props ) {
4755 return wasm . set ( vtkId , wrapMethods . decorateKwargs ( toCxxKeys ( props ) ) ) ;
4856 }
@@ -63,6 +71,13 @@ export function createVtkObjectProxy(
6371 unObserve ( observerTags . pop ( ) ) ;
6472 }
6573 }
74+ function toString ( ) {
75+ return wasm . printObjectToString ( vtkId ) ;
76+ }
77+
78+ function toJSON ( ) {
79+ return toJsKeys ( wasm . get ( vtkId ) ) ;
80+ }
6681 const propGetters = createPropGetter ( wasm , wrapMethods , vtkId ) ;
6782 const propSetters = createPropSetter ( wasm , wrapMethods , vtkId ) ;
6883
@@ -74,23 +89,22 @@ export function createVtkObjectProxy(
7489 obj : { Id : vtkId } ,
7590 set,
7691 observe,
92+ toJSON,
93+ toString,
7794 unObserve,
7895 unObserveAll,
96+ userData : { } ,
7997 } ;
8098 const vtkProxy = new Proxy ( target , {
8199 get ( target , prop , resolver ) {
82- if ( prop === "then" ) {
83- return resolver ;
100+ if ( target [ prop ] !== undefined ) {
101+ return target [ prop ] ;
84102 }
85- if ( prop === "toString" ) {
86- return ( ) => {
87- return wasm . printObjectToString ( vtkId ) ;
88- }
103+ if ( target . userData [ prop ] !== undefined ) {
104+ return target . userData [ prop ] ;
89105 }
90- if ( prop === "toJSON" ) {
91- return ( ) => {
92- return toJsKeys ( wasm . get ( vtkId ) ) ;
93- }
106+ if ( prop === "then" ) {
107+ return resolver ;
94108 }
95109 if ( prop === "state" ) {
96110 if ( ! wasm . get ) {
@@ -101,34 +115,29 @@ export function createVtkObjectProxy(
101115 return toJsKeys ( wasm . get ( vtkId ) ) ;
102116 }
103117 if ( prop === "delete" ) {
104- const result = wasm . destroy ( vtkId ) ;
105- if ( result ) {
106- const removedProxy = idToRef . delete ( vtkId ) ;
107- vtkProxyCache . delete ( removedProxy ) ;
108- }
109- return result ;
118+ return deleteObject ;
110119 }
111120 if ( propGetters [ prop ] ) {
112121 return propGetters [ prop ] ( ) ;
113122 }
114- if ( ! target [ prop ] ) {
115- // console.log("register method", prop, toCxxName(prop));
116- target [ prop ] = async ( ...args ) =>
117- wrapMethods . decorateResult (
118- await wasm . invoke (
119- vtkId ,
120- toCxxName ( prop ) ,
121- wrapMethods . decorateArgs ( args ) ,
122- ) ,
123- ) ;
124- }
123+ // ideally we should have a json structure to check available methods
124+ target [ prop ] = async ( ...args ) =>
125+ wrapMethods . decorateResult (
126+ await wasm . invoke (
127+ vtkId ,
128+ toCxxName ( prop ) ,
129+ wrapMethods . decorateArgs ( args ) ,
130+ ) ,
131+ ) ;
125132 return target [ prop ] ;
126133 } ,
127134 set ( target , property , value ) {
128135 if ( propSetters [ property ] ) {
129136 propSetters [ property ] ( value ) ;
137+ } else {
138+ target . userData [ property ] = value ;
130139 }
131- return value ;
140+ return true ;
132141 } ,
133142 } ) ;
134143
0 commit comments