[Plugin] Components manager plugin
-
Hi there
It has been brought to my attention that this plugin can conflict with other plugins. I just got a report from a customer that experienced SketchUp crashing when using Vertex Tools. After debugging it turned out that the crashing stopped once this plugin was disabled.
I looked at the source code and I identified several problems.
The main problem is that this plugin uses observers that modifies the model in the observer events. This causes a number of issues, for instances interrupting other tools and plugins. It breaks the currently running operation if you perform model changes in observer events. It's also prone to cause crashes in SketchUp - which is happening here.
How, there is a pattern one can use to make observers safer, it's demonstrated in a code example published on GitHub: https://github.com/SketchUp/sketchup-safe-observer-events
It also defines a bunch of methods outside of any module, which in effect defines them in Kernel - which means they become available to every object that exist - big potential for clashing with other plugins.
It's recommended to contain all methods in a top level module to avoid clashing with other plugins, as well as not using global variables. I've written an article that describes this in more detail:
http://www.thomthom.net/thoughts/2012/01/golden-rules-of-sketchup-plugin-development/Also a checklist of key items to verify when publishing a plugin:
http://www.thomthom.net/thoughts/2013/02/sketchup-plugin-checklist/On a side note, not rleated to clashing, but for the sake of performance; typename is very slow. using is_a? or kind_of? is many times faster.
http://www.thomthom.net/thoughts/2011/12/never-ever-use-typename/It'd be good if you could address the issues that makes your plugin conflict with other plugins. Causing crashes is very unfortunate for the users as they may lose their work.
-
Hello Thomthom,
Thank you for your always useful remarks.
Actually I was working with JQL to solve conflict issues he had with other plugins.
The new version I just posted should solve the problem.I corrected also some coding according your advice :
I wrapped my file BGSketchup.rb in a module but I kept the global variable because it's used for other plugins (maybe I can change this later). But the global variable has a special name.
For the other variables they are replaced with module variables as per your advice.For observers, I proceed in a new way and I update entity attribute only when user is asking a specific action from the plugins (reload liste, save components, etc...) or when saving the model. Therefore it should be interferring other plugins.
(sorry, I didn't use your code....yet ;o)Once you have made some testing with your plugins and it's running ok, I will update it in the pluginstore to inform all current users.
Thanks again for your help improving this plugin.
Inteloide
-
A bug appeared in my version 1.14.3 rbz file....
Anyone who download this version must download version 1.14.4 AND remove "BGSketchup_Robot.rb" file from their plugin directory...
Sorry for this error.Inteloide
-
Hello !
What about last version of the plugins ? Does it works on your computer ?
If yes I will upload it in the pluginstore.
Thank you for your feedbacks !Inteloide
-
Works wonderfully!! Very sophisticated Plugin. I love its power and friendliness.
It needed Lines 44 and 66 of file BGSketchup.rb changed to delete .chr in my U.S. version of SU8 on win7.
-
@ole said:
Works wonderfully!! Very sophisticated Plugin. I love its power and friendliness.
It needed Lines 44 and 66 of file BGSketchup.rb changed to delete .chr in my U.S. version of SU8 on win7.
Hello Ole,
I don't have SU8 installed anymore on my PC (I have SU2013 and SU2014), therefore I cannot see the error you have. Normally SU 2013 and SU 8 have the same level of ruby but...looks like no
Could you please send me the exact error you have (in ruby console) in order to solve it ? Because if I remove the .chr, for SU2013 it won't work. I maybe have to have 2 codes depending on SU version...
Thank for your feedback.
Inteloide -
With version 1.14.4 downloaded from this thread, plugin doesn't crash but nothing happens. I'm still learning how it works.
-
@ole said:
With version 1.14.4 downloaded from this thread, plugin doesn't crash but nothing happens. I'm still learning how it works.
Hello Ole,
Just post version 1.14.5, which include your modification, in first post of this thread.
If you require any help to understand the plugin, you can ask me. Also you have the help file in first post and inside plugins : just click on "about" button and you have a link to the help file.
Regards
Inteloide -
Hi Inteloide,
I have a quick test on Mac of the last version 1.14.5, for the moment all works fine except the previous problem with the translation, the Tooltips of the icons, Options of components and Options window aren't translated, see the image below
The rest of the translation (pop-up windows) works fine.
Here the complete new Spanish translation
-
Hello !
Please download last version that mainly introduces a javascript error (for SU 2014, javascript errors are not displayed anymore), corrects some bugs.
Oxer, this may raise some error message on Safari, which will help me to find your translation issue...
Inteloide
-
Oxer,
Version 1.14.8 may solve your translation issue. Thank you Aerilius, I have made a modification that should make Safari working properly.
Let me know.
Inteloide
-
Fantastic, the translation works now on Mac !!
Thanks for the effort with the translation problem. -
i had stopped using this plugin because of compatibility problems, but this new version is better
some minors observations:
for the 3rd screen copy, no matter what size i give to the window, it is still truncated at the bottom
i was looking for such a plugin to update a model made of components, when individual components have been updated after the model has been created.
Now, there is still a problem i can't solve using the native components window nor this plugin:
when a component is introduced in a model, if there is already one with the same name in it, sketchup automatically adds #1 at the end of the component definition name of the newly introduced component
how to replace the ...#1 component by the one that was first in the model, the name of which is ...?
I tried "reload selected components", AA11# is then written is creen, but the #1 is still at the end of the name...
-
Irrespective of fixing up dialogs and html etc into FRench...
It has long been know that trying to use file-paths containing "accented characters" causes issue in SketchUp, on PC in versions <=2013.
This is because Ruby1.8 cannot perform some basic and necessary File functions - like confirming that a file exists or reading/writing data.
Ruby2.0 used by SketchUp v2014 is better at this, but even that has some issues to iron-out.Your error message relates to SketchUp v8.
The folder containing the KCDM.skp is clearly designed to make v8's Ruby have a heart-attack !
MTX_biblioth**è**que_(non_class**é**e)
try a folder rename?
MTX_bibliotheque_(non_classee)
Stick to ye-olde ASCII A-Za-z etcIt is an unexplained oddity that Ruby, which was initiated in Japan with it's very non-standard character usage, should have such issues with text using relatively non-controversial and common accented letters that are used in many locales...
-
@tig said:
@giro
try a folder rename?
MTX_bibliotheque_(non_classee)
Stick to ye-olde ASCII A-Za-z etcthank you for taking the time to answer
yes, i already have been faced to this accent problem, but the tricky thing is that sometimes it is the source of the problem, and sometimes not
for example, the first screenshot, the problem is due to the fact that i buit the model on a computer using windows XP, and today i use windows 7; so the link is not "... program files... " anymore but "program files (x86)"
anyway, i should change the folder name...
my concern is how to remove the "#1" at the end of the component name
what i do now is:
i replace all the "#1" components by another one which is not already used in the model
i purge the unused components
i replace the component "not already used in the model by the one without the #1it takes some time...
-
Hello glro !
Are all your compatibility issues only about accent issue ? If not, please tell me in order to improve my plugin.
For HTML size, I will have a look soon.For your # issue...well the problem is in SU.
Actually, my plugin when reloading one or more components I :
1- load the component definition
2- remove replace old defintion instances by the new definition
3- remove old definition by purging all the model
4- rename new definition with the correct name
So if there is a # when loading the component definition, it will remains after reloading it.But I think that what you want is to upload a component definition with a file different from the file used at begining, don't you ? Then in SU (not plugin), by right clicking and choose "reload", SU ask you the file name...then definition without # will be replace by the new definition but still without #
Do I'm correct or not ?
If not, I could write you a tiny plugin that do the job automatically...Inteloide
-
it seems to me that the #1 component issue is related to your component manager plugin; for example:
i built a model from components in the component folder in june
in july, i modify some of the components
in september, i come back to the model and try to add some of the components that have been modified in july: they come with a #1 at the endthe real solution would be to use your plugin BEFORE i begin to modify the model; i just realize that while i am writing it
So, if all the components in the model are updated, when i add a new one, it will come without any #
i am going to try that...
thank you for trying to find a solution
-
In SU2015 64bit this plugin causes a crash when I use RoundCorner inside a component. I haven't tested other SU versions.
-
Hello Pherim,
Please try version 1.14.10 which should solve your issue and let me know.
-
Alright, it works again! Thanks!
Advertisement