ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info
  • Checking for users viewport settings?

    8
    0 Votes
    8 Posts
    404 Views
    TIGT
    My approach avoids the confusion of vectors, eye, target etc... Just use the API functions to set a plan view and zoom to what you want to see, switching off perspective as needed...
  • Module for Skeletal Animation

    6
    0 Votes
    6 Posts
    3k Views
    D
    @xolotl said: Hello SketchUcation Xperts. Has anyone else tried this plugin, and if so, what were the results? ThanX. X (Xolotl) yes, it works, on PC and even the Mac (if your careful), but it's not really a "plugin", but a 'proof of concept' chapter of a very good book on learning how to use ruby for SU. "Automatic Sketchup" have look on amazon I did a some 'Mac' example debugging when Matt was writing it and have been meaning to post a review, it is easy to follow and well worth buying... and a lot of it's downloadable from the books website... If your interest extends to writing your own or testing for others RubyConsolePro is also worth a look, along with Martins book on ruby for sketchup... john
  • Get/Set Image and Group glue_to ?

    3
    0 Votes
    3 Posts
    379 Views
    Dan RathbunD
    see new beta post, SKX forum: [code] beta Group/Image parent, glued_to? etc.
  • [Code] layer-color= v1.2

    7
    0 Votes
    7 Posts
    2k Views
    TIGT
    Typo corrected in v1.3 in first post...
  • Dialog to Return a Folder

    7
    0 Votes
    7 Posts
    1k Views
    TIGT
    Thanks I clobbered together a folder_browser as part of a larger code set using your ideas... as it's subject to a NDA I can't post it here, BUT here are some tips about what I changed/added - in no particular order... I set a @ variable to represent the returned folderpath. The starter is def startfb(dir=nil, input=nil) this is to separate it from another 'start', by running it with arguments I can determine which directory to start the list in [dir] and then what action to take [def to run] with the resulting @folderpath [using input]. So we don't mess with the current working directory we remember it, reset it to dir then process and set it back on closing [inside the calling code NOT the fb itself] I made it a sub-def of a wider class and ensured that @dlg etc were renamed so as not to clash with another @dlg I already had open. I changed the dialog to be a fixed size [also added 'instructions' into the top-bar] - in the js etc I made the list 80% so it never squeezes the buttons off screen. I also swapped the location to the top of the dialog and removed the 'Location:' text as it sees clear what the string is anyway. I changed the 'OK' button size to be bigger value=OK style='width:146px' and added new functions to 'Cancel' and 'New Folder' onclick="cancel()" and onclick="mkdir()"... These in turn 'call' back and close the dialog or open another dialog into which you can type the new folder name... If you add a new folder it is added to the list immediately after the folder-up item, the rest are listed in order - this makes finding that new folder much easier - if you navigate away and back it will now get added to the list in the correct order... The call back is a new sub-def called 'newfolder()' and that opens another simple dialog to get the the new name - it's trapped in my case to ensure it only has _ and alphanumerics in it - newDir.gsub!(/[^_A-Za-z0-9]/,''). It also checks for validity and preexistence and warns appropriately. Dir.mkdir(newDir) @dlgfb.execute_script('clear_list()') self.populatefb(Dir.pwd, newDir) Note how the populate def [renamed to avoid a clash] takes arguments - this is to set the starting directory and IF there's a new-directory to pass it over so that the list can be manipulated to have its name second on the updated list. list << file if File.basename(file) != newDir and scr='appendDiv("../");' @dlgfb.execute_script(scr) scr='appendDiv("'+newDir+'");' if newDir Then the list is appended... @dlgfb.show_modal{} ensures that the dialog stays foremost until you Cancel or OK, I added img{ opacity:0.66; /*Firefox & Chrome*/ filter:alpha(opacity=66); /* IE */ } to the css so that the images are slightly transparent and show the selected item through themselves. I also edited the folder.png and erased the white edge areas so that it was 'transparent'. I also duplicated it as folderup.png and added an 'up' arrow onto it - this img is then added to the listed item IF its text is ../ - i.e. it's the navigate folder-up at the top of the list... if ( txt == '../') d.innerHTML = '<img src="./folderup.png"/> '+txt; else d.innerHTML = '<img src="./folder.png"/> '+txt; Also added tests for js's OK if ( selected_elem == null ) my_alert(); else if ( selected_elem.innerText.trim() == "../" ) my_alert(); else use_this( selected_elem.innerText.trim() ); Where my_alert() opens an error message telling you to select a folder before clicking OK - - the first trap is you haven't selected a folder yet and the second is you've selected the first item 'folder-up' which can't be taken as a folder-path. Also note how this d.ondblclick = function(id) { selected_elem = null folder_select(d.id);return(false); } ensures that if you have double-clicked the folder-up item or another folder, to move the list into there, then there is nothing remembered as the selected_elem - otherwise hitting OK when you were in the next folder level would take the last selected folder [double-clicked >> current-folder] as the desired one which is not what's wanted - but this way my_alert() will tell you to select something in the current list before pressing OK... I also changed the selection color to be less dark [ruby:3dez4ubj]this.style.background = 'gray';[/ruby:3dez4ubj] Hope these bits help...
  • Bug in Vector angle_between

    6
    0 Votes
    6 Posts
    427 Views
    Dan RathbunD
    @dan rathbun said: @unknownuser said: Note that the result is correct is the vector length is.. The cutoff appears to be (works at or above): vec.length = 0.03162316231623162**...** inches Actually, I think the cutoff is more like the rounded value, of the square root of Sketchup's internal tolerance (0.001) ie: (0.001)**(1/2.0) >> 0.0316227766016838 [table=bg1 table1:34jvzu3e][thead:34jvzu3e][tr=:34jvzu3e][th=1:34jvzu3e]So the general rule is:[/th:34jvzu3e][/tr:34jvzu3e][/thead:34jvzu3e][tbody:34jvzu3e][tr=bg2:34jvzu3e][td=1,:34jvzu3e]If the product of the lengths of the two vectors, is less than that of Sketchup's internal tolerance (0.001"), the angle returned by angle_between is Math::PI/2 [ (Math::PI/2).radians.round= 90 deg,] instead of Math::PI [ (Math::PI).radians.round**= 180 degrees.]**[/td:34jvzu3e][/tr:34jvzu3e][/tbody:34jvzu3e][/table:34jvzu3e] viz: v1.length = 0.03162278 v2.length = 0.03162278 v1.angle_between(v2) >> 3.14159265358979 v1.angle_between(v2).radians >> 180 %(#000000)[# degrees] @unknownuser said: I would imagine that SU would normalize the vectors first before computing the angle, so that it's independent of the size. AGREED !! At first i could not imagine why the length would have anything to do with it, but then seeing how a square root is involved, they are likely using pythagorean trigonometry. @unknownuser said: And why return PI / 2 and not 0? That's funny also, PI/2 radians is 90 degrees. Perhaps they choose a known 'reference' vector (say the X-axis) and find the angle between it an v1. Then choose another 'reference' vector 90 degrees from the first (the Y-axis), and compute the angle between it and v2. If there's a bug in there (say half of the algorithm craps out,) that may be why you wind up with 90. now your inline fix, in code is: v1.normalize.angle_between(v2.normalize) or v1.normalize.angle_between([array].normalize)
  • Using an observer to delete a screen note

    31
    0 Votes
    31 Posts
    4k Views
    P
    Hello, I experimented a little with modules now and I think (hope) I now understand the use of them. Despite all your great help it took me several hours till I found this: @unknownuser said: Like class methods, whenever you define a method in a module, you specify the module name followed by a dot and then the method name. Before that I used the method name without the module name in front and nothing worked... Matthias
  • How to input a time ?

    15
    0 Votes
    15 Posts
    1k Views
    P
    @dan rathbun said: @pvbuero said: Where to find the variable with the time ? def get_shadow_time > model = Sketchup.active_model > shadowinfo = model.shadow_info > shadtime = shadowinfo['ShadowTime'] > # shadtime is a Time class object > end > Ruby Time class from the 'Pick-Axe' book. Time class in Ruby Core Docs. I didn't mean in SU. I meant "variable with the time" in the javascript file ... But I think that's to much new stuff at once.
  • WebDialog and utf-8 Problem

    5
    0 Votes
    5 Posts
    324 Views
    B
    thanks for your advice, I will try your suggested methods.
  • Posting tables of data in the forum

    11
    0 Votes
    11 Posts
    2k Views
    Dan RathbunD
    @thomthom said: No Ruby fun - only PHP... I posted a Ruby Hilited test example(s) at the phpBBStyles forum, ie: Code Test - Ruby EDIT: corrected URL as topic was moved by phpbbstyles moderator. .. in order to see how well the phpBB Syntax Highlighter MOD works/looks. Adds a BBCode 'syntax' which allows you to post programs / scripts in upto 132 languages and have the post Syntax Highlighted using GeSHi.General description: http://www.phpbb.com/customise/db/mod/syntax_highlighter More info (install notes, etc.): http://www.phpbb.com/community/viewtopic.php?t=1697035#p10232505 Extra info: http://www.phpbbstyles.co.uk/info/viewtopic.php?f=6&t=39&p=83 Supported coding Syntaxes: [ emphasis on some by me ] @unknownuser said: Syntax Highlighter - 1.0.8](http://www.phpbbstyles.co.uk/info/viewtopic.php?f)":sk3p0i6l] now supports 138 languages. Supported Syntaxes: abap, actionscript, actionscript3, ada, apache, applescript, apt_sources, asm, asp, autoit, avisynth, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_mac, caddcl, cadlisp, cfdg, cfm, cil, cmake, cobol, cpp, cpp-qt, csharp, css, d, dcs, delphi, diff, div, dos, dot, eiffel, email, erlang, fo, fortran, freebasic, genero, gettext, glsl, gml, gnuplot, groovy, haskell, hq9plus, html4strict, idl, ini, inno, intercal, io, java, java5, javascript, kixtart, klonec, klonecpp, latex, lisp, locobasic, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, make, matlab, mirc, modula3, mpasm, mxml, mysql, nsis, oberon2, objc, ocaml, ocaml-brief, oobas, oracle11, oracle8, pascal, per, perl, php, php-brief, phpbb, pic16, pixelbender, plsql, povray, powershell, progress, prolog, properties, providex, python, qbasic, rails, rebol, reg, robots, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, sql, tcl, teraterm, text, thinbasic, tsql, typoscript, vb, vbnet, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xhtml, xml, xorg_conf, xpp, z80 Using GeSHi version: 1.0.8.4
  • Export images: how to?

    14
    0 Votes
    14 Posts
    728 Views
    Didier BurD
    @thomthom: correct, I need the names for another purpose, along with the associated definition. (su2pov) @Dan: - I didn't even know that an image could have no name... How can this occur (each image has a path (with a file name at the end) image.path=nil occured only one time with an old model and I cannot reproduce this, so I think I made an error whan typing code in the console or something like that... - tw exports at the original format.
  • Find the global position of a Vertex in a Group/Component

    25
    0 Votes
    25 Posts
    5k Views
    K
    one small correction to the code posted by Glenn: after calling createVerticesArray on line 14, add the line: trans_h.pop otherwise, if there are multiple sub-components in the entities collection, you will take into account the transformation of any entity that came before. Otherwise, great code, very useful. Thanks! -- Karen
  • Auto add numbers in Ruby?

    12
    0 Votes
    12 Posts
    517 Views
    J
    @dan rathbun said: also.. printf "%04d%s\n" % [i, name] is adding an extra operation eval that's not needed. Note to self: % is a method of Strings. Thanks.
  • How to avoid generating line between joint?

    19
    0 Votes
    19 Posts
    1k Views
    S
    Hi TIG, Finally made it and got my mesh. To cut through, need to cut from the opposite direction. To cut in (make a shell), need to cut from outside to inside. No need to do all the |e|e.erase! ... check. Thanks [image: GflN_mesh.gif]
  • Remove In Model from Components

    4
    0 Votes
    4 Posts
    312 Views
    TIGT
    IF there are any components placed in a SKP model when Sketchup opens you can't purge them. Unused components can be purged... and then they are only accessible from the Components folder again... So, unless you want to somehow explode all component instances at startup and then purge unused [=ALL], you must always have some components in the browser of any previously-used SKP, where you have placed some components ???
  • If Toolbar is true make it false

    54
    0 Votes
    54 Posts
    3k Views
    Dan RathbunD
    @simonstaton said: I dont suppose you know what the toolbar name would be for the large toolset do you? It does NOT have a string identifer that works with UI.toolbar_names or UI.set_toolbar_visible, etc. This is a bug in the API; we have asked that it be fixed. Misspelled argument: 'Principle' for the Principal toolbar. The missing arguments: %(#000000)[**identifier]%(#F0F0F0)[____]%(#000000)[tb_ID]%(#F0F0F0)[_]%(#000000)[send_action int "LargeToolSet"]%(#F0F0F0)[_]%(#000000)[(211)]%(#F0F0F0)[__]%(#000000)[23056 "Layers"]%(#F0F0F0)[_______]%(#000000)[(220)]%(#F0F0F0)[__]%(#000000)[21132 "Shadows"]%(#F0F0F0)[______]%(#000000)[(103)]%(#F0F0F0)[__]%(#000000)[10546**] NOTE: %(#000000)[**"Dynamic Components"]%(#F0F0F0)[_]%(#000000)[(59648)]** is a ruby toolbar (not a native toolbar.) You must use UI.toolbar('Dynamic Components') with the .visible?, .restore, .hide and .show methods.
  • Dynamic Components and Glue To

    6
    0 Votes
    6 Posts
    564 Views
    K
    A DC tech reference would be pretty awesome. Thanks! -- Karen
  • Sun elevation and azimut

    11
    0 Votes
    11 Posts
    3k Views
    P
    Adam, I tried it. It is very close to what I need. I give you a PM with further details. Matthias
  • Debug Traces in Sandbox From Contours

    7
    0 Votes
    7 Posts
    408 Views
    Dan RathbunD
    @unknownuser said: The others [warnings] with LibTraductor are inevitable, because, for compatibility reasons, I load twice LibTraductor code (the old file LibTraductor.rb for JoinPushPull and then the one from LibFredo6). When you next update the LibFredo6.. you can suppress the warnings when you know that your about to redefine old methods. Save $VERBOSE to a reference, then set $VERBOSE to nil (silent mode,) when done overriding methods, reset $VERBOSE back to what it was. MAKE SURE YOU SET IT BACK !! (or some peeps may get angry.)
  • View.line_width limited to 10px?

    3
    0 Votes
    3 Posts
    246 Views
    thomthomT
    Yea - I noticed that drawing lines doesn't miter - but I'd rather that the line width wasn't limited. Using a thick linewidth was a quick and easy way to draw squares by only using two points. To workaround this one has to create all the points which then requires more calculations in Ruby which makes things slow.

Advertisement