Tengo un fragmento de código a continuación que traza dos puntos en [2,3,4] y [5,6,7] cuando el código se ejecuta en la consola Ruby de SketchUp. El objetivo final es poder permitir que el usuario seleccione una línea y cree puntos en ambos extremos de la línea, pero lo estoy haciendo paso a paso a la vez.
sel = Sketchup.active_model.selection fp = [2,3,4] sp = [5,6,7] fp = fp.map {|a| 39.3701 *a} sp = sp.map {|a| 39.3701 *a} p1 = Geom::Point3d.new(fp) p2 = Geom::Point3d.new(sp) addpoint1 = entities.add_cpoint p1 addpoint2 = entities.add_cpoint p2Poco a poco estoy tratando de hacer que este código sea más fácil de usar. Traté de actualizarlo haciéndolo así que necesitas seleccionar una línea para crear dos puntos en [2,3,4] y [5,6,7].
Además, el número 39.3701 es para convertir las unidades en las unidades que quiero (metros), SketchUp tiene sus propias unidades extrañas que he resuelto con una 'solución de curita'.
([2,3,4] [5,6,7] son matrices codificadas que estoy usando solo para ver si he escrito las cosas correctamente).
Aquí está mi intento en el siguiente bit de código.
def pointplot sel = Sketchup.active_model.selection fp = [2,3,4] sp = [5,6,7] fp = fp.map {|a| 39.3701 *a} sp = sp.map {|a| 39.3701 *a} p1 = Geom::Point3d.new(fp) p2 = Geom::Point3d.new(sp) addpoint1 = entities.add_cpoint p1 addpoint2 = entities.add_cpoint p2 end def check_line sel = Sketchup.active_model.selection ok = sel.find { |e| e.typename == "Edge" } ok ? MF_ENABLED : MF_GRAYED end UI.add_context_menu_handler do |menu| menu.add_separator item = menu.add_item("Point Plot") { pointplot } menu.set_validation_proc(item) {check_line} endLo que hará este código más grande es agregar una opción al menú cuando el usuario haga clic derecho en una línea. La función adicional se llama "Gráfico de puntos".
Sin embargo, cuando hace clic en la función 'Gráfico de puntos', no crea los dos puntos en [2,3,4] y [5,6,7].
Parece que hay un problema en torno a estas líneas. Si pusiera un UI.messagebox() antes de esas dos líneas, aparecerá el cuadro de mensaje. Pero si coloco UI.messagebox() después de esas dos líneas, no aparecerá.
addpoint1 = entities.add_cpoint p1 addpoint2 = entities.add_cpoint p1¿Alguien podría aclarar el problema con el que me estoy metiendo?
¡Gracias!
Aquí hay un ejemplo para crear un 'punto de construcción' en cada vértice de los bordes seleccionados...
model = Sketchup.active_model entities = model.active_entities selection = model.selection edges = selection.grep(Sketchup::Edge) if edges.empty? msg = 'Select one or more edges before using this tool.' UI.messagebox(msg) return end vertices = [] edges.each { |edge| vertices << edge.vertices } vertices.flatten! vertices.uniq! vertices.each { |vertex| entities.add_cpoint vertex.position }