Disabling advanced camera tools causing error
-
When disabling "Advanced Camera Tools" both in Sketchup 2015 and in 2016 (maybe further), it causes an undefined method error with scripts that use 'get_attributes' (with the S) on a component definition.
The error:
" Could not load xxx.rb:
undefined method 'get_attributes' for
#Sketchup::ComponentDefinition0x000000.... "I usually disable the 'Advanced Camera Tools' extension (It may cause all sorts of scene problems in some models), but I guess I'll have to live with this one when I want to run a certain script...
- Does this happen to anyone else?
- I can't seem to find 'get_attributes' (with the s) in the Sketchup API, nor in the Ruby Docs... ?
Good Day
Yoni
-
it's a Dynamic Components method...
do you have a model and a code snippet that generates the error...
john
-
You can test it with your DC encrypter decrypter.
-
I'll have a look, it was a test...
ok I can reproduce it with a new model with any DC and this code...
m = Sketchup.active_model m.definitions.each do |d| if defined? d.attribute_dictionaries next unless d.attribute_dictionaries && d.attribute_dictionaries['dynamic_attributes'] if defined? d.get_attributes p d.name d.get_attributes('dynamic_attributes').each do |a| p a end else p d.name.upcase end end endRun with ACT off and you get the UPCASED definition names, turn ACT on and run again, you get the list...
I only tested on mac, v2017...
it 'looks' like get attributes is defined in ACT...
john
-
it definitely part of ACT...
and is the equivalent of this attribute_dictionaries['dynamic_attributes'].entries.to_h...
proof:
m = Sketchup.active_model m.definitions.each do |d| next unless d.attribute_dictionaries && d.attribute_dictionaries['dynamic_attributes'] p d.name p d.attribute_dictionaries['dynamic_attributes'].entries.to_h == d.get_attributes('dynamic_attributes') endsolution:
do a search and replace in any plugin that uses
get_attributes('dynamic_attributes')... [untested]john
-
Thanks John!
That definitely clears up a lot of things I couldn't understand.
When I was analyzing your decrypter, 'get_attributes' fit in so well it looked like it's part of the API. Maybe it should be?!
-
when I write 'quick and dirty' tests I tend to check for methods using Ruby
:methodsmethod...that can expose 'undocumented' methods that I have no idea of the owner of...
I must of had ACT on when I first wrote this one [ I don't normally ]...
good thing you found it, I'll find and change my snippet...
john
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register LoginAdvertisement