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

    Posts

    Recent Best Controversial
    • RE: Quadrulate

      jeff. you rotated your line in the video and then they were duplicated yrount the circle. how you did that (shortcut)

      posted in SketchUp Discussions
      E
      e-anima
    • RE: Quadrulate

      hmm view hidden does not show them on every face. only on some in my case.

      posted in SketchUp Discussions
      E
      e-anima
    • RE: Quadrulate

      how did you activated the dottet lines. so that you see where a line would be?

      posted in SketchUp Discussions
      E
      e-anima
    • Quadrulate

      Hi,

      i wonder if there is a possibility to quadrualate (make faces with quads, its like triangulate only for quads) faces.
      i added an attachment that shows why this is important for me. at the moment the only way i know is to make it by hand with every geometry.

      thank youUnbenannt-1.jpg

      posted in SketchUp Discussions sketchup
      E
      e-anima
    • RE: [Plugin] Selection Toys

      i do not know how to do the following. i have a cylinder and it is seperated in the middle by a loop of edges around. its like cut in the middle. how can i only select thes edges. its an edge ring. thank you

      posted in Plugins
      E
      e-anima
    • RE: Edge Loop

      @unknownuser said:

      If it's a ring that's parallel with the top/bottom copy the top's edges - select+move+ctrl-key, constrain copying in axis using shift-key... a new edges ring will be made.

      thank you, this is nice

      posted in SketchUp Discussions
      E
      e-anima
    • Edge Loop

      Hi,

      i have a cylinder and wanted to add some divisions to it. the only way i found to do it, is to take the pen tool and paint a "ring" around. isnt there a better way? In Maya for example there is a function called "insert edge loop".

      posted in SketchUp Discussions sketchup
      E
      e-anima
    • Turntable animation

      Hi,

      i am trying to do a simple turntable animation in 72 Frames. (Webexporter does that automatically but has a poor image resolution).
      i tried a plugin "Proper Animation" but this only rotated my objekt in sketchup. Export animation did not work and i can not set the Frames and then it would be too fast in movement.

      thank you

      marco

      posted in Newbie Forum sketchup
      E
      e-anima
    • RE: Web Exporter Resolution/zoom

      i like the way it generates the 360 degree pictures automatically. is there another way to do that automated?

      posted in Developers' Forum
      E
      e-anima
    • Web Exporter Resolution/zoom

      Hi,

      anyone ever testet Google Webexporter? http://dl.google.com/sketchup/gsu6/plugins/sketchup6webexporterwen.exe
      its nice, but it has one problem. the resolution is limited to 600x600. Anyone has an idea how to raise it. I tried editing the code but changings had no effect

      fileswivelButton.rb

      # initialize the image size
        @@imageWidth = Sketchup.read_default @@title, "defaultImageSize"
        if(!@@imageWidth || @@imageWidth < 50 || @@imageWidth > 600)
          @@imageWidth=10000 # i changed 400 to 1000
        end
        @@imageHeight = @@imageWidth
      

      complete code

      # Copyright 2008 Google Inc.
      # All Rights Reserved.
      
      ##
      # @fileoverview swivelButton.rb creates a SketchUp plugin button
      # that makes the camera orbit a model and produce a series of pictures.
      # These pictures can then be used with the generated HTML/javascript to
      # view the object in a web page.
      #
      # Permission to use, copy, modify, and distribute this software for 
      # any purpose and without fee is hereby granted, provided that the above
      # copyright notice appear in all copies.
      #
      # THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
      # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
      # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
      ##
      
      require File.dirname(__FILE__) + "/bin/RubyZip"
      
      ##
      #  Treat the swivelButton as a singleton
      ##
      class SwivelButton
      
      
      @@pluginDirectory = File.dirname(__FILE__)
      @@title = "SketchUp Web Exporter"
      @@swivelDlg = 0
      
      
      ##
      # Main entry point
      ##
      def SwivelButton;;init()
      
        # Somehow we do not have a current directory. Alert the user and end.
        if !File.directory?(@@pluginDirectory)
          alert(@@title + " plugin has encountered an error;\n" +
                "Could not find the plugin directory. " +
                "Please re-install the plugin.")
          return
        end
      
        # make sure the plugin was installed correctly
        tempImgDirectory = @@pluginDirectory + "/images"
        if !File.directory?(tempImgDirectory) || 
           !File.writable?(tempImgDirectory) 
          alert(@@title + " plugin has encountered an error;\n" +
                "Could not find or could not write temporary images to;\n" +
                "[" + tempImgDirectory + "]\n" + 
                "Please re-install the plugin.")
          return
        end
      
        cmd = UI;;Command.new(@@title) {handleToolbarButtonPress()}
        cmd.small_icon = tempImgDirectory + "/swivelButtontb.png"
        cmd.large_icon = tempImgDirectory + "/swivelButtontb.png"
        cmd.status_bar_text = cmd.tooltip = "Create a set of images orbiting a model"
        cmd.menu_text = @@title
        swivelToolbar = UI;;Toolbar.new(@@title) 
        swivelToolbar.add_item(cmd)
        swivelToolbar.show
      
        UI;;menu('Tools').add_item(cmd);
      end 
      
      
      ##
      # When the user presses the swivel button in the toolbar, this function
      # sets up the camera, takes the pictures and displays a progress dialog box.
      ##
      def SwivelButton;;handleToolbarButtonPress()
        # initialize the image size
        @@imageWidth = Sketchup.read_default @@title, "defaultImageSize"
        if(!@@imageWidth || @@imageWidth < 50 || @@imageWidth > 600)
          @@imageWidth=400
        end
        @@imageHeight = @@imageWidth
      
        @@modelName = createModelName()
        # create an image to use for the first shot
        tempImgDirectory = @@pluginDirectory + "/images"
        tempImage =  tempImgDirectory + "/swivelButtonTempImage.jpg"
      
        # make sure the directory exists
        if !File.directory?(tempImgDirectory) || 
           !File.writable?(tempImgDirectory) ||
           (File.exist?(tempImage) && !File.writable?(tempImage))
          alert(@@title + " plugin has encountered an error;\n" +
                "Could not find or could not write the temporary image to;\n" +
                "[" + tempImage + "]\n" + 
                "Please re-install the plugin.")
          return
        end
      
        # zoom extents
        zoomInitial()
        # save the image
        # saveModelImage(tempImage, false, false)
      
        @@swivelDlg = UI;;WebDialog.new @@title, false, @@title, 490, 700, 10, 10, false
        @@swivelDlg.set_file @@pluginDirectory + "/html/swivelButton.html"
        # @@swivelDlg.set_size 490, 670
        resizeWindow(490, 670, @@imageWidth, @@imageHeight, @@swivelDlg)
        
        addGenerateImagesButtonCallback()
        addCancelButtonCallback()
        addCloseCallback()
        addOpenPage()
        addGetDirectoryCallback()
        addCreateDirectoryCallback()
        addCaptureNextImageCallback()
        addSaveDialogSettingsCallback()
        addResizeWindowCallback()
        addOpenFolderCallback()
      
        # Now show the dialog 
        @@swivelDlg.show_modal {
          @@imageDirectory = Sketchup.read_default @@title, "defaultDirectory"
          # make sure the variable was set
          if !@@imageDirectory
            @@imageDirectory = @@pluginDirectory + "/results/"
          end 
      
          #if it does not exist, make it
          if !File.exist?(@@imageDirectory)
            begin
               Dir.mkdir(@@imageDirectory)
            rescue
               @@imageDirectory = @@pluginDirectory + "/results/"
            end      
          else 
            # see if we can write to it
            if !File.directory?(@@imageDirectory) ||
               !File.writable?(@@imageDirectory)
              @@imageDirectory = @@pluginDirectory + "/results/"
            end
          end 
      
          #make sure it is a writable directory. Since we default to the 
          #plugin directory, if this fails, then they need to re-install.
          if !File.directory?(@@imageDirectory) ||
             !File.writable?(@@imageDirectory)
            alert(@@title + " plugin has encountered an error;\n" +
                  "Could not access the model directory;\n" +
                  "[" + @@imageDirectory + "]\n" + 
                  "Please re-install the plugin.")
            return
          end
      
          # read in the image count and convert the string to an integer
          @@imageCount = Sketchup.read_default @@title, "defaultImageCount"
          @@imageCount = @@imageCount.to_i
      
          if !@@imageCount || @@imageCount < 3
            @@imageCount = 36
          end
      
          # make sure we have a model name
          @@modelName = createModelName()
      
          script = "init('" + @@imageDirectory  + "', " + 
                         "'" + @@modelName + "', " +  
                         @@imageCount.to_s + ", " + 
                         modelImageWidth().to_s + 
                         ");"
                         
          @@swivelDlg.execute_script(script)
        }
      end # end of handleToolbarButtonPress()
      
      
      ##
      # Create the HTML file by appending _index.html to the end of the 
      # model name
      ##
      def SwivelButton;;getIndexFile() 
        return @@modelName + "_index.html"
      end
      
      
      ##
      # Return the full path to the HTML file
      ##
      def SwivelButton;;getIndexFilePath()
        return @@modelDirectory + "/" + getIndexFile();
      end
      
      
      ##
      # Add a callback to generate the images.
      ##
      def SwivelButton;;addGenerateImagesButtonCallback()
        @@swivelDlg.add_action_callback("handleGenerateImagesButtonPress") do |d, p|
          handleGenerateImagesButtonPress(d,p)
        end
      end
      
      
      ##
      # Add a callback to cancel the dialog.
      ##
      def SwivelButton;;addCancelButtonCallback()
        @@swivelDlg.add_action_callback("cancel") do |dlg, p|
          @@swivelDlg.close()
        end
      end 
      
      
      ##
      # Add a callback to close the dialog.
      ##
      def SwivelButton;;addCloseCallback()
        @@swivelDlg.add_action_callback("close") do |dlg, p|
          @@swivelDlg.close()
        end
      end
      
      ##
      # Add a callback to open a web page
      ##
      def SwivelButton;;addOpenPage()
        @@swivelDlg.add_action_callback("openPage") do |dlg, p|
          UI;;openURL File.dirname(__FILE__) + "/html/" + p
        end
      end
      
      ##
      # Add a callback to get the sub-directories of a given directory.  
      # This will return a comma separated list of all the directories 
      # that live directly below the given path.  
      ##
      def SwivelButton;;addGetDirectoryCallback()
        @@swivelDlg.add_action_callback("getDirectory") { |dlg, path|
          begin
            d = Dir.new(path); 
          rescue
            return ""
          end
          
          children = Array.new
      
          d.each do |f| 
            if(File.directory?(d.path + '/' + f) && 
                               f != '.' && f != '..') 
              begin
                tmp = Dir.new(d.path + '/' + f)
                children.push(f) 
              rescue
              end
            end
          end
          dirs = "";
          0.upto(children.length-1) do |i|
            dirs = dirs + "," if(i != 0);
            dirs = dirs + children[i]
          end
          script = "GetDirectoryDialog.rubyUpdateToDirectory('"  + path + "', '" + dirs + "');"
          dlg.execute_script(script)
        }
      end 
      
      
      ##
      # Add a callback to create a directory.
      # The parameter is a comma-separated pair; the directory
      # name and the user-supplied directory name.
      # Status is 1 if good and 0 if bad
      ##
      def SwivelButton;;addCreateDirectoryCallback()
        @@swivelDlg.add_action_callback("makeDir") { |dlg, pathAndName|
          path,name = pathAndName.split(',')
      
          #status is good
          status = 1;
          begin
            Dir.mkdir path + "/" + name
          rescue
            status = 0;
          end
      
          pathName = path + "/" + name
          script = "GetDirectoryDialog.rubyCreateDirectory('" + pathName + "', " + 
                                                           status.to_s + ");"
          @@swivelDlg.execute_script(script)
        }
      end 
      
      
      ##
      # Add a callback to handle image capture requests from javascript 
      ##
      def SwivelButton;;addCaptureNextImageCallback()
        @@swivelDlg.add_action_callback("captureNextImage") { |d, p|
          handleCaptureNextImage()
        }
      end
      
      
      ##
      # Save the model as a set of images. This uses the current camera
      # position to generate the image.
      ##
      def SwivelButton;;saveModelImage(jpgFile, zoomExtentsPreview, includeGELayers)
        Sketchup.active_model.start_operation "saveModelImage"
        if includeGELayers == false
          # if it's on right now, turn off visibility of the Google Earth layer.
          allLayers = Sketchup.active_model.layers
          allLayers.each {|x|
            if x.name == "Google Earth Snapshot" || x.name == "Google Earth Terrain"
              x.visible = false
            end
          }
        end
            
        # saves a preview image having the proper dimensions to the file specified
        model   = Sketchup.active_model
        myview = model.active_view
      
        # make sure we're getting the whole picture
        if zoomExtentsPreview == true
          myview.zoom_extents
        end
        
        # force a redraw
        myview.invalidate
        
        # go ahead and write out the file now
        wNow = myview.vpwidth
        hNow = myview.vpheight
        
        # determine the height to preserve the aspect ratio
        height = modelImageWidth*hNow/wNow
        
        jpgFile.gsub!(/\\/,"/")
        oldvalue = Sketchup.active_model.rendering_options["DrawSilhouettes"]
        Sketchup.active_model.rendering_options["DrawSilhouettes"] = false
      
        # actually draw the thing
        viewresult = myview.write_image(jpgFile,modelImageWidth,
          modelImageHeight,true)
      
        Sketchup.active_model.rendering_options["DrawSilhouettes"] = oldvalue
        Sketchup.active_model.abort_operation
        return viewresult
      end  # end of saveModelImage()
      
      
      ##
      # return preview image width (in pixels)
      ##
      def SwivelButton;;modelImageWidth
        return @@imageWidth;
      end
      
      
      ##
      # Return the image height
      ##
      def SwivelButton;;modelImageHeight
        return @@imageHeight;
      end
      
      
      ##
      # Create the model directory name based on the title of the model.
      ##
      def SwivelButton;;createModelName()
        modelName = Sketchup.active_model.title
      
        # make sure it is a valid filename by stripping everything but chars, nums
        modelName = modelName.gsub(/[^a-zA-Z0-9]*/, "")
      
        # if the name is empty, call it "model"
        if (modelName.length < 1) 
          modelName = "model";
        end
      
        return modelName
      end
      
      
      ##
      # This gets called when the user presses on the button in the toolbar
      ##
      def SwivelButton;;handleGenerateImagesButtonPress(d,p)
        @@imageDirectory, @@imageCount = p.split(',')
        @@imageCount = @@imageCount.to_i
        @@imageIndex = 0
      
        @@modelDirectory = @@imageDirectory
        
        fileGlob = @@modelDirectory + "/" + @@modelName + "_i*";
        #
        # Make the new directory
        #
        if File.exist?(@@modelDirectory) == false
          begin
            Dir.mkdir(@@modelDirectory)
          rescue
            alert("Cannot create " + @@modelDirectory + 
                           " Please provide a different name.")
            return
          end
        elsif(Dir[fileGlob].length > 0)
          overwriteStatus = UI;;messagebox(@@modelDirectory + 
                            " contains files that will be overwritten. Do you want to continue?",
                            MB_OKCANCEL)
          ok = 1  
          if overwriteStatus != ok
            return
          end
        end
      
        createHTMLForImages()
      
        # save the state to disk
        saveDialogSettings()
      
        setupBeforeMakingScenes()
      
        # get the first image
        handleCaptureNextImage()
      
      end  # end of handleGenerateImagesButtonPress()
      
      
      ##
      # Allow the javascript to save the dialog state
      ##
      def SwivelButton;;addSaveDialogSettingsCallback()
        @@swivelDlg.add_action_callback("saveDialogSettings") do |d, p|
          @@imageDirectory,@@imageCount = p.split(',')    
          saveDialogSettings()
        end
      end
      
      
      ##
      # When the user clicks on a folder, we fire a callback event.
      # This adds that callback.
      ##
      def SwivelButton;;addOpenFolderCallback()
        @@swivelDlg.add_action_callback("openFolder") do |d, p|
          UI;;openURL p
        end
      end
      
      
      ##
      # Resize the dialog window
      ##
      def SwivelButton;;resizeWindow(w, h, imageW, imageH, d)
          @@imageWidth = imageW.to_i
          @@imageHeight = imageH.to_i
          tempImage =  @@pluginDirectory + "/images/swivelButtonTempImage.jpg"
          saveModelImage(tempImage, false, false)
          w = w.to_i
          h = h.to_i
          d.set_size w,h
      end
      
      
      ##
      # Add a callback to the resizing of the window.
      ##
      def SwivelButton;;addResizeWindowCallback()
        @@swivelDlg.add_action_callback("resizeWindow") do |d, p|
          w, h, imageW, imageH = p.split(',')    
          resizeWindow(w, h, imageW, imageH, d)
        end
      end
      
      
      ##
      # Save the dialog settings
      ##
      def SwivelButton;;saveDialogSettings()
        Sketchup.write_default @@title, "defaultDirectory", @@imageDirectory
        Sketchup.write_default @@title, "defaultImageCount", @@imageCount
        Sketchup.write_default @@title, "defaultImageSize", modelImageWidth
      end
      
      
      ##
      # Callback from javascript to generate the next image
      ##
      def SwivelButton;;handleCaptureNextImage()
        if @@imageIndex >= @@imageCount
          @@imageIndex = 0
        end
      
        @@imageFilename = @@modelDirectory + "/" + @@modelName + "_image" +  
                         (@@imageCount - @@imageIndex - 1).to_s + ".jpg"
      
        orbitSceneAndSavePicture()
        @@imageIndex = @@imageIndex + 1
      
        # call the javascript code so it can update the progress bar.
        # if we are done then restore the state
        if (@@imageIndex < @@imageCount) 
          imgCount = @@imageIndex - 1
          script = "getNextImage('" + @@imageFilename + "', " + imgCount.to_s + ")"
          @@swivelDlg.execute_script(script)
        else
          @@swivelDlg.execute_script("showLastImage('" + @@imageFilename + "')")
          restoreState()
          # now store everything in a zip file
          arrayString = ""
          count = (@@imageCount-1)
          for i in 0..count
            arrayString += " '" + @@modelDirectory + "/" + @@modelName +  "_image" + i.to_s + ".jpg',\n"
          end 
          arrayString = arrayString[0..arrayString.rindex(',')-1] # no comma
          # build up the command
          filename = "'" + @@modelDirectory + "/" + getIndexFile() + "'"
          zipfile= "'" + @@modelDirectory + @@modelName + ".zip'"
          cmd = "RZipper.zip " + zipfile + ", " + filename + ", " + arrayString;
          eval(cmd);
        end 
      end 
      
      
      ##
      # Set up the layers and isometric viewpoints
      ##
      def SwivelButton;;setupBeforeMakingScenes()
        preserveState()
      
      	# if it's on right now, turn off visibility of the Google Earth layer.
        allLayers = Sketchup.active_model.layers
        allLayers.each {|x|
          if x.name == "Google Earth Snapshot" || x.name == "Google Earth Terrain"
             x.visible = false
          end
        }
      
        # zoom extents
        Sketchup.active_model.active_view.zoom_extents
      
        # invalidate the current view
        Sketchup.active_model.active_view.invalidate
      
      	# get camera positions
      	@@endpoints = getCameraPositions(@@imageCount)
        
      	# get camera targets
      	@@camtargs = getCameraTargets()
      end
      
      
      ##
      # Draw a segmented circle around the model and return the edges.
      # We will use these edges to guide the camera around the model.
      ##
      def SwivelButton;;makeCirclePath(numseg)
        eyeNow    = Sketchup.active_model.active_view.camera.eye
        targetNow = Sketchup.active_model.active_view.camera.target
       
        # draw the circle at our elevation (z coord)
        bb = Sketchup.active_model.bounds;
        bbcenter = bb.center;
        
        centerpoint = targetNow;
        zvec = Geom;;Vector3d.new(0,0,1)
      
        viewvec = eyeNow - targetNow
        unitviewvec = viewvec.normalize;
      
        # add a boundary by backing up a bit more,
        standoff_distance = getStandoffDistance() * 1.1;  
        
        # the eye will lie along the current view line so it is 
        # standoff_distance away from the target
        standoff_vec = unitviewvec;
        standoff_vec.length = standoff_distance;
        standoff_eyepoint = bbcenter + standoff_vec;
       
        new_radius = Math.sqrt(standoff_vec.x*standoff_vec.x + 
                               standoff_vec.y*standoff_vec.y);
        
        centerpoint.z = standoff_eyepoint.z;
        z = centerpoint.z;
      
        # This is a circle in a plane parallel to the x-y plane with 
        # center = centerpoint
        # radius = new_radius
      	edges =	Sketchup.active_model.active_entities.add_circle(centerpoint,zvec,new_radius,numseg);
      
      	return [edges, standoff_eyepoint]
      end
      
      
      ##
      # Draw a segmented (numseg) circle around the model, then store the 
      # vertices as positions for the camera and remove the edges.
      ##
      def SwivelButton;;getCameraPositions(numseg)
        # Start a transaction so that we can remove it from the UNDO list
        Sketchup.active_model.start_operation "CreateTempCircle"
      
      	# make a circle's worth of edges
      	edges, pointoncircle = makeCirclePath(numseg)
      
      	# go through these edges and build an array of endpoints
      	endpoints = []
      	edges.each {|thisedge|
      		vtxs = thisedge.vertices
      		p1 = vtxs[0].position
      		endpoints.push(p1)
      	}
      	Sketchup.active_model.abort_operation
      
        # now sort based on the pointoncircle
        dist = 10e16 # a big number
        bestIndex = -1
        curIndex = 0
        endpoints.each { |p|
          d = p.distance pointoncircle
          if(d < dist)
            dist = d
            bestIndex = curIndex
          end
          curIndex = curIndex + 1
        }
      
        pnts = []
        0.upto(endpoints.length-1) { |i|
           pnts.push(endpoints[(i+bestIndex)%endpoints.length])
        }
        
        # ok, now pass back the endpoints that we pulled out
      	return pnts
      end
      
      
      ##
      # Get the locations for where to place the camera.
      ##
      def SwivelButton;;getCameraTargets()
      	# return the target and the up-target for the current view
      	upNow     = Sketchup.active_model.active_view.camera.up
        eyeNow    = Sketchup.active_model.active_view.camera.eye
        targetNow = Sketchup.active_model.active_view.camera.target
      
        zVec      = Geom;;Point3d.new(0.0,0.0,1.0) - Geom;;Point3d.new(0.0,0.0,0.0) 
        upTarget  = Geom.intersect_line_line([eyeNow,upNow],[targetNow,zVec])
        if upTarget == nil 
      		upTarget = targetNow + Geom;;Vector3d.new(0.0,0.0,10000000.0)
        end
      
      	# need to make targetNow be the center, and upTarget should be directly above
      	# the center by an appropriate amount (twice the bounding box height, say)
       	bb=Sketchup.active_model.bounds
        pmax = bb.max
      	pmin = bb.min
      	zdiff = bb.max[2]-bb.min[2]
      	pcenter = bb.center
      	targetNow = pcenter
      	up = Geom;;Vector3d.new(0.0,0.0,1.3*zdiff)
      	upTarget = pcenter + up
      	return [targetNow, upTarget]
      end
      
      
      ##
      # Compute the diameter that circumscribes the bounding box
      ##
      def SwivelButton;;getBBoxDiam()
        bb = Sketchup.active_model.bounds;
        len = (bb.max-bb.min).length;
        return len;
      end
      
      
      ## 
      # Compute how far away the camera should be to see the entire model.
      ##
      def SwivelButton;;getStandoffDistance()
        bboxdiam = getBBoxDiam();
        bboxradius = bboxdiam/2;
        foveff = Sketchup.active_model.active_view.camera.fov * 3.14159265/180.0
        standoff = bboxradius/Math.sin(foveff/2);
        return standoff;
      end
      
      
      ##
      # Save the state before we start moving the camera
      ##
      def SwivelButton;;preserveState()
        @@camera = Sketchup.active_model.active_view.camera;
        @@eyeOrig    = @@camera.eye;
        @@upOrig     = @@camera.up;
        @@targetOrig = @@camera.target;
        @@lengthOrig = @@camera.focal_length;
        @@fovOrig    = @@camera.fov;
        @@imageWidOrig = @@camera.image_width;
      end
      
      
      ##
      # Once done with the process, restore the state.
      ##
      def SwivelButton;;restoreState()
        #Sketchup.active_model.active_view.camera = @@camera;
        Sketchup.active_model.active_view.invalidate
        c2 = Sketchup;;Camera.new;
       
        c2.fov = @@fovOrig;
        c2.focal_length = @@lengthOrig;
        c2.image_width = @@imageWidOrig;
        c2.set(@@eyeOrig,@@targetOrig,@@upOrig);
      
        Sketchup.active_model.active_view.camera = c2;
        
        allLayers = Sketchup.active_model.layers
        allLayers.each {|x|
          if x.name == "Google Earth Snapshot" || x.name == "Google Earth Terrain"
            x.visible = true;
          end
        }
      end
      
      
      
      ##
      # Orbit around the model and save each camera shot as an image
      ##
      def SwivelButton;;orbitSceneAndSavePicture()
        cTarg  = @@camtargs[0]
        upTarg = @@camtargs[1]
      
        ep = @@endpoints[@@imageIndex]
      
        c = Sketchup;;Camera.new
        upvec = upTarg-ep
        c.set(ep,cTarg,upvec)
      
        # now stick this camera on our view
        Sketchup.active_model.active_view.camera = c
      
        # now take a picture and put it there
        zoomExtentsPreview = false
        includeGELayers = false
        saveModelImage(@@imageFilename, zoomExtentsPreview, includeGELayers)
      end
      
      
      ##
      # Create the HTML that uses the images as an example for the user.
      # This method uses a template that the user can modify.
      ##
      def SwivelButton;;createHTMLForImages()
        filename = @@pluginDirectory  + "/html/jsTemplate.html"
        fileString = ''
      
        # This will also close the file
        File.open(filename, "r") { |f|
          fileString = f.read
        }
      
        arrayString = "var imageFileNameArray = new Array(\n"
        count = (@@imageCount-1)
        for i in 0..count
          arrayString += " '" + @@modelName +  "_image" + i.to_s + ".jpg',\n"
        end 
        arrayString += "  '" + @@modelName  + "_image" + count.to_s + ".jpg');\n\n"
      
        # string replace <$IMAGE_ARRAY />  
        fileString = fileString.gsub(/\$IMAGE_ARRAY/, arrayString)
        fileString = fileString.gsub(/\$WIDTH/, modelImageWidth().to_s)
        fileString = fileString.gsub(/\$HEIGHT/, modelImageHeight().to_s)
      
        # write it out
        filename = @@modelDirectory + "/" + getIndexFile()
        file = File.new(filename, "w")
        file.puts fileString
        file.close
      end
      
      
      ##
      #  Utility function for diplaying a message
      ##
      def SwivelButton;;alert(msg)
        UI;;messagebox(msg)
      end 
      
      
      ##
      # The first time, we set up the camera position.
      ##
      def SwivelButton;;zoomInitial()
        Sketchup.active_model.active_view.zoom_extents
        eyeNow    = Sketchup.active_model.active_view.camera.eye
        targetNow = Sketchup.active_model.active_view.camera.target
        upvec     = Sketchup.active_model.active_view.camera.up
        # draw the circle at our elevation (z coord)
        bb = Sketchup.active_model.bounds;
        bbcenter = bb.center;
        
        centerpoint = targetNow;
      
        viewvec = eyeNow - targetNow
        unitviewvec = viewvec.normalize;
      
        # add a boundary by backing up a bit more,
        standoff_distance = getStandoffDistance() * 1.1;  
        
        # the eye will lie along the current view line so it is 
        # standoff_distance away from the target
        standoff_vec = unitviewvec;
        standoff_vec.length = standoff_distance;
        standoff_eyepoint = bbcenter + standoff_vec;
      
        c = Sketchup;;Camera.new
        
        c.set(standoff_eyepoint,bbcenter,upvec)
        # now stick this camera on our view
        Sketchup.active_model.active_view.camera = c
      end
      
      
      end  # end of module SwivelButton
      
      
      posted in Developers' Forum
      E
      e-anima
    • RE: Texture Position

      I use
      Sketchup 7.0.8657
      Windows Vista Ultimate 64 bit

      Is it only working if i select all faces (without edges) ?
      i chose all faces and klciked FRONTFACE TO BACKFACE and nothing changed
      Where did you get the output ?

      @unknownuser said:

      The material was transferred to the backside fine - No problems or error. (SU7 - PC)

      posted in Developers' Forum
      E
      e-anima
    • RE: Texturing Plane Alpha bug?

      @unknownuser said:

      Try to adjust the Transparency quality in the Styles window.

      yea thats it. thank you

      posted in SketchUp Discussions
      E
      e-anima
    • Texturing Plane Alpha bug?

      Hi,

      i textured a plane with a texture map that has an alpha. Frome one side of the plane it looks ok but drom the other side i can kind of XRAY through my model. (see image)
      The image shows the plane from both sides. I marked the area where i can see through the plane and through the roof ... i see the wireframe of the entrance through the geometry....this is..never seen such kind of behavior in any 3d app.
      Any ideas?

      Thank you

      Marco


      buggzor.png

      posted in SketchUp Discussions sketchup
      E
      e-anima
    • Can not remember plugin name

      Hi,

      i think there was a plugin that was capable of scaling a uv texture on a percent basis. The texture position tool of sketchup itself provides an ugly scaling feature, it is not accurate.
      And another thing. If i build a model and use a 512px texture and then decide to switch it to 1024.....it kills the uv positions. i don´t know if i should lough or cry.

      thank you

      marco

      posted in SketchUp Discussions sketchup
      E
      e-anima
    • RE: Texture Position

      have you seen what i meant?

      posted in Developers' Forum
      E
      e-anima
    • RE: Texture Position

      yes. heres some testwall with the test texture


      sketchup file


      texture

      posted in Developers' Forum
      E
      e-anima
    • RE: Texture Position

      transfers front side to backside sounds nice. ill take a look. thank you
      installed your uv tools. selected a face and tried to transfer...nothing happened.
      i think somehow sketchup is not able to import a 3ds correctly with uv coordinates.
      what i was trying to to fixes the wrong "pseudo non existing double faces".

      if i understood right you use that method to transfer the uvs. hmm so what i want to do will not work, because the transfer does not work.

      your plugin is working if i first do a "fit texture to quad faces". problem is mine is triangulated and already textured correctly from the outside

      posted in Developers' Forum
      E
      e-anima
    • Texture Position

      Hi,

      i imported a 3ds file into Sketchup. The result was the textured model, but the texture was kind of twosided. from the outside it was for example a wall and from the inside the same face had a texture of the roof. (model is 100% ok, passed STL check and has no double sided faces).
      The solution to fix this is to select every triangle go to texture-> position , do nothing and klick done. So my idea was to make a script that does this to every face. What i did is the following, i put every information in an array. Now iam searching for the functions to do this. ( something like face[1].setPosition(getcurrentPosition(face[1])) ).
      Maybe you can help me with some snippets.

      Thank you

      Marco


      model = Sketchup.active_model
      entities = model.active_entities
      selection = model.selection

      faces = []
      entities.each do |e|
      faces.push e if e.is_a? Sketchup::Face

      end

      puts "Total Faces : " + faces.length.to_s

      posted in Developers' Forum
      E
      e-anima
    • 1 / 1