Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compas_assembly DEM Viewer division by zero error #13

Open
filipejsbrandao opened this issue Nov 11, 2022 · 0 comments
Open

Compas_assembly DEM Viewer division by zero error #13

filipejsbrandao opened this issue Nov 11, 2022 · 0 comments

Comments

@filipejsbrandao
Copy link

Sorry for duplicating the issue, but I assumed the compas-assembly repo was part of the compas-dev.

Describe the bug*
The DEM Viewer throws an error when loading an assembly with null forces, with both CRA solvers.


Traceback (most recent call last):
  File "d:\10_DEV\CompasWorkshop\mcneel22\RandomWall\02_collectRHgeometry.py", line 88, in <module>
    viewer.add_assembly(assembly)
  File "C:\Users\Filipe\anaconda3\envs\mcneel22\lib\site-packages\compas_assembly\viewer\app.py", line 224, in add_assembly
    resultants += interface.resultantforce
  File "C:\Users\Filipe\anaconda3\envs\mcneel22\lib\site-packages\compas_assembly\datastructures\interface.py", line 176, in resultantforce
    position = Point(*centroid_points_weighted(self.points, normalcomponents))
  File "C:\Users\Filipe\anaconda3\envs\mcneel22\lib\site-packages\compas\geometry\_core\centroids.py", line 163, in centroid_points_weighted
    vector = scale_vector(sum_vectors(vectors), 1.0 / sum(weights))
ZeroDivisionError: float division by zero

To Reproduce
Steps to reproduce the behavior:

  1. Creating a block assembly with horizontal interfaces between the blocks in the same row. The sample script assumes a pyramid with 6 bricks.

A sample script that reproduces the error:

import os
import compas
from compas.colors import Color
from compas.geometry import Translation
from compas.datastructures import Mesh
from compas_assembly.datastructures import Block
from compas_assembly.datastructures import Assembly
from compas_assembly.algorithms import assembly_interfaces
#from compas_view2.app import App
from compas_assembly.viewer import DEMViewer
from compas_cra.equilibrium import cra_solve

# =============================================================================
# Import
# =============================================================================

filepath = os.path.join(os.path.dirname(__file__), "test.json")

data = compas.json_load(filepath)

boxes = data["blocks"]

# =============================================================================
# Assembly
# =============================================================================

assembly = Assembly()

for box in boxes:
    assembly.add_block_from_mesh(Mesh.from_shape(box))

# =============================================================================
# Identify interfaces
# =============================================================================

# inputs = the assembly, maximum distance and minimum area
assembly_interfaces(assembly, tmax=0.001, amin=1e-4)

# =============================================================================
# Boundary conditions
# =============================================================================

assembly.unset_boundary_conditions()

nodes = sorted(assembly.nodes(), key=lambda node: assembly.node_point(node).z)
for node in nodes[:3]:
    assembly.set_boundary_condition(node)

# =============================================================================
# Equilibrium
# =============================================================================

cra_solve(assembly)

# =============================================================================
# Viz
# =============================================================================

viewer = DEMViewer()
viewer.view.camera.position = [0, -5, 5]
viewer.view.camera.look_at([0, 0, 3])

viewer.add_assembly(assembly)

viewer.run()
  1. Sample data
{
    "blocks": [
        {
            "dtype": "compas.geometry/Box",
            "value": {
                "ysize": 0.11,
                "xsize": 0.22500000000000001,
                "frame": {
                    "yaxis": [
                        0.0,
                        1.0,
                        0.0
                    ],
                    "xaxis": [
                        1.0,
                        0.0,
                        0.0
                    ],
                    "point": [
                        0.1125,
                        0.055,
                        0.040000000000000001
                    ]
                },
                "zsize": 0.080000000000000002
            },
            "guid": "4a5f13d4-b563-4aca-83d5-b29437820e82"
        },
        {
            "dtype": "compas.geometry/Box",
            "value": {
                "ysize": 0.11,
                "xsize": 0.22500000000000001,
                "frame": {
                    "yaxis": [
                        0.0,
                        1.0,
                        0.0
                    ],
                    "xaxis": [
                        1.0,
                        0.0,
                        0.0
                    ],
                    "point": [
                        0.33750000000000002,
                        0.055,
                        0.040000000000000001
                    ]
                },
                "zsize": 0.080000000000000002
            },
            "guid": "d47b2b74-b0b4-4fe0-8516-ffe9572554b3"
        },
        {
            "dtype": "compas.geometry/Box",
            "value": {
                "ysize": 0.11,
                "xsize": 0.22500000000000003,
                "frame": {
                    "yaxis": [
                        0.0,
                        1.0,
                        0.0
                    ],
                    "xaxis": [
                        1.0,
                        0.0,
                        0.0
                    ],
                    "point": [
                        0.22500000000000001,
                        0.055,
                        0.12
                    ]
                },
                "zsize": 0.080000000000000002
            },
            "guid": "6d213422-febb-4a1d-8b3d-4222198c3fe7"
        },
        {
            "dtype": "compas.geometry/Box",
            "value": {
                "ysize": 0.11,
                "xsize": 0.22500000000000003,
                "frame": {
                    "yaxis": [
                        0.0,
                        1.0,
                        0.0
                    ],
                    "xaxis": [
                        1.0,
                        0.0,
                        0.0
                    ],
                    "point": [
                        0.5625,
                        0.055,
                        0.040000000000000001
                    ]
                },
                "zsize": 0.080000000000000002
            },
            "guid": "0b1183b1-8490-494f-bc01-e7da073acdab"
        },
        {
            "dtype": "compas.geometry/Box",
            "value": {
                "ysize": 0.11,
                "xsize": 0.22500000000000001,
                "frame": {
                    "yaxis": [
                        0.0,
                        1.0,
                        0.0
                    ],
                    "xaxis": [
                        1.0,
                        0.0,
                        0.0
                    ],
                    "point": [
                        0.33750000000000002,
                        0.055,
                        0.20000000000000001
                    ]
                },
                "zsize": 0.079999999999999988
            },
            "guid": "744d59fa-0d83-4c0b-a973-64983f601bf4"
        },
        {
            "dtype": "compas.geometry/Box",
            "value": {
                "ysize": 0.11,
                "xsize": 0.22499999999999998,
                "frame": {
                    "yaxis": [
                        0.0,
                        1.0,
                        0.0
                    ],
                    "xaxis": [
                        1.0,
                        0.0,
                        0.0
                    ],
                    "point": [
                        0.45000000000000001,
                        0.055,
                        0.12000000000144742
                    ]
                },
                "zsize": 0.080000000000000016
            },
            "guid": "c37b7266-8459-4562-aa10-1e980b51bf4e"
        }
    ]
}

Expected behavior
Zero forces should not be displayed

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Windows / Mac
  • Python version: 3.9.13
  • Python package manager: pip
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant