Calculation of volumes on sharks

10 comentarios en “Calculation of volumes on sharks”

  1. La cuestion es que era mas facil (y mas rapido) utilizar admesh que rehacer el script python… (llamadme vago… :-P)

    Para la proxima version intentaremos pulirlo un poco mas…

  2. mmmh.. parece que el problema está al postear en ésta página, obviamente el código anterior quedaba así, sustituyendo espacios por_ para que se vea

    for f in faces:
    ___fverts = f.vertices
    ___ab,ac,ad = (verts[fverts[0]].co, verts[fverts[1]].co, verts[fverts[2]].co

  3. un ejemplo:

    for f in faces:
    fverts = f.vertices # getting face’s vertices
    ab = verts[fverts[0]].co
    ac = verts[fverts[1]].co
    ad = verts[fverts[2]].co

    entramos en un bucle que examina cada elemento de faces y la siguiente línea TIENE que estar indentada, es obligatorio por python, como no es el caso el bloque entero falla. Todo este bloque debería estar escrito más o menos así (con una pequeña corrección de paso para abreviar)

    for f in faces:
    fverts = f.vertices
    ab,ac,ad = (verts[fverts[0]].co, verts[fverts[1]].co, verts[fverts[2]].co

    Pero… como se ha perdido la indentación tampoco sabemos en donde acaba el buble, y eso ya es un problema más serio

  4. > “El que si que probé, y no funciona, es este:”

    El problema que tienes con tu script es típico de Python, ese script está deshecho porque ha perdido los tabuladores y espacios, no sólo es difícil arreglarlo sino incluso saber qué hace

    Por lo demás es cierto que los nombres de los módulos han cambiado, así que el primer script no va en el blender nuevo efectivamente, lo he mirado y necesita unos cuantos retoques para funcionar

  5. veo que el script es del 2005… y no creo que funcione en el blender actual (aunque he de decir que no lo he probado).

    El que si que probé, y no funciona, es este:

    Así que la opción de admesh es la mas sencilla (aparte de que de regalo te pule la malla y te cierra los huecos!!)

    # Made by Alexander Zubkov
    # mail to: contact@artdds.com OR mail@al-z.name
    # find me at http://www.artdds.com AND http://www.al-z.name

    import bpy

    class LayoutPanel(bpy.types.Panel):
    bl_label = “Volume & Mass Calc”
    bl_space_type = “PROPERTIES”
    bl_region_type = “WINDOW”
    bl_context = “data”
    density = 1.0
    volume_mass = 0.000

    bpy.types.Mesh.density = bpy.props.FloatProperty(
    name=”Material Density”,
    description=”Density of the Material”,
    default=1.0,
    min=0,
    max=100)

    def draw(self, context):
    layout = self.layout

    obj = bpy.context.object
    obj_data = obj.data

    row = layout.row()
    row.label(text=obj.name, icon=’OBJECT_DATA’)
    row.label(text=obj_data.name, icon=’MESH_DATA’)

    layout.label=(“Pulse la medida a calcular”)
    row =layout.row(aling=True)
    row.alignment = ‘EXPAND’
    row.operator(“object.button”,text=”Vol”).mode = 1
    row.operator(“object.button”,text=”Mass”, icon=’MESH_DATA’).mode = 2

    row = layout.row()
    row.label(text=”Please check: ALL your mesh’s faces must be TRIs”, icon=’INFO’)

    row = layout.row()
    row.prop(obj_data, “density”)

    row =layout.row(aling=False)
    row.label(“Volumen: ” + str(round(volume_mass,3)), icon=’MESH_DATA’)
    row.label(text=”Masa: ” + str(round(volume_mass * obj_data.density,3)), icon=’MESH_DATA’)

    class OBJECT_OT_Button(bpy.types.Operator):
    bl_idname = “object.button”
    bl_label = “Button”

    def execute(self,context):
    print(“Calculando lo mandado…”)

    verts = obj_data.vertices # array of vertices
    faces = obj_data.faces # array of faces
    volume_mass = 0; # VOLUME OF THE OBJECT

    for f in faces:
    fverts = f.vertices # getting face’s vertices
    ab = verts[fverts[0]].co
    ac = verts[fverts[1]].co
    ad = verts[fverts[2]].co

    # calculating determinator
    det = (ab[0]*ac[1]*ad[2]) – (ab[0]*ac[2]*ad[1]) – (ab[1]*ac[0]*ad[2]) + (ab[1]*ac[2]*ad[0]) + (ab[2]*ac[0]*ad[1]) – (ab[2]*ac[1]*ad[0])

    volume_mass = volume_mass + (det/6)

    print(“Volume: ” + str(round(volume_mass,3)))
    print(“Mass: ” + str(round(volume_mass * obj_data.density,6)))

    print(self.mode)
    return{‘FINISHED’}

    def register():
    bpy.utils.register_module(__name__)
    pass

    def unregister():
    bpy.utils.unregister_module(__name__)
    pass

    if __name__ == “__main__”:
    register()

  6. Ah, añado que Blender permite calcular volúmenes mediante varios plugins, y tambien podemos crearnos nuestros propios scripts y añadirselos sacando el destornillador y peleando con Python o mejor C

    De hecho veo que ya han hecho algo así:

    Autor: Scorpius, Nueva Jersey
    fuente: http://blenderartists.org/forum/showthread.php?49216-AreaVolume-script

    import Blender, vector, time

    object = Blender.Object.GetSelected()
    objname = object[0].name
    meshname = object[0].data.name
    mesh = Blender.NMesh.GetRaw(meshname)

    def tri_area1(face):
    v1, v2, v3 = face.v
    v1, v2, v3 = v1.co, v2.co, v3.co
    e1 = v1-v2
    e2 = v3-v2
    cp = Blender.Mathutils.CrossVecs(e1,e2)
    area = cp.length/2
    return area

    def tri_area2(face):
    v1, v2, v3 = face.v
    v1, v2, v3 = v1.co, v2.co, v3.co
    e1 = vector.vsub(v1,v2)
    e2 = vector.vsub(v3,v2)
    cp = vector.vcross(e1, e2)
    area = vector.vlen(cp)/2
    #volume = vector.vdot(v1, cp) * area / 3
    return area

    print
    start = time.clock()
    print “Area1:”, sum([tri_area1(face) for face in mesh.faces]),
    end = time.clock()
    print “in %.2f %s” % (end-start, “seconds”)

    start = time.clock()
    print “Area2:”, sum([tri_area2(face) for face in mesh.faces]),
    end = time.clock()
    print “in %.2f %s” % (end-start, “seconds”)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s