Instructor content
-
seems like the response is relative to the help directory on pc
writing the following brings up the eraser tool
def getInstructorContentDirectory return "\\21019\\" end
so looks like relative paths it is
-
hmmmm the following works well on pc too
def getInstructorContentDirectory return "../../../../Tools/etc/instructor/" end
-
Woohoo! That totally does it. that works in 7.1 also, I did not test anything earlier than that. Here is my code that uses it and points to a directory inside the plugins folder:
` class Clf_instructor
def getInstructorContentDirectory
return "..\..\..\..\Plugins\doc\"
end
endSketchup.active_model.select_tool Clf_instructor.new`
(that is just a snippet I was running from the webconsole, not actually part of a full file).
Thanks for coming back and posting that,
Chris
-
The instructor works???
Nice find! -
This'll be useful for Bezier Surface.
-
Another example of how the API docs (and a poorly written example,) have thrown us all off course for months!
-
@dan rathbun said:
Another example of how the API docs (and a poorly written example,) have thrown us all off course for months!
It does smell like a bug though. It doesn't sound right that they intended people to add custom Instructor content to the SU Instructor content folder.
-
@thomthom said:
@dan rathbun said:
Another example of how the API docs (and a poorly written example,) have thrown us all off course for months!
It does smell like a bug though. It doesn't sound right that they intended people to add custom Instructor content to the SU Instructor content folder.
Its unusual that they document absolute paths but only go with relative paths, not that relative paths are bad by any means.
-
@bentleykfrog said:
@thomthom said:
@dan rathbun said:
Another example of how the API docs (and a poorly written example,) have thrown us all off course for months!
It does smell like a bug though. It doesn't sound right that they intended people to add custom Instructor content to the SU Instructor content folder.
Its unusual that they document absolute paths but only go with relative paths, not that relative paths are bad by any means.
It's awkward though. I run my plugins I develop from custom locations because I use Mercurial for revision control. So providing a path to a custom location from the hard coded instructor folder isn't ideal. (does it even work across drive letters?)
And because some OSX users put their plugins in the user folder instead of the default, one can never rely to plugins to be at a fixed relative path. -
Does anyone know how to find out how many slashes and dots are needed at certain end user comp ("..\..\..\..\"). I mean if someone has installed sketchup in a custom subdirectory it is necessary to add/remove one of "..\" I guess.
-
I have use this successfully to get my FreeRotate Instructor to work
<span class="syntaxdefault">def getInstructorContentDirectory</span><span class="syntaxkeyword">()<br /> </span><span class="syntaxdefault">path</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">expand_path</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">dirname</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">__FILE__</span><span class="syntaxkeyword">),</span><span class="syntaxstring">"FreeRotate"</span><span class="syntaxkeyword">)).</span><span class="syntaxdefault">split</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">)<br /> </span><span class="syntaxdefault">0.upto</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">path</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">length</span><span class="syntaxkeyword">-</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">){|</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">| </span><span class="syntaxdefault">path</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">i</span><span class="syntaxkeyword">]=</span><span class="syntaxstring">'..' </span><span class="syntaxkeyword">}<br /> if [</span><span class="syntaxdefault">PLATFORM</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">grep</span><span class="syntaxkeyword">(/</span><span class="syntaxdefault">mswin</span><span class="syntaxkeyword">/)==[</span><span class="syntaxdefault">PLATFORM</span><span class="syntaxkeyword">] </span><span class="syntaxcomment">### PC<br /> </span><span class="syntaxkeyword">return </span><span class="syntaxdefault">path</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">)+</span><span class="syntaxstring">'/'<br /> </span><span class="syntaxkeyword">else<br /> return </span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">path</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">)+</span><span class="syntaxstring">'/'<br /> </span><span class="syntaxdefault">end</span><span class="syntaxcomment">#if<br /></span><span class="syntaxdefault">end</span>
It should work cross platform?
-
My method 2 posts before this uses the absolute path of the calling script to construct a relative path to the important folders ?
How do we allow for MAC users with their plugins 'in the wrong place' OR even my uni students who have to install their PC 3rd party scripts in their persona H:/Sketchup_Plugins/ folder, with a script added by their IT guys in the main Plugins to add that path to their $LOAD_PATH array... Would these still work with my idea ?? -
Can we get the path of the resource folder?
If so, then we could add ../ back references until we're back at the root, then apply the absolute path.
Though, how does one deal with different drive letters under Windows? -
-
@bentleykfrog said:
def getInstructorContentDirectory > plugin_folder = Sketchup.find_support_file test_file.html, "Tools/My Plugin/" > plugin_folder = plugin_folder.split("test_file.html") > plugin_folder_array = plugin_folder[0].split("/") > if(plugin_folder_array[1] == "Library") > #so the plugin/tool is stored in the main library > return "../../../../Tools/My Plugin/Instructor/" > elseif (plugin_folder_array[1] == "Program Files" || plugin_folder_array[1] == "Program Files (x86)") > #the operating system is PC, so only 1 location for tools/plugins > #there's probably a better way to do this > return "../../../../Tools/My Plugin/Instructor/" > else > #not sure about this, especially since it could be traversing drives > return "../../../../../../../../../"+plugin_folder+"Instructor/" > end > end
plugin_folder = Sketchup.find_support_file test_file.html, "Tools/My Plugin/"
This is not reliable way to find the location of where your plugin is installed. This is what breaks under OSX when users place them in incorrect locations - and it will also throw errors is people install plugins to custom locations, like TIG and I do.To get the path of your plugin:
plugin_path = File.dirname( __FILE__ )
To get SU Plugins path:
su_plugin_folder = Sketchup.find_support_file( 'Plugins' )
We can get the Resource folder by using:
plugin_folder = Sketchup.find_support_file( 'Resources' )
But then there's a folder named after the current locale...
-
@kirill2008 said:
Does anyone know how to find out how many slashes and dots are needed at certain end user comp ("..\..\..\..\"). I mean if someone has installed sketchup in a custom subdirectory it is necessary to add/remove one of "..\" I guess.
I think that because its relative to [sketchup folder]/Resources/[language]/helpcontent/tool/ that it shouldn't matter where sketchup is installed, as this will be constant. The parent directory "..\" folder just goes back through tool -> helpcontent -> [language] -> resources to get you to the base [sketchup folder].
@thomthom said:
And because some OSX users put their plugins in the user folder instead of the default, one can never rely to plugins to be at a fixed relative path.
You're right this is a huge issue. I'm guessing that on OSX this path will be relative to the main library folder (ie. [primary hard drive]/Library/Application Support/[sketchup folder]/Sketchup/Resources/[language]/helpcontent/tool/). So maybe you can do some comparison between
Sketchup.find_support_file "[some_file].html", "Tools/[your_plugin]/"
and the main library location, like this:def getInstructorContentDirectory plugin_folder = Sketchup.find_support_file test_file.html, "Tools/My Plugin/" plugin_folder = plugin_folder.split("test_file.html") plugin_folder_array = plugin_folder[0].split("/") if(plugin_folder_array[1] == "Library") #so the plugin/tool is stored in the main library return "../../../../Tools/My Plugin/Instructor/" elsif (plugin_folder_array[1] == "Program Files" || plugin_folder_array[1] == "Program Files (x86)") #the operating system is PC, so only 1 location for tools/plugins #there's probably a better way to do this return "../../../../Tools/My Plugin/Instructor/" else #not sure about this, especially since it could be traversing drives return "../../../../../../../../../"+plugin_folder+"Instructor/" end end
I'm not sure about the OSX support, but I'll check after I'm finished with my work on the PC.
What do you guys think?
-niall
-
Ah!!!
Sketchup.get_resource_path( 'helpcontent' )
returns:
C:/Program Files (x86)/Google/Google SketchUp 8/Resources/en-US/helpcontent
-
File.exist?( 'C:/temp/test.png' )
Returns:
true
<span class="syntaxdefault"><br />path </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">get_resource_path</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">'helpcontent'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">parts </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> path</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">split</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> File</span><span class="syntaxkeyword">;;</span><span class="syntaxdefault">SEPARATOR </span><span class="syntaxkeyword">).</span><span class="syntaxdefault">size<br />root </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"..#{File;;SEPARATOR}"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">*</span><span class="syntaxdefault"> parts<br />file </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> path</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> root</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'temp'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'test.png'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault">File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">exist</span><span class="syntaxkeyword">?(</span><span class="syntaxdefault"> file </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> </span>
Returns:
true
(Updated it use
File::SEPARATOR
)(
file
=C:/Program Files (x86)/Google/Google SketchUp 8/Resources/en-US/helpcontent/../../../../../../../temp/test.png
)Restricted to the drive SketchUp is installed to.
Untested under OSX -
File.exist?( 'H:/temp/test.png' )
Returns:
true
<span class="syntaxdefault"> tfile </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'H;/temp/test.png'<br /></span><span class="syntaxdefault"> tdrive </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> tfile</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">split</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">)[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]<br /></span><span class="syntaxdefault"> path </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> Sketchup</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">get_resource_path</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">'helpcontent'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> patha </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> path</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">split</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> patha</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> tdrive<br /> parts </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> patha</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">size </span><span class="syntaxkeyword">-</span><span class="syntaxdefault"> 1<br /> root </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">'../'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">*</span><span class="syntaxdefault"> parts<br /> file </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> patha</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">join</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/'</span><span class="syntaxkeyword">),</span><span class="syntaxdefault"> root</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'temp'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">'test.png'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">)<br /></span><span class="syntaxdefault"> File</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">exist</span><span class="syntaxkeyword">?(</span><span class="syntaxdefault"> file </span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span>
Returns:
true
( file = H:/Program Files (x86)/Google/Google SketchUp 8/Resources/en-US/helpcontent/../../../../../../../temp/test.png )
So you have to know the drive letter of the file you are testing and then cludge that into the tested path...
It will then work across drives on a network - unsure of a MAC though ??? -
But, does that work for the instructor?
Advertisement