[Plugin] Make Fur v.2.1.0(20140323)
-
@unknownuser said:
Can you use the period in the SU standard value input ? I cant ! I must use the comma and the semi-colon as separator (i.e. 10,5;22,4 for a rectangle).
Not in the SU VCB area, no. But this plugin doesn't use this, does it?
What I was referring to was the webdialog (metric) for this plugin. The screenshot I showed last time.@unknownuser said:
No, cm is in the default setting.
If it's 0cm it's ok, but if it's 0 cm (with space) it dont work.OK, I know why I have the unit after value, because it's a SU setting in the Model info : "Display units format". Uncheck it, disable the cm.
... And if I set the Precision (in Model info -> Units) to 0 instead 0,0 all it's ok in the Fur setting windows, I have 0,0,5 (but setting 0cm for Precision or mm for Units in it's not ok for my way of work )Are you seeing "cm" in the webdialog for this plugin?
I'm confused...Or are you talking about SU in general?
-
Hi,All.
I update fur plugin.
Now it's version 1_3d.
this fileName will keep to "fur_en.rb" for future.
When you use this version ,you must remove older version fur plugin file from sketchup plugins folder.Thanks.
-
Good stuff!
Very nice plugin this. Shaping up good.
Another remark: menu names, can you also avoid version number in the menu names? Keep them static? Because when the menu name changes between updates the shortcuts assigned to them doesn't work any more.
-
hmmm...
I now see the problemdaredevil
talked about.tak2hata:
When the user's locale is decimal you can't use the comma to get the various components of the vectors.
"0,400mm,0mm,0mm" is interpreted as
x=0, y=400, z=0
The problem is this:
def fur_dialog_ini @fur_units_metric = false @fur_units_metric = true if ( 0.to_l.to_s )["m"] @delim = "," @delim = ";" if Sketchup.get_locale.upcase == "FR" end
This code only checks for FR Sketchup locale. But there are many more that uses , comma as decimal delimiter. Norwegian for instance.
But,Sketchup.get_locale
does not return the locale of the system. It returns the language code of Sketchup.
For instance, I use Norwegian locales, but use English SU.Sketchup.get_locale
returnsen-US
I've been recently struggling with this myself.
And the hack I ended up using to find the user's comma decimal separator was this:@decimal_separator ||= 1.2.to_l.to_s.match(/\d(\D)\d/)[1]
See http://forums.sketchucation.com/viewtopic.php?f=180&t=28346 for more info.Now, this only gives you what the comma separator is. I've not found a way to find the list separator. Just I think you can catch most cases by assuming locales with comma as decimal separator uses ; as list separator.
So to revise your code:
def fur_dialog_ini @fur_units_metric = false @fur_units_metric = true if ( 0.to_l.to_s )["m"] decimal_sep = 1.2.to_l.to_s.match(/\d(\D)\d/)[1] @delim = ";" if decimal_sep == ',' end
Then there is the other part of that method:
@fur_units_metric = false @fur_units_metric = true if ( 0.to_l.to_s )["m"]
Usemodel.options
to get the user units.
http://code.google.com/apis/sketchup/docs/ourdoc/model.html#optionsIt returns an OptionManager that gives you access to some OptionsProvider classes.
http://code.google.com/apis/sketchup/docs/ourdoc/optionsmanager.html
http://code.google.com/apis/sketchup/docs/ourdoc/optionsprovider.htmlTo inspect the available options, use this snippet:
Sketchup.active_model.options.keys.each {|key| p key; Sketchup.active_model.options[key].each {|k,v| puts "> #{k} - #{v}"} }
Using that you can see that
model.options["UnitsOptions"]
gives you all the info you need about the model units.
model.options["UnitsOptions"]["LengthUnit"]
gives you the unit type.The unit types are:
// LENGTH_FORMAT: 0 = Decimal, 1 = Arcitectural, 2 = Engineering // LENGTH_UNITS: 0 = Inches, 1 = Feet, 2 = Millimeters 3 = centimeters, 4 = Meters // LENGTH_PRECISION: number of decimal places to show
(Found this in theGoogle SketchUp 7\Resources\en-US\i18n.dat
file) -
@frederik said:
...Only in UK in Europe (and I believe on Cypres too) they drive in the left side...
And Ireland, too.
-
Countries that drive on the left
http://en.wikipedia.org/wiki/File:Countries_driving_on_the_left_or_right.svg
Quite a few.
-
-
Yeah. Though already a minority of the countries, still "the sun never sets over the countries that drive on the left".
-
@unknownuser said:
This code only checks for FR Sketchup locale.
And when French user uses directly FR Locale "." (modified) whith English SU version seems there is no problem?
-
Hi, All.
I update this to v1.3e.
Thomas,Thank you very very much!
At last, I also understood.
I use your code "decimal_sep = 1.2.to_l.to_s.match(/\d(\D)\d/)[1]".
and model.options["UnitsOptions"]["LengthUnit"] >= 2 then unit is metric.
It not depend to Sketchup locale.I think that this is perhaps no problem.
please reply when there is a problem.Thanks
-
@tak2hata said:
I use your code "decimal_sep = 1.2.to_l.to_s.match(/\d(\D)\d/)[1]".
and model.options["UnitsOptions"]["LengthUnit"] >= 2 then unit is metric.
It not depend to Sketchup locale.I think that this is perhaps no problem.
please reply when there is a problem.I think that should work.
-
Oh - you posted update already! I see. I'll try it out then.
-
1.3e not working for me.
Error: #<NoMethodError: undefined method
[]' for nil:NilClass>
C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:734:infur_dialog_ini' C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:741:in
fur_webdialog'
C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:1414
C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:1413:incall'
-
With 1.3e I get
Error: #<TypeError: no implicit conversion to float from nil> C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:1326:in
initialize'
C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:1326:innew' C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:1326:in
s_to_vec'
C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:713:inshow_webdialog' C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:658:in
call'`
with the 'web-dialog' accept button.
You must be passing an empty argument to a defn ? -
@thomthom said:
1.3e not working for me.
Error: #<NoMethodError: undefined method
[]' for nil:NilClass>
C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:734:infur_dialog_ini' C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:741:in
fur_webdialog'
C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:1414
C:/Program Files (x86)/Google/Google SketchUp 7/Plugins/fur_en.rb:1413:incall'
I think this is LengthFormat or LengthPrecision problem.
So I will change code..def fur_dialog_ini unitoptions = Hash.new Sketchup.active_model.options["UnitsOptions"].each{|key ,val| unitoptions[key] = val } Sketchup.active_model.options["UnitsOptions"]["LengthFormat"] = 0 if unitoptions["LengthFormat"] != 0 Sketchup.active_model.options["UnitsOptions"]["LengthPrecision"] = 1 if unitoptions["LengthPrecision"] == 0 @fur_units_metric = false lunit = unitoptions["LengthUnit"] @fur_units_metric = true if lunit >= 2 lprec = Sketchup.active_model.options["UnitsOptions"]["LengthPrecision"] @decimal_sep = 1.2.to_l.to_s.match(/\d(\D)\d/)[1] @delim = "," @delim = ";" if @decimal_sep == ',' unitoptions.each{|key ,val| Sketchup.active_model.options["UnitsOptions"][key] = val } end
@tig said:
With 1.3e I get
Error: #<TypeError: no implicit conversion to float from nil> C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:1326:in
initialize'
C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:1326:innew' C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:1326:in
s_to_vec'
C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:713:inshow_webdialog' C:/Program Files/Google/Google SketchUp 7/Plugins/fur_en.rb:658:in
call'`
with the 'web-dialog' accept button.
You must be passing an empty argument to a defn ?Sorry,I will change the code.
-
Why are you doing this?
Sketchup.active_model.options["UnitsOptions"].each{|key ,val| unitoptions[key] = val } Sketchup.active_model.options["UnitsOptions"]["LengthFormat"] = 0 if unitoptions["LengthFormat"] != 0 Sketchup.active_model.options["UnitsOptions"]["LengthPrecision"] = 1 if unitoptions["LengthPrecision"] == 0
You're changing the model settings.
-
This whole thing makes no sense...
def fur_dialog_ini unitoptions = Hash.new Sketchup.active_model.options["UnitsOptions"].each{|key ,val| unitoptions[key] = val } Sketchup.active_model.options["UnitsOptions"]["LengthFormat"] = 0 if unitoptions["LengthFormat"] != 0 Sketchup.active_model.options["UnitsOptions"]["LengthPrecision"] = 1 if unitoptions["LengthPrecision"] == 0 @fur_units_metric = false lunit = unitoptions["LengthUnit"] @fur_units_metric = true if lunit >= 2 lprec = Sketchup.active_model.options["UnitsOptions"]["LengthPrecision"] @decimal_sep = 1.2.to_l.to_s.match(/\d(\D)\d/)[1] @delim = "," @delim = ";" if @decimal_sep == ',' unitoptions.each{|key ,val| Sketchup.active_model.options["UnitsOptions"][key] = val } end
You create an hash to store model UnitOptions, then change them and then restore the original values...?
-
From what I could understand, that method could be condensed to:
def fur_dialog_ini units = Sketchup.active_model.options["UnitsOptions"]["LengthUnit"] @fur_units_metric = (units >= 2) # true if units are 2 or greater @decimal_sep = 1.2.to_l.to_s.match(/\d(\D)\d/)[1] @delim = (@decimal_sep == ',') ? ";" ; "," end
-
Hmmm,
When LengthFormat is Architectural or LengthPrecision = 0,
"1.2.to_l.to_s.match(/\d(\D)\d/)[1]" return error.Is that problem excluding this?
-
Ah, yes. I see the problem. ..hm... this needs some more thinking...
Advertisement