17-12-2013, 12:00 PM
Coucou,
Pour ceux qui (comme moi) n'ont pas de talent particulier dans le graphisme, voici une solution simple qui vous permettra de transformer un modèle sketchup (donc en 3D) en image orienté 2D ISO, selon les conventionnelles 8 orientations.
J'ai développé ce bout de code en m'inspirant largement du site :
http://sketchucation.com/forums/viewtopi...81#p503981
Pour ceux qui n'ont pas l'habitude de sketchup, il faut pour copier mon plug in, se placer dans leur répertoire plugin :
C:\Program Files (x86)\Google\Google SketchUp 8\Plugins
et copier le code ci-dessous dans un fichier texte sous le nom de :
magdales_isometric_view.rb
ensuite, vous trouvez un modèle 3D (sur le net ou de votre création).
Vous le sélectionnez
vous allez dans le menu Windows > ruby console
et là vous tappez :
middle (ça centre votre modèle 3D au milieu des axes
aff (ca vous affiche toutes les 8 directions de manière à calculer la plus grande vue)
puis vous tapez i1, i2, i3 etc ... i8 pour avoir les directions. Il vous suffit alors de copier coller les images et de redimensionnez celle-ci à votre convenance.
Bon, très clairement, y'a moyen de faire mieux (genre mettre des boutons pour afficher l'orientation, eviter les affreux PAUSE entre chaque image, extraire les images directement dans un fichier au lieu de faire "imprimer écran" ...) mais c'est un début, et honnètement, ça me fait gagner du temps pour Magdales... alors autant vous en faire profiter.
@ pluche !
Kéké
Exemple :
Pour ceux qui (comme moi) n'ont pas de talent particulier dans le graphisme, voici une solution simple qui vous permettra de transformer un modèle sketchup (donc en 3D) en image orienté 2D ISO, selon les conventionnelles 8 orientations.
J'ai développé ce bout de code en m'inspirant largement du site :
http://sketchucation.com/forums/viewtopi...81#p503981
Pour ceux qui n'ont pas l'habitude de sketchup, il faut pour copier mon plug in, se placer dans leur répertoire plugin :
C:\Program Files (x86)\Google\Google SketchUp 8\Plugins
et copier le code ci-dessous dans un fichier texte sous le nom de :
magdales_isometric_view.rb
ensuite, vous trouvez un modèle 3D (sur le net ou de votre création).
Vous le sélectionnez
vous allez dans le menu Windows > ruby console
et là vous tappez :
middle (ça centre votre modèle 3D au milieu des axes
aff (ca vous affiche toutes les 8 directions de manière à calculer la plus grande vue)
puis vous tapez i1, i2, i3 etc ... i8 pour avoir les directions. Il vous suffit alors de copier coller les images et de redimensionnez celle-ci à votre convenance.
Bon, très clairement, y'a moyen de faire mieux (genre mettre des boutons pour afficher l'orientation, eviter les affreux PAUSE entre chaque image, extraire les images directement dans un fichier au lieu de faire "imprimer écran" ...) mais c'est un début, et honnètement, ça me fait gagner du temps pour Magdales... alors autant vous en faire profiter.
@ pluche !
Kéké
Exemple :
Code :
=begin
The idea of this script is to get 8 view of a single objet, so as to snapshoot the image for a vidéo game in 2D isométric view.
In order to get my code functionnal :
1°/ first import one single modèle and select it.
2°/ then open ruby console. (menu > windows > ruby console)
3°/ write "middle" (to center the objet to the axis origin)
4°/ then write "aff" to get all view done with correct distance & angle
5-6-7..°/ then write i1, or i2, or i3 ... or i8 and snapshot the image, to get all 8 classical isometric direction for video game.
This was quickly done for Magdales.com game ... hope you'll enjoy. Please tell kéké at magdales@free.fr if you improve this script ^^.
=end
###
require 'sketchup.rb'
$distance_iso = 0
$calcul_ok = 0
###
def reset()
$distance_iso=0
$calcul_ok = 0
end
###
def distance()
Sketchup.send_action("viewZoomExtents:")
model=Sketchup.active_model
model.shadow_info["ShadowTime_time_t"]=model.shadow_info["ShadowTime_time_t"]+(60*60*24)
model.active_view.refresh
UI.refresh_inspectors()
UI.messagebox("pause !")
eye=model.active_view.camera.eye
ss=model.selection[0]
distance=eye.distance(ss.bounds.center)
puts "la distance au centre du modèle est de : #{distance}"
puts "#{distance} vs #$distance_iso Xeye = #{eye.x} Yeye = #{eye.y} Zeye = #{eye.z}"
end
###
def middle()
model=Sketchup.active_model
ss=model.selection[0]
point= Geom::Point3d.new((-ss.bounds.center.x),(-ss.bounds.center.y),(-ss.bounds.center.z))
t = Geom::Transformation.new point
selected = Sketchup.active_model.selection.to_a
Sketchup.active_model.entities.transform_entities(t, selected)
end
###
def aff()
model=Sketchup.active_model
middle()
# Sketchup.send_action(10624)
i1()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso Xeye = #{eye.x} Yeye = #{eye.y} Zeye = #{eye.z}"
if distance > $distance_iso
$distance_iso = distance
end
i2()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso"
if distance > $distance_iso
$distance_iso = distance
end
i3()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso"
if distance > $distance_iso
$distance_iso = distance
end
i4()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso"
if distance > $distance_iso
$distance_iso = distance
end
i5()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
model.commit_operation
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso"
if distance > $distance_iso
$distance_iso = distance
end
i6()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso"
if distance > $distance_iso
$distance_iso = distance
end
i7()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso"
if distance > $distance_iso
$distance_iso = distance
end
i8()
distance()
eye=model.active_view.camera.eye
ss=model.selection[0]
model.commit_operation
distance=eye.distance(ss.bounds.center)
# puts "#{distance} vs #$distance_iso"
if distance > $distance_iso
$distance_iso = distance
end
$calcul_ok = 1
end
#
def i1()
model=Sketchup.active_model
model.start_operation("i1")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(70.7,70.7,70.7)
else
eye=Geom::Point3d.new(Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(0.398992, 0.398701, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso south-west"
model.commit_operation
end
###
def i2()
model=Sketchup.active_model
model.start_operation("i2")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(0,100,70.7)
else
eye=Geom::Point3d.new(0,Math.sqrt($distance_iso*$distance_iso*2/3),Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(0, 0.5640, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso west"
model.commit_operation
end
###
def i3()
model=Sketchup.active_model
model.start_operation("i3")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(-70.7,70.7,70.7)
else
eye=Geom::Point3d.new(-Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(-0.398992, 0.398701, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso north-west"
model.commit_operation
end
###
def i4()
model=Sketchup.active_model
model.start_operation("i4")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(-100,0,70.7)
else
eye=Geom::Point3d.new(-Math.sqrt($distance_iso*$distance_iso*2/3),0,Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(0.5640, 0, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso north"
model.commit_operation
end
###
def i5()
model=Sketchup.active_model
model.start_operation("i5")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(-70.7,-70.7,70.7)
else
eye=Geom::Point3d.new(-Math.sqrt($distance_iso*$distance_iso/3),-Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(0.398992, 0.398701, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso north-east"
model.commit_operation
end
###
def i6()
model=Sketchup.active_model
model.start_operation("i6")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(0,-100,70.7)
else
eye=Geom::Point3d.new(0,-Math.sqrt($distance_iso*$distance_iso*2/3),Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(0, -0.5640, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso east"
model.commit_operation
end
###
def i7()
model=Sketchup.active_model
model.start_operation("i7")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(70.7,-70.7,70.7)
else
eye=Geom::Point3d.new(Math.sqrt($distance_iso*$distance_iso/3),-Math.sqrt($distance_iso*$distance_iso/3),Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(0.398992, -0.398701, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso south-east"
model.commit_operation
end
###
def i8()
model=Sketchup.active_model
model.start_operation("i8")
view=model.active_view
camera=view.camera
if $calcul_ok == 0
eye=Geom::Point3d.new(100,0,70.7)
else
eye=Geom::Point3d.new(Math.sqrt($distance_iso*$distance_iso*2/3),0,Math.sqrt($distance_iso*$distance_iso/3))
end
target=Geom::Point3d.new(0,0,0)
up=Geom::Vector3d.new(0.5640, 0, 0.825738)
perspective=false
newcamera=Sketchup::Camera.new(eye,target,up,perspective)
view.camera=newcamera
if $calcul_ok == 0
Sketchup.send_action("viewZoomExtents:")
end
puts "iso south"
model.commit_operation
end
###