@thomthom said:
I had a look at model.import
and found that it annoyingly didn't return the definition to the imported model. Instead it activates a tool for the user to place it.
I created this little snippet that worked around that and placed the imported model at a given coordinate:
<span class="syntaxdefault"><br />module Test<br /><br /> def self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">import_3ds</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> file </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'c;/cube.3ds'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> position </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> ORIGIN </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> model </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_model<br /> </span><span class="syntaxcomment"># Cache camera position because model#import will change it.<br /></span><span class="syntaxdefault"> camera </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_view</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">camera<br /> eye </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> camera</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">eye<br /> target </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> camera</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">target<br /> up </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> camera</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">up<br /> </span><span class="syntaxcomment"># Begin import operation.<br /></span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">start_operation</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">'Import 3DS Model'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> false </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># Cache existing list of definitions.<br /></span><span class="syntaxdefault"> cache </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">definitions</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">to_a<br /> </span><span class="syntaxcomment"># Import model, this will attach it to the cursor.<br /></span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">import</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> file </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">select_tool</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> nil </span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxcomment"># Deactivate Place Model tool.<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># Find root definition because the import creates multiple definitions.<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># The sub-components are maked as #internal? - so we look for the one<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># without the mark.<br /></span><span class="syntaxdefault"> imported </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">definitions</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">to_a </span><span class="syntaxkeyword">-</span><span class="syntaxdefault"> cache<br /> definition </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> imported</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">find </span><span class="syntaxkeyword">{</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">|</span><span class="syntaxdefault">d</span><span class="syntaxkeyword">|</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!</span><span class="syntaxdefault">d</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">internal</span><span class="syntaxkeyword">?</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># Place instance in current context.<br /></span><span class="syntaxdefault"> tr </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Geom</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">Transformation</span><span class="syntaxkeyword">.new(</span><span class="syntaxdefault"> position </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">active_entities</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">add_instance</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> definition</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> tr </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># Restore camera.<br /></span><span class="syntaxdefault"> camera</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">set</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> eye</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> target</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> up </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span><span class="syntaxcomment"># Finished! ;)<br /></span><span class="syntaxdefault"> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">commit_operation<br /> rescue<br /> model</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">abort_operation<br /> raise<br /> end<br /><br />end </span><span class="syntaxcomment"># module<br /></span><span class="syntaxdefault"> </span>
I test the code, it works well. Thanks!
But now I find a problem about the given coordinate which is designated by me. After importing the model, the position of the model may not be the one I designated. This is because of the file I want to import. Use the Bed.skp file as an example. Suppose I have two Bed models as these in the attachment, if I import them into sketchup with the same given coordinate, after importing, however, the positions of them are not same.
I want to import model with its center at given coordinate in sketchup, no matter where the model is in the import file. Is there any way to implement it?