How to use AskAdjacentFacet function in NXOpen?

500 Views Asked by At

I am working with convergent facet bodies in NX and using C# in NXOpen. In the process, I am using UFSession.Facet.AskAdjacentFacet function to get the adjacent facets of each facet. But on using this particular command, the NXOpen throws error stating "NXOpen.NXException: The facet object is not supported for this operation". I went through the example given in NXOpen documentation (https://docs.plm.automation.siemens.com/data_services/resources/nx/10/nx_api/en_US/custom/ugopen_doc/uf_facet/uf_facet_eg2.c) and used similar approach, but this error shows up any way. Below is the script that I tried.

'''

    public static void Main(string[] args)
    {
        NXOpen.UF.UFFacet myFacet = UFSession.Facet;

        int facetID;
        int edgeID;
        int adjFacID;
        int edgeIDinAdjFac;

        int null_facet_ID = UFConstants.UF_FACET_NULL_FACET_ID;
        facetID = null_facet_ID;

        foreach (NXOpen.Facet.FacetedBody facetBody in workPart.FacetedBodies)
        {
            myFacet.CycleFacets(facetBody.Tag, ref facetID);  // initialise for cycling

            while (facetID != null_facet_ID)
            {
                List<int> Adj_fac_list = new List<int>();
                for (edgeID = 0; edgeID < 3; edgeID++)
                {
                    myFacet.AskAdjacentFacet(facetBody.Tag, facetID, edgeID, out adjFacID, out edgeIDinAdjFac);
                    if (adjFacID != UFConstants.UF_FACET_NULL_FACET_ID)
                    {
                        Adj_fac_list.Add(adjFacID);
                    }
                }
            }
        }
    }

Note: I could use the same model tag and facet id in the function UFSession.FACET.AskNumVertsInFacet and the script works fine. But I do not know why AskAdjacentFacet is not working. Can anyone help me on why there is an error and how to get this working?

1

There are 1 best solutions below

1
On

On first glimpse, the problem I see is that you have not initialized the variable myFacet and it's null. And since it's null, you cannot call its members.

So change a single line of the code from

NXOpen.UF.UFFacet myFacet = UFSession.Facet;

To

NXOpen.UF.UFFacet myFacet = UFSession.GetUFSession().Facet;