# 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 linearCombinationPoint3dTest point1 = Geom::Point3d.new 1,1,1 point2 = Geom::Point3d.new 10,10,10 # Gets the point on the line segment connecting point1 and point2 that is # 3/4 the way from point1 to point2. point = Geom::Point3d.linear_combination 0.25, point1, 0.75, point2 if (point) UI.messagebox point else UI.messagebox "Failure" end end def newPoint3dTest point = Geom::Point3d.new if (point) UI.messagebox (point) else "Failure" end end def plusPoint3dTest point1 = Geom::Point3d.new 1,1,1 vector = Geom::Vector3d.new 10,10,10 point3 = point1 + vector if (point3) UI.messagebox (point3) else "Failure" end end def minusPoint3dTest point1 = Geom::Point3d.new 1,1,1 point2 = Geom::Point3d.new 10,10,10 vector = point2-point1 if (vector) UI.messagebox (vector) else "Failure" end end def equalsPoint3dTest point1 = Geom::Point3d.new 1,1,1 point2 = Geom::Point3d.new 10,10,10 status = point1 == point2 if (status) UI.messagebox (status) else "Failure" end end def getPoint3dTest point = Geom::Point3d.new 1,2,3 yvalue = point[1] if (yvalue) UI.messagebox (yvalue) else "Failure" end end def getEqualsPoint3dTest point = Geom::Point3d.new 1,2,3 yvalue = point[1] = 4 if (yvalue) UI.messagebox (yvalue) else "Failure" end end def clonePoint3dTest point = Geom::Point3d.new 1,2,3 newpoint = point.clone if (newpoint) UI.messagebox (newpoint) else "Failure" end end def distancePoint3dTest point1 = Geom::Point3d.new 1,1,1 point2 = Geom::Point3d.new 10,10,10 begin distance = point1.distance point2 rescue UI.messagebox $!.message end if (distance) UI.messagebox (distance) else "Failure" end end def distanceToLinePoint3dTest line = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)] point = Geom::Point3d.new 10,10,10 distance = point.distance_to_line line if (distance) UI.messagebox (distance) else "Failure" end end def distanceToPlanePoint3dTest plane = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)] point = Geom::Point3d.new 10,10,10 distance = point.distance_to_plane plane if (distance) UI.messagebox (distance) else "Failure" end end def inspectPoint3dTest point = Geom::Point3d.new 10,10,10 str = point.inspect if (str) UI.messagebox (str) else "Failure" end end def offsetPoint3dTest point1 = Geom::Point3d.new 10,10,10 vector = Geom::Vector3d.new(0,0,1) point2 = point1.offset vector if (point2) UI.messagebox (point2) else "Failure" end end def offsetBangPoint3dTest point1 = Geom::Point3d.new 10,10,10 vector = Geom::Vector3d.new(0,0,1) point2 = point1.offset! vector if (point2) UI.messagebox (point2) else "Failure" end end def onLinePoint3dTest line = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)] point = Geom::Point3d.new 10,10,10 status = point.on_line? line if (status) UI.messagebox (distance) else "Failure" end end def onPlanePoint3dTest plane = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)] point = Geom::Point3d.new 10,10,10 status = point.on_plane? plane if (status) UI.messagebox (status) else "Failure" end end def projectToLinePoint3dTest line = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)] point = Geom::Point3d.new 10,10,10 pointonline = point.project_to_line line if (pointonline) UI.messagebox (pointonline) else "Failure" end end def projectToPlanePoint3dTest plane = [Geom::Point3d.new(0,0,0), Geom::Vector3d.new(0,0,1)] point = Geom::Point3d.new 10,10,10 pointonplane = point.project_to_plane plane if (pointonplane) UI.messagebox (pointonplane) else "Failure" end end def setPoint3dTest point = Geom::Point3d.new 10,10,10 status = point.set! 100,200,300 if (status) UI.messagebox (status) else "Failure" end end def toAPoint3dTest point = Geom::Point3d.new 10,20,30 array = point.to_a if (array) UI.messagebox (array) else "Failure" end end def toSPoint3dTest point = Geom::Point3d.new 10,10,10 str = point.to_s if (str) UI.messagebox (str) else "Failure" end end def transformPoint3dTest point2 = Geom::Point3d.new 100,200,300 transform = Geom::Transformation.new(point2) point1 = Geom::Point3d.new 10,10,10 point3 = point1.transform transform if (point3) UI.messagebox point3 else UI.messagebox "Failure" end end def transformBangPoint3dTest point2 = Geom::Point3d.new 100,200,300 transform = Geom::Transformation.new(point2) point1 = Geom::Point3d.new 10,10,10 point3 = point1.transform! transform if (point3) UI.messagebox point3 else UI.messagebox "Failure" end end def vectorToPoint3dTest point2 = Geom::Point3d.new 100,200,300 point1 = Geom::Point3d.new 10,10,10 vector = point1.vector_to point2 if (vector) UI.messagebox vector else UI.messagebox "Failure" end end def xPoint3dTest point = Geom::Point3d.new 1,2,3 x = point.x if (x) UI.messagebox x else UI.messagebox "Failure" end end def xEqualsPoint3dTest point = Geom::Point3d.new 1,2,3 x = point.x=2 if (x) UI.messagebox x else UI.messagebox "Failure" end end def yPoint3dTest point = Geom::Point3d.new 1,2,3 y = point.y if (y) UI.messagebox y else UI.messagebox "Failure" end end def yEqualsPoint3dTest point = Geom::Point3d.new 1,2,3 y = point.y=2 if (y) UI.messagebox y else UI.messagebox "Failure" end end def zPoint3dTest point = Geom::Point3d.new 1,2,3 z = point.z if (z) UI.messagebox z else UI.messagebox "Failure" end end def zEqualsPoint3dTest point = Geom::Point3d.new 1,2,3 z = point.z=2 if (z) UI.messagebox z else UI.messagebox "Failure" end end if( not file_loaded?("point3dtests.rb") ) # This will add a separator to the menu, but only once add_separator_to_menu("Plugins") plugins_menu = UI.menu("Plugins") Point3d_menu = plugins_menu.add_submenu("Point3d Tests") Point3d_menu.add_item("Point3d.linear_combination") { linearCombinationPoint3dTest } Point3d_menu.add_item("Point3d.new") { newPoint3dTest } Point3d_menu.add_item("Point3d +") { plusPoint3dTest } Point3d_menu.add_item("Point3d -") { minusPoint3dTest } Point3d_menu.add_item("Point3d ==") { equalsPoint3dTest } Point3d_menu.add_item("Point3d []") { getPoint3dTest } Point3d_menu.add_item("Point3d []=") { getEqualsPoint3dTest } Point3d_menu.add_item("Point3d.clone") { clonePoint3dTest } Point3d_menu.add_item("Point3d.distance") { distancePoint3dTest } Point3d_menu.add_item("Point3d.distance_to_line") { distanceToLinePoint3dTest } Point3d_menu.add_item("Point3d.distance_to_plane") { distanceToPlanePoint3dTest } Point3d_menu.add_item("Point3d.inspect") { inspectPoint3dTest } Point3d_menu.add_item("Point3d.offset") { offsetPoint3dTest } Point3d_menu.add_item("Point3d.offset!") { offsetBangPoint3dTest } Point3d_menu.add_item("Point3d.on_line?") { onLinePoint3dTest } Point3d_menu.add_item("Point3d.on_plane?") { onPlanePoint3dTest } Point3d_menu.add_item("Point3d.project_to_line") { projectToLinePoint3dTest } Point3d_menu.add_item("Point3d.project_to_plane") { projectToPlanePoint3dTest } Point3d_menu.add_item("Point3d.set!") { setPoint3dTest } Point3d_menu.add_item("Point3d.to_a") { toAPoint3dTest } Point3d_menu.add_item("Point3d.to_s") { toSPoint3dTest } Point3d_menu.add_item("Point3d.transform") { transformPoint3dTest } Point3d_menu.add_item("Point3d.transform!") { transformBangPoint3dTest } Point3d_menu.add_item("Point3d.vector_to") { vectorToPoint3dTest } Point3d_menu.add_item("Point3d.x") { xPoint3dTest } Point3d_menu.add_item("Point3d.x=") { xEqualsPoint3dTest } Point3d_menu.add_item("Point3d.y") { yPoint3dTest } Point3d_menu.add_item("Point3d.y=") { yEqualsPoint3dTest } Point3d_menu.add_item("Point3d.z") { zPoint3dTest } Point3d_menu.add_item("Point3d.z=") { zEqualsPoint3dTest } end #----------------------------------------------------------------------------- file_loaded("point3dtests.rb")