# Copyright 2005, @Last Software, Inc. # This software is provided as an example of using the Ruby interface # to SketchUp. # 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 'sketchup.rb' #----------------------------------------------------------------------------- def linearCombinationVector3dTest vector1 = Geom::Vector3d.new 1,0,0 vector2 = Geom::Vector3d.new 0,1,0 # Gets the vector that is # 3/4 the way from vector1 to vector2. vector = Geom::Vector3d.linear_combination 0.25, vector1, 0.75, vector2 if (vector) UI.messagebox vector else UI.messagebox "Failure" end end def newVector3dTest # A vector that runs up the Z axis (that's the normal). The plane # is perpendicular to the normal vector = Geom::Vector3d.new 0,0,1 if (vector) UI.messagebox vector else UI.messagebox "Failure" end end def percentVector3dTest # A vector that runs up the Z axis (that's the normal). The plane # is perpendicular to the normal vector = Geom::Vector3d.new 0,0,1 vector2 = Geom::Vector3d.new 0,1,0 # Returns 0 which means the vectors are at a right angle to each other d = vector % vector2 if (d) UI.messagebox d else UI.messagebox "Failure" end end def multiplyVector3dTest vector = Geom::Vector3d.new 1,0,0 vector2 = Geom::Vector3d.new 0,1,0 # A vector that runs up the Z axis (that's the normal). The plane # is perpendicular to the normal # Returns a vector that is perpendicular to the plane in which the first two vectors lie # In this case, the new vector should be in the 0,0,1 v = vector * vector2 if (v) UI.messagebox v else UI.messagebox "Failure" end end def plusVector3dTest vector = Geom::Vector3d.new 1,0,0 vector2 = Geom::Vector3d.new 0,1,0 # Returns a vector of 1,1,0 v = vector + vector2 if (v) UI.messagebox v else UI.messagebox "Failure" end end def minusVector3dTest vector = Geom::Vector3d.new 1,0,0 vector2 = Geom::Vector3d.new 0,1,0 # Returns a vector of 1, -1, 0 v = vector - vector2 if (v) UI.messagebox v else UI.messagebox "Failure" end end def equalsVector3dTest vector = Geom::Vector3d.new 1,0,0 vector2 = Geom::Vector3d.new 0,1,0 status = vector == vector2 # Returns false UI.messagebox status end def getVector3dTest vector = Geom::Vector3d.new 1,0,0 value = vector[0] if (value) UI.messagebox value else UI.messagebox "Failure" end end def getEqualsVector3dTest vector = Geom::Vector3d.new 1,0,0 value = vector[0] UI.messagebox value newvalue = vector[0] = 2 if (newvalue) UI.messagebox newvalue else UI.messagebox "Failure" end end def angleBetweenVector3dTest vector = Geom::Vector3d.new 1,0,0 vector2 = Geom::Vector3d.new 0,1,0 status = vector == vector2 angle = vector.angle_between vector2 if (angle) UI.messagebox angle else UI.messagebox "Failure" end end def axesVector3dTest vector = Geom::Vector3d.new 1,0,0 a = vector.axes if (a) UI.messagebox a else UI.messagebox "Failure" end end def cloneVector3dTest vector = Geom::Vector3d.new 1,0,0 vector2 = vector.clone if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def crossVector3dTest vector = Geom::Vector3d.new 1,0,0 vector2 = Geom::Vector3d.new 0,1,0 v = vector.cross vector2 if (v) UI.messagebox v else UI.messagebox "Failure" end end def dotVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = Geom::Vector3d.new 0,1,0 d = vector.dot vector2 if (d) UI.messagebox d else UI.messagebox "Failure" end end def inspectVector3dTest vector = Geom::Vector3d.new 0,0,1 v = vector.inspect if (v) UI.messagebox v else UI.messagebox "Failure" end end def lengthVector3dTest vector = Geom::Vector3d.new 0,0,1 l = vector.length if (l) UI.messagebox l else UI.messagebox "Failure" end end def lengthEqualsVector3dTest vector = Geom::Vector3d.new 0,0,1 l = vector.length UI.messagebox l newl = vector.length = 2 if (newl) UI.messagebox newl else UI.messagebox "Failure" end end def normalizeVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = vector.normalize if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def normalizeBangVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = vector.normalize! if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def parallelVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = Geom::Vector3d.new 0,1,0 status = vector.parallel? vector2 if (status) UI.messagebox status else UI.messagebox "Failure" end end def perpendicularVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = Geom::Vector3d.new 0,1,0 status = vector.perpendicular? vector2 if (status) UI.messagebox status else UI.messagebox "Failure" end end def reverseVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = vector.reverse if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def reverseBangVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = vector.reverse! if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def sameDirectionVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = Geom::Vector3d.new 0,1,0 status = vector.sime_direction? vector2 if (status) UI.messagebox status else UI.messagebox "Failure" end end def setVector3dTest vector = Geom::Vector3d.new 0,0,1 vector2 = vector.set! 1,0,0 if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def toAVector3dTest vector = Geom::Vector3d.new 0,0,1 array = vector.to_a if (array) UI.messagebox array else UI.messagebox "Failure" end end def toSVector3dTest vector = Geom::Vector3d.new 0,0,1 string = vector.to_s if (string) UI.messagebox string else UI.messagebox "Failure" end end def transformVector3dTest point = Geom::Point3d.new 1,1,1 transform = Geom::Transformation.new point vector = Geom::Vector3d.new 0,0,1 vector2 = vector.transform transform if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def transformBangVector3dTest point = Geom::Point3d.new 1,1,1 transform = Geom::Transformation.new point vector = Geom::Vector3d.new 0,0,1 vector2 = vector.transform! transform if (vector2) UI.messagebox vector2 else UI.messagebox "Failure" end end def unitvectorVector3dTest vector = Geom::Vector3d.new 0,0,1 status = vector.unitvector? if (status) UI.messagebox status else UI.messagebox "Failure" end end def validVector3dTest vector = Geom::Vector3d.new 0,0,1 status = vector.vald? if (status) UI.messagebox status else UI.messagebox "Failure" end end def xVector3dTest vector = Geom::Vector3d.new 1,2,3 x = vector.x if (x) UI.messagebox x else UI.messagebox "Failure" end end def xEqualsVector3dTest vector = Geom::Vector3d.new 1,2,3 x = vector.x=10 if (x) UI.messagebox x else UI.messagebox "Failure" end end def yVector3dTest vector = Geom::Vector3d.new 1,2,3 y = vector.y if (y) UI.messagebox y else UI.messagebox "Failure" end end def yEqualsVector3dTest vector = Geom::Vector3d.new 1,2,3 y = vector.y=20 if (y) UI.messagebox y else UI.messagebox "Failure" end end def zVector3dTest vector = Geom::Vector3d.new 1,2,3 z = vector.z if (z) UI.messagebox z else UI.messagebox "Failure" end end def zEqualsVector3dTest vector = Geom::Vector3d.new 1,2,3 z = vector.z=30 if (z) UI.messagebox z else UI.messagebox "Failure" end end if( not file_loaded?("vector3dtests.rb") ) # This will add a separator to the menu, but only once add_separator_to_menu("Plugins") plugins_menu = UI.menu("Plugins") Vector3d_menu = plugins_menu.add_submenu("Vector3d Tests") Vector3d_menu.add_item("Vector3d.linear_combination") { linearCombinationVector3dTest } Vector3d_menu.add_item("Vector3d.new") { newVector3dTest } Vector3d_menu.add_item("Vector3d %") { percentVector3dTest } Vector3d_menu.add_item("Vector3d *") { multiplyVector3dTest } Vector3d_menu.add_item("Vector3d +") { plusVector3dTest } Vector3d_menu.add_item("Vector3d -") { minusVector3dTest } Vector3d_menu.add_item("Vector3d ==") { equalsVector3dTest } Vector3d_menu.add_item("Vector3d []") { getVector3dTest } Vector3d_menu.add_item("Vector3d []=") { getEqualsVector3dTest } Vector3d_menu.add_item("Vector3d.angle_between") { angleBetweenVector3dTest } Vector3d_menu.add_item("Vector3d.axes") { axesVector3dTest } Vector3d_menu.add_item("Vector3d.clone") { cloneVector3dTest } Vector3d_menu.add_item("Vector3d.cross") { crossVector3dTest } Vector3d_menu.add_item("Vector3d.dot") { dotVector3dTest } Vector3d_menu.add_item("Vector3d.inspect") { inspectVector3dTest } Vector3d_menu.add_item("Vector3d.length") { lengthVector3dTest } Vector3d_menu.add_item("Vector3d.length=") { lengthEqualsVector3dTest } Vector3d_menu.add_item("Vector3d.normalize") { normalizeVector3dTest } Vector3d_menu.add_item("Vector3d.normalize!") { normalizeBangVector3dTest } Vector3d_menu.add_item("Vector3d.parallel") { parallelVector3dTest } Vector3d_menu.add_item("Vector3d.perpendicular") { perpendicularVector3dTest } Vector3d_menu.add_item("Vector3d.reverse") { reverseVector3dTest } Vector3d_menu.add_item("Vector3d.reverse!") { reverseBangVector3dTest } Vector3d_menu.add_item("Vector3d.samedirection") { sameDirectionVector3dTest } Vector3d_menu.add_item("Vector3d.set") { setVector3dTest } Vector3d_menu.add_item("Vector3d.to_a") { toAVector3dTest } Vector3d_menu.add_item("Vector3d.to_s") { toSVector3dTest } Vector3d_menu.add_item("Vector3d.transform") { transformVector3dTest } Vector3d_menu.add_item("Vector3d.transform!") { transformBangVector3dTest } Vector3d_menu.add_item("Vector3d.unitvector") { unitvectorVector3dTest } Vector3d_menu.add_item("Vector3d.valid") { validVector3dTest } Vector3d_menu.add_item("Vector3d.x") { xVector3dTest } Vector3d_menu.add_item("Vector3d.x=") { xEqualsVector3dTest } Vector3d_menu.add_item("Vector3d.y") { yVector3dTest } Vector3d_menu.add_item("Vector3d.y=") { yEqualsVector3dTest } Vector3d_menu.add_item("Vector3d.z") { zVector3dTest } Vector3d_menu.add_item("Vector3d.z=") { zEqualsVector3dTest } end #----------------------------------------------------------------------------- file_loaded("vector3dtests.rb")