sketchucation logo sketchucation
    • Login
    1. Home
    2. e-anima
    3. Posts
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    šŸ›£ļø Road Profile Builder | Generate roads, curbs and pavements easily Download
    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