sketchucation logo sketchucation
    • Login
    1. Home
    2. Iltis
    3. Posts
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info
    Offline
    • Profile
    • Following 0
    • Followers 0
    • Topics 10
    • Posts 41
    • Groups 1

    Posts

    Recent Best Controversial
    • RE: Searching for a plugin code template

      Thank you very much, this is exactly what I'm looking for ! πŸ˜„ πŸ˜„ πŸ˜„

      posted in Developers' Forum
      IltisI
      Iltis
    • Searching for a plugin code template

      Hello everyone,

      I would like to "cleanly" code small extensions for SketchUp.

      Is there somewhere an empty code template with best practices ? with comments that say "you have to put (this) here"

      For example, I'm wondering about :

      • how many folders ?
      • where (folder) to put toolbar icons, what formats are supported ?
      • where to put menu descriptions in the code ?
      • how to separate the code into different files ?
      • which "containers" to use in the code ?

      I'm not a strong coder, so I'm sorry if these questions seem trivial.

      Do you have anything like this to hand?

      Thank you for your help,
      Renaud

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: [Plugin] Select Curve

      Hi @thomthom and folks,

      I just managed to insert custom cursors to this usefull plugin.
      Attached are the .png files.
      The images are in the same folder than "core.rb"

      And this is the code :

      def initialize(settings)
            @settings = settings
            
      		folder_path = File.dirname(__FILE__)
      		
      		cursor_name = 'cursor_select_curve.png'
      		cursor_select_curve_path = File.join(folder_path, cursor_name)
      	   @result = File.file?(cursor_select_curve_path)
      	   unless @result
      		  msg = "Can't find the 'cursor icon' path"
      		  UI.messagebox(msg, MB_OK)
      		  return
      		end
      		
      		cursor_name = 'cursor_select_curve_plus.png'
      		cursor_select_curve_plus_path = File.join(folder_path, cursor_name)
      	   @result = File.file?(cursor_select_curve_plus_path)
      	   unless @result
      		  msg = "Can't find the 'cursor icon' path"
      		  UI.messagebox(msg, MB_OK)
      		  return
      		end
      		
      		cursor_name = 'cursor_select_curve_minus.png'
      		cursor_select_curve_minus_path = File.join(folder_path, cursor_name)
      	   @result = File.file?(cursor_select_curve_minus_path)
      	   unless @result
      		  msg = "Can't find the 'cursor icon' path"
      		  UI.messagebox(msg, MB_OK)
      		  return
      		end
      		
      		cursor_name = 'cursor_select_curve_plus_minus.png'
      		cursor_select_curve_plus_minus_path = File.join(folder_path, cursor_name)
      	   @result = File.file?(cursor_select_curve_plus_minus_path)
      	   unless @result
      		  msg = "Can't find the 'cursor icon' path"
      		  UI.messagebox(msg, MB_OK)
      		  return
      		end
      		
      		@cursor_select        = UI.create_cursor(cursor_select_curve_path, 9, 5)
            # @cursor_select        = TT;;Cursor.get_id( ;select )
            @cursor_select_add    = UI.create_cursor(cursor_select_curve_plus_path, 9, 5)
            # @cursor_select_add    = TT;;Cursor.get_id( ;select_add )
            @cursor_select_remove = UI.create_cursor(cursor_select_curve_minus_path, 9, 5)
            # @cursor_select_remove = TT;;Cursor.get_id( ;select_remove )
      		@cursor_select_toggle = UI.create_cursor(cursor_select_curve_plus_minus_path, 9, 5)
            # @cursor_select_toggle = TT;;Cursor.get_id( ;select_toggle )
      		
            @ctrl   = false
            @shift  = false
          end
      

      (I'm not good in Ruby, sorry)

      Hope this helps.
      Renaud


      cursor_select_curve.png


      cursor_select_curve_minus.png


      cursor_select_curve_plus.png


      cursor_select_curve_plus_minus.png

      posted in Plugins
      IltisI
      Iltis
    • RE: [Plugin] Select Curve

      Hello @thomthom, thank you very much for this very usefull plugin.

      Is there a way to add a modified cursor? (I can draw it if you tell me the specifications.)

      posted in Plugins
      IltisI
      Iltis
    • RE: Triangle orientation

      Thank you very much for this explanation and for the special case.
      It helps a lot.

      posted in Developers' Forum
      IltisI
      Iltis
    • Triangle orientation

      Hello,

      I'm creating faces with 3 points :
      face = model.entities.add_face(pts)

      Could you tell me if there is a way to know the orientation of the face according to the "direction of the rotation" between the 3 points?

      Thank you very much.
      Renaud.

      posted in Developers' Forum
      IltisI
      Iltis
    • Invert inverted axes in symetrical components

      Hello,

      If the making process of a component is a duplication by symetrical operation, then "make unique", the axis are inverted.
      (Sorry for this bad english! 😞 )

      This is a problem for me for a plugin containing arcs exportation.

      Do you know how to test the orientation of the axis and how to change it temporarely in my calculations if it's not direct (red, green, blue)?

      I think it must be here in my code :

      # Recursively export faces and exploding groups and components
      def self.write_content(file, selection, tform, z)  # if z==1, it's a 3D export file, if z==0, it's a 2D export file (all the Z values are equal to "0.0" and the normal.z is equal to "1.0"
         selection.each do |entity|    
            if entity.is_a?(Sketchup;;Face)
            transform_vector_of_group(entity.normal, tform)
               if z == 1 || (z == 0 && transform_vector_of_group(entity.normal, tform).parallel?(Z_AXIS) && transform_point_of_group(entity.vertices[0].position, tform).z.abs < 0.001 ) # Sketchup tolerance ; 0.0001 inch
                  $number_of_exported_faces +=1
                  write_face(file, entity, tform, z)
                  result = Sketchup.set_status_text $number_of_exported_faces.to_s, SB_VCB_VALUE
               end
            elsif entity.is_a?(Sketchup;;Group) || entity.is_a?(Sketchup;;ComponentInstance)
               if entity.is_a?(Sketchup;;Group)
                  definition = entity.entities.parent
               else
                  definition = entity.definition
               end
               write_content(file, definition.entities, tform * entity.transformation, z)
            end
         end
      end
      

      Thank you very much.
      Renaud.

      posted in Extensions & Applications Discussions extensions
      IltisI
      Iltis
    • RE: How detect that a file is locked by another app?

      Thank you very much for these complementary solutions.

      Renaud.

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: How detect that a file is locked by another app?

      TIG, your solution is working fine. Thank you very much. πŸ‘

      @jim said:

      Did you try something like File.writable?("file")?

      Yes Jim, not working. 😞

      BR,
      Renaud.

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: How detect that a file is locked by another app?

      OK, will try it. Thank you!

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: How detect that a file is locked by another app?

      Hello driven,

      Thank you for your answer, but I think it's not what I need.
      In my case, in the real code (not my example here), the export is in a .dxf file. To test the quality/errors of the export, the .dxf file is open in a CAD software. Then, if I try in SU to overwrite the file with my plugin (after some modification in the SU model for example), and if the file is already opened in the CAD software, the file is locked by the CAD software. If I make this with a .txt file opened in Notepad++, there is no problem, because Notepad is not locking the file (and will detect the change!).
      I want to track the error and say to the user to close the file in the CAD software or to rename the file.

      (I'm french, sorry for my writting mistakes.)
      Renaud.

      posted in Developers' Forum
      IltisI
      Iltis
    • How detect that a file is locked by another app?

      Hello,

      After more than one hour of research, I already don't know how to catch the error when I export a file already opened by another application. 😑

      out_name = UI.savepanel('Location', '' , "#{File.basename(model.path).split(".")[0]}.txt")
      if out_name
         if File.extname(out_name).downcase != ".txt"	 # if the user erase the extension, rewrite it!
            out_name += ".txt"
         end
         file = File.new(out_name , 'w')
         file.puts(%Q["blabla"])
         file.close()
      end
      

      @unknownuser said:

      Error: #<Errno::EACCES: Permission denied - C:\test\test3.txt>

      Could you help me? I wanted to send a message to the user (and maybe to propose to increase an index at the end of the file's name).

      Best regards,
      Renaud.

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: [solved]Syntax problem with a Sketchup::Face

      Thanks TIG! πŸ˜„

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: [solved]Syntax problem with a Sketchup::Face

      OK, it's a typo! entitiy instead of entity! Shame on me!

      posted in Developers' Forum
      IltisI
      Iltis
    • [solved]Syntax problem with a Sketchup::Face

      Hello,

      Could you tell me what's wrong in this code? 😞
      (Z is a parameter. If z=0, I want only the faces in the Z=0 plane)

      selection.each do |entity|    
            if entity.is_a?(Sketchup;;Face)
      				 if z == 1 || (z == 0 && entity.normal.x.abs < 0.00001 && entitiy.normal.y.abs < 0.00001 && entity.vertices[0].z.abs < 0.000001 ) # Sketchup tolerance ; 0.0001 inch)
      					  ........
      

      In the Ruby console :
      Error: #<NameError: undefined local variable or method `entitiy'

      Thank you for your help.
      BR,
      Renaud.

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: [plugin]Export arcs, circles and vertex to dxf ?

      I just saw that the .xaxis propery of the arcs are rotated => start_angle=0 is right, because the reference is wrong. OK, knowing that, I can see how to do this.

      posted in Extensions & Applications Discussions
      IltisI
      Iltis
    • RE: [plugin]Export arcs, circles and vertex to dxf ?

      Hello TIG,
      Like other people, I have the following problem : with the (Sketchup::ArcCurve) entities, the arcs are always rotated, with the .start_angle value equal to 0.0 (and not equal to the angle with the X axe, the API documentation is wrong on this point in my situation - working with the entities of the loops).
      Do you have a clean (and 3D) workaround?
      Best regards,
      Renaud.

      posted in Extensions & Applications Discussions
      IltisI
      Iltis
    • RE: [plugin]Export arcs, circles and vertex to dxf ?

      Thanks TIG, I will work on it.

      posted in Extensions & Applications Discussions
      IltisI
      Iltis
    • List of entities and organisation ?

      Hello,

      Do you know if there is a schematic/list of the SketchUp geometrical entities and of their relationships?

      For example : ArcCurve (arcs and circles) is a subclass of the Curve class, and an edge is a part of a random curve if edge.curve return a curve, and a part of an arccurve if edge.curve return an arccurve.

      Best regards,
      Renaud.

      posted in Developers' Forum
      IltisI
      Iltis
    • RE: [plugin]Export arcs, circles and vertex to dxf ?

      Hi,
      In fact, there is the problem of the order of the vertices to make the polylines. I think I must follow the loops, like in the initial code of guitar-list, but I must test the ".curve" of each vertex and extract the arcs, circles, and the polylines with vertices in the order. A little tricky for me, I will take a paper and a pencil! πŸ˜„

      posted in Extensions & Applications Discussions
      IltisI
      Iltis
    • 1 / 1