[Plugin] VisMap - Layer/Scene Visibility Map
-
@markozeta said:
Martin,
"Error at Line 78, Char 4" of the script, and the error given was "The data area passed to a system call is too small."
Could this be an overflow error of some type?
Edit: I have 50 layers and 43 scenes, if that helps. That's a total of 2,150 check points.
Thanks for your help!
Line 78, char 4 is the middle of a variable name. MSIE's error reporting is very near to totally worthless. It has to be SketchUp passing data to a system call, so this is a SketchUp bug. (Remember that numbers like 50, 43 and 2150 are very small numbers - though the VisMap you get probably looks huge.)
Today I am going to try to get good with one or the other of Ruby's alternative exception handlers and see if I can get enough information to pass back to the JavaScript so you get an error message that might be helpful.
-
@markozeta said:
[Freeze panes] would help a ton, but most code that you could drop into your javascript routine would try to freeze the top and side, when you want the two sides to be frozen.
OK. I'm up to speed on freeze panes. What exactly is your design?
-
I just ULd new Ruby and JavaScript.
The Ruby now traps errors in the bit of the code where I think they might happen, passes the error message on to the JavaScript. In turn, the JS uses the error message to create an error report where you were expecting the VisMap UI.
If my guess is right about the source of the trouble, there should be no more blank UIs.
-
martin,
there has been some improvement: the UI is no longer blank, as you can see, but it does not get any data from the model. i have 24 scenes and about 40 layers in this model. i am on mac (10.5.8/SU 7)
-
@edson said:
there has been some improvement: the UI is no longer blank
Beautiful!
First, I see that your scene list is on the wrong side. I can fix that. (Edit: done.) Second, it appears that there was an issue with your scene list, as it appears to have broken before/during the scene name collection process. I'll cast a wider net for breaks and see if I can get you a genuine error message. (Edit 2: also done.)
(It's rained all day. The U.S. Open is closed.)
-
martin,
i downloaded the plugin again but not only there was no improvement as we are back to the blank UI. keep trying.
-
Aha! It is a bug with overflow.
http://www.boutell.com/newfaq/misc/urllength.html states that IE can only have a URL of length 2,083 chars.
Line 78 to 82 of vismap.js states...
function rubyCalled( callback_name, message ) { if ( (typeof message) == 'undefined' ) message = ''; url = 'skp;' + callback_name + '@' + message; window.location.href = url; }
With my example, this would request a url from internet explorer that would contain a 2,150 character string attached to an 11 character header to form a 2,161 character url - which exceeds IE's ( ) limits.
I guess the only way I could suggest fixing this is with a conversion of binary (1 for V, 0 for I), converted to ASCII, and then back on the ruby side. Ruby will be able to unpack it though, using str.unpack in ruby, but still, this will be difficult to overcome.
.>
Not much help, sorry.
-
@edson said:
not only there was no improvement as we are back to the blank UI. keep trying.
This is not good. I wish I were in front of your computer. Hmmmm.
Right now I believe the smart thing is to sleep on it.
Do you know anything about Ruby or JavaScript?
-
@markozeta said:
this would request a url from internet explorer that would contain a 2,150 character string attached to an 11 character header to form a 2,161 character url - which exceeds IE's ( ) limits.
Thanks!
I've done a lot with bit maps, so packing 16k bits into a 2k string is not a problem. But is 16k going to handle really large animations? Or should I find (they're there) a more capacious solution?
Edit: "The data area passed to a system call is too small." Remember? That's the 2k data area that IE is trying to fit 2k+ bytes into.
-
@martinrinehart said:
Do you know anything about Ruby or JavaScript?
very little. however, i have been able to run tests for other coders when there was any problem about running scripts on mac. but i would have to be guided for that to work.
-
Edson,
Two attachments. "house.skp" is my test model. Try to VisMap it. If it works, then it's your models. Please send me the smallest one on which VisMap fails. Ignore the second file.
Leave "house.skp" loaded in SU if the above fails. "vismap.txt", which you must rename to "vismap.js", is the JavaScript but it is tricked out to not call the Ruby. Instead, it simulates the Ruby return of data appropriate to "house.skp". Save it to /dir/of/your/su/Plugins/vismap/ as "vismap.js" (UL'd as "vismap.txt" because this board won't permit ".js" files.) If it succeeds, then we have a problem in the Ruby code. If it fails, then we have a problem with the JavaScript. Let me know.
Martin
-
martin,
i opened your model and the vismap UI was still blank. then i did as you asked me to: downloaded the other file, renamed it and put it in the proper folder. it worked: the UI appeared with the info related to house.skp. however, it did not work with any of my models. closing and opening the vismap window again while in your file works but it takes along for the info to appear.
do you want me to send you my model?
-
@edson said:
do you want me to send you my model?
I don't think so. The fact that you couldn't VisMap my model but you could VisMap with the tricked out JavaScript pretty much isolates the Ruby code as the villain. Ruby has a good reputation for being truly multi-platform. (Unlike JavaScript, where MSFT resolutely refuses to follow standards.)
Hmmmm.
Off topic: Speaking of things I don't know, where is Brazil in world tennis? I would have expected a wave to follow Kuerten.
On topic: Hmmmm. I'll think of something. (I hope.)
-
Hi Martin,
Since I was having the blank dialog box problem too (in my case, I had to go to another program once and come back to SU to get Vismap display right), I tried the above house.skp and vismap.js files.
with house.skp, vismap showed a small blank dialog box first, so I dragged its edge to maxmize it and the content of the box appeared.
So I installed vismap.js. With it, vismap showed dialog box right, although it was small at the beginning.
Then funny things started happening. I opened several of my own models and tried vismap, but it kept showing the layer structure of house.skp! Now this is weird. -
@takesh h said:
I opened several of my own models and tried vismap, but it kept showing the layer structure of house.skp! Now this is weird.
That was a tricked out vismap.js. It's trick was to pretend to call Ruby and then provide the Ruby's answer - appropriate to house.skp. The idea was to test that the JavaScript was working correctly, which it was.
DL the .zip again. You'll get a straight JavaScript and a better Ruby.
-
Martin,
I don't use scenes much, but congrats on your plug-in (I thought you said it was your first somewhere.)
For loading and unloading models, you may want to use the Sketchup::AppObserver and hook the onOpenModel(model) and onNewModel(model) events.
Secondly, you might consider wrapping all your code in a module and use 'self' for the methods, and using 'private' to control for external visibility. Helps with 'namespace type' collisions.
Lastly, I put the html as a string in my rb/rbs files and load it with dialog.set_html. It's easy to change the font size in the (inline) CSS before loading it in the dialog box, and I used 'em' for all the html size/layout units. HTML needs the same kind of escaping as strings passed between ruby and javascript.
HTH,
Greg
-
@unknownuser said:
I've done a lot with bit maps, so packing 16k bits into a 2k string is not a problem. But is 16k going to handle really large animations? Or should I find (they're there) a more capacious solution?
If you're able to pass it as 32 bits/char, you could get 256^2 bits in. That would work for what I'm trying to do (make a decent pipe system of 200+ pieces and pass it to layout), but might not pass for animation work.
Make it a pro version and a free version, pro being for animation with a different data passing technique?
-
@markozeta said:
If you're able to pass it as 32 bits/char, you could get 256^2 bits in.
The limit is 2kB in the URL: 16k bits. I'm working on the code right now to pack 6 bits per byte which you can do with the printable ASCII characters, so it should be totally dependable and give you 12k scene/layer combinations.
@markozeta said:
Make it a pro version and a free version, pro being for animation with a different data passing technique?
I like this thinking!
-
Thanks for all the good ideas. I'm already pretty clean, namespace wise. (Only one public var, $vismap_model).
@msp_greg said:
Lastly, I put the html as a string in my rb/rbs files and load it with dialog.set_html.
That's a very interesting idea!
-
Martin,
I'm already pretty clean, namespace wise. (Only one public var, $vismap_model).
I was referring to procedure / function / class visibility, not variable visibility.
For instance, 'Model' may not be the best unqualified name for a class. IOW, what if someone has a lot of installed plug-ins? You don't want name resolution issues...
Thanks,
Greg
Advertisement