Home
Reply
Visitor
ErikHultgren
Posts: 4

Can I convert a mesh to ACIS ENTITYs?

Every few months I receive the following question: "I have a mesh / set of facet data / triangle list and would like to bring this into my ACIS application.  Can I make ACIS ENTITYs out of these triangles?"

 

The short answer is that ACIS has no functionality to convert a large set of mesh data into ENTITYs ACIS can use. 

 

The long answer is that there are a couple possible workflows:

1) For small sets of data, the app can create one FACE per triangle, and then attempt to stitch these together.  This is a very topologically-heavy approach.

2) For 2.5D apps (such as a fixed axis laser scanner), logic can be written to detect large areas of similar curvature and combine these triangles together.  This approach can also then detect "hard" edges (over a certain threshold angle) and denote EDGEs. This approach requires considerably more time and effort, but could result in better data for the application.

 

One important note: Even with an advanced mesh processor, there is no guarantee that a mesh converted into ACIS ENTITYs will have the same topological information that the originating model had (eg: Take CAD model -> export mesh -> convert mesh back to CAD).

 

Hope this helps!

erik

 

Regular Contributor
bheld
Posts: 38

Re: Can I convert a mesh to ACIS ENTITYs?

We've had some luck with creating faces for each mesh polygon and then using stitching:

 

// List containing bodies output from api_stitch and api_stitch_nonmanifold.
        // This is the complete set of bodies that belong to the caller.

        // List will contain all the new bodies resulting from the API. This list will be a
        // subset of ENTITY_LIST& output_bodies. This list is provided so that it is
        // convenient to the caller to find out the new bodies that the caller will have to
        // take ownership of (for example, the users may have to register new bodies in their
        // application and/or do memory management for those bodies).
        */
        if (result.ok()) {
            ENTITY_LIST outputBodies, junk;
            tolerant_stitch_options sopts;
            STITCH_COIN_MODES mode = SPASTITCH_COIN_ERROR;
            sopts.set_stch_coincident_face_handling_mode(mode);
            PROCESS_ERROR_STRING(L"ConvertFacetsToEntity/api_stitch", api_stitch(allFaces, outputBodies, junk, &sopts, g_pAO), pcError);

            if (outputBodies.count() != 1) pvOutEntity = NULL;
            else pvOutEntity = outputBodies.first();
        }

Seems to work but doesn't seem to scale well with # of polygons in the mesh.