sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Web Exporter Resolution/zoom

    Scheduled Pinned Locked Moved Developers' Forum
    3 Posts 2 Posters 444 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • E Offline
      e-anima
      last edited by

      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
      
      
      1 Reply Last reply Reply Quote 0
      • C Offline
        CADAddict
        last edited by

        I actuall used it, and the good thing is that it is pretty easy to "cheat" you can replace the images generated with it by images of higher resolution exported from Scenes you created in SU.
        See this topic, maybe it helps
        http://www.cad-addict.com/2009/01/sketchup-adding-camera-control-to-web.html
        the trick is not Ruby Savy, I don't know ruby scripting, but it could be useful as a manual way to achieve a higher resolution web export.

        http://www.cad-addict.com/

        1 Reply Last reply Reply Quote 0
        • E Offline
          e-anima
          last edited by

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

          1 Reply Last reply Reply Quote 0
          • 1 / 1
          • First post
            Last post
          Buy SketchPlus
          Buy SUbD
          Buy WrapR
          Buy eBook
          Buy Modelur
          Buy Vertex Tools
          Buy SketchCuisine
          Buy FormFonts

          Advertisement