euslisp / jskeus

This repository contains EusLisp software developed and used by JSK at The University of Tokyo
23 stars 55 forks source link

irtviewerに表示したことがあるobjectをdump-objectしてreadすると:set-colorできない #613

Open pazeshun opened 2 years ago

pazeshun commented 2 years ago

一度でもirtviewerに表示したことがあるobjectをdump-objectでファイルに保存し、別のeusインスタンスからreadして作成したobjectに対して、:set-colorをしようとするとエラーになります。

$ irteusgl
configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin 
connected to Xserver DISPLAY=:0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph ___time ___pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb 
;; extending gcstack 0x55f51f982690[16374] --> 0x55f51fe08250[32748] top=3c88
irtgl irtglc irtviewer 
EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)
1.irteusgl$ (setq test (make-cube 100 100 100))
#<body #X55f51fc38610 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>
2.irteusgl$ (send test :set-color :red)
#f(0.996094 0.0 0.0)
3.irteusgl$ (objects (list test))
;; (make-irtviewer) executed
(#<body #X55f51fc38610 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>)
4.irteusgl$ (dump-object "test.l" test)
nil
5.irteusgl$ quit
$ irteusgl
configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin 
connected to Xserver DISPLAY=:0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph ___time ___pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb 
;; extending gcstack 0x56230f1b2690[16374] --> 0x56230f638250[32748] top=3c88
irtgl irtglc irtviewer 
EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)
1.irteusgl$ (with-open-file (f "test.l" :direction :input) (setq test (read f)))
#<body #X56230f468848 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>
2.irteusgl$ (send test :set-color :red)
Call Stack (max depth: 20):
  0: at (send test :set-color :red)
  1: at #<compiled-code #X56230f2693e8>
irteusgl 0 error: could not find viewers for (94511292478592 . 1) in (send test :set-color :red)
3.E1-irteusgl$ reset
4.irteusgl$ (objects (list test))
;; (make-irtviewer) executed
(#<body #X56230f468848 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>)
5.irteusgl$ (send test :set-color :red)
Call Stack (max depth: 20):
  0: at (send test :set-color :red)
  1: at #<compiled-code #X56230f2693e8>
irteusgl 0 error: could not find viewers for (94511292478592 . 1) in (send test :set-color :red)

一方で、一回もirtviewerに表示したことのないobjectに同様の操作をしても、エラーになりません。

$ irteusgl
configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin 
connected to Xserver DISPLAY=:0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph ___time ___pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb 
;; extending gcstack 0x558e38b10690[16374] --> 0x558e38f96250[32748] top=3c88
irtgl irtglc irtviewer 
EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)
1.irteusgl$ (setq test (make-cube 100 100 100))
#<body #X558e38dc6650 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>
2.irteusgl$ (send test :set-color :red)
#f(0.996094 0.0 0.0)
3.irteusgl$ (dump-object "test.l" test)
nil
4.irteusgl$ quit
$ irteusgl
configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin 
connected to Xserver DISPLAY=:0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph ___time ___pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb 
;; extending gcstack 0x559aedb8a690[16374] --> 0x559aee010250[32748] top=3c88
irtgl irtglc irtviewer 
EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)
1.irteusgl$ (with-open-file (f "test.l" :direction :input) (setq test (read f)))
#<body #X559aede40808 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>
2.irteusgl$ (send test :set-color :red)
#f(0.996094 0.0 0.0)

少し原因を探ったところ、 https://github.com/euslisp/jskeus/blob/1.2.5/irteus/irtgl.l#L445 でエラーが起きていて、それは https://github.com/euslisp/jskeus/blob/1.2.5/irteus/irtgl.l#L120 から上がっているようです。 確かに、dumpされたファイルを読んでみると、:gl-displaylist-idに数値がベタ書きされていて、これが各eusインスタンスのirtviewer固有の値なので、それを新しいeusインスタンスで検索してもヒットしない、というのは当然だ、ということまでわかりましたが、どう直せば良いのかがあまりわからず、一旦issueにしました。

k-okada commented 2 years ago

opengl 表示するときのキャッシュのキーが書かれています. https://www.glprogramming.com/red/chapter07.html で,オブジェクトの中身をみてgl-displaylist-id を消して回る関数を作って,ユーザがdumpする前に消してからdumpするとよいとおもいます.

◉ Kei Okada

2022年2月8日(火) 18:54 Shun Hasegawa @.***>:

一度でもirtviewerに表示したことがあるobjectをdump-objectでファイルに保存し、別のeusインスタンスからread して作成したobjectに対して、:set-colorをしようとするとエラーになります。

$ irteusgl

configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"

;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin

connected to Xserver DISPLAY=:0

X events are being asynchronously monitored.

;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph time pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb

;; extending gcstack 0x55f51f982690[16374] --> 0x55f51fe08250[32748] top=3c88

irtgl irtglc irtviewer

EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)

1.irteusgl$ (setq test (make-cube 100 100 100))

<body #X55f51fc38610 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>

2.irteusgl$ (send test :set-color :red)

f(0.996094 0.0 0.0)

3.irteusgl$ (objects (list test))

;; (make-irtviewer) executed

(#<body #X55f51fc38610 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>)

4.irteusgl$ (dump-object "test.l" test)

nil

5.irteusgl$ quit

$ irteusgl

configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"

;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin

connected to Xserver DISPLAY=:0

X events are being asynchronously monitored.

;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph time pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb

;; extending gcstack 0x56230f1b2690[16374] --> 0x56230f638250[32748] top=3c88

irtgl irtglc irtviewer

EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)

1.irteusgl$ (with-open-file (f "test.l" :direction :input) (setq test (read f)))

<body #X56230f468848 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>

2.irteusgl$ (send test :set-color :red)

Call Stack (max depth: 20):

0: at (send test :set-color :red)

1: at #<compiled-code #X56230f2693e8>

irteusgl 0 error: could not find viewers for (94511292478592 . 1) in (send test :set-color :red)

3.E1-irteusgl$ reset

4.irteusgl$ (objects (list test))

;; (make-irtviewer) executed

(#<body #X56230f468848 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>)

5.irteusgl$ (send test :set-color :red)

Call Stack (max depth: 20):

0: at (send test :set-color :red)

1: at #<compiled-code #X56230f2693e8>

irteusgl 0 error: could not find viewers for (94511292478592 . 1) in (send test :set-color :red)

一方で、一回もirtviewerに表示したことのないobjectに同様の操作をしても、エラーになりません。

$ irteusgl

configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"

;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin

connected to Xserver DISPLAY=:0

X events are being asynchronously monitored.

;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph time pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb

;; extending gcstack 0x558e38b10690[16374] --> 0x558e38f96250[32748] top=3c88

irtgl irtglc irtviewer

EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)

1.irteusgl$ (setq test (make-cube 100 100 100))

<body #X558e38dc6650 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>

2.irteusgl$ (send test :set-color :red)

f(0.996094 0.0 0.0)

3.irteusgl$ (dump-object "test.l" test)

nil

4.irteusgl$ quit

$ irteusgl

configuring by "/opt/ros/melodic/share/euslisp/jskeus/eus//lib/eusrt.l"

;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; extnum ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin

connected to Xserver DISPLAY=:0

X events are being asynchronously monitored.

;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph time pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtstl irtwrl irtpointcloud eusbullet bullet irtcollision irtx eusjpeg euspng png irtimage irtglrgb

;; extending gcstack 0x559aedb8a690[16374] --> 0x559aee010250[32748] top=3c88

irtgl irtglc irtviewer

EusLisp 9.27( 1.2.2) for Linux64 created on ip-10-0-1-65(Tue May 4 17:29:14 PST 2021)

1.irteusgl$ (with-open-file (f "test.l" :direction :input) (setq test (read f)))

<body #X559aede40808 (:cube 100.0 100.0 100.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>

2.irteusgl$ (send test :set-color :red)

f(0.996094 0.0 0.0)

少し原因を探ったところ、 https://github.com/euslisp/jskeus/blob/1.2.5/irteus/irtgl.l#L445 でエラーが起きていて、それは https://github.com/euslisp/jskeus/blob/1.2.5/irteus/irtgl.l#L120 から上がっているようです。 確かに、dumpされたファイルを読んでみると、:gl-displaylist-id に数値がベタ書きされていて、これが各eusインスタンスのirtviewer固有の値なので、それを新しいeusインスタンスで検索してもヒットしない、というのは当然だ、ということまでわかりましたが、どう直せば良いのかがあまりわからず、一旦issueにしました。

— Reply to this email directly, view it on GitHub https://github.com/euslisp/jskeus/issues/613, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADYNXGTZFCRMXQV4DUITNDU2DRXVANCNFSM5NZ5333Q . You are receiving this because you are subscribed to this thread.Message ID: @.***>