AnsweredAssumed Answered

MacroFeature & PMPSelectionbox

Question asked by Alexandre Gragnano on Nov 21, 2016
Latest reply on Nov 22, 2016 by Alexandre Gragnano

Hello,

 

I am starting a macro feature project but I have some problems with it:

I have a PMPSelectionbox which accept multiple sketches in input.

If the user click on OK button, OnClose method call SaveFeatureData:

 

void IPropertyManagerPage2Handler9.OnClose(int reason)
{
    if (reason == (int)swPropertyManagerPageCloseReasons_e.swPropertyManagerPageClose_Okay)
        SaveFeatureData();
}

 

In this method, I am trying to save selections into the feature definition object:

 

private void SaveFeatureData()
{
    var selMgr = (SelectionMgr)ModelDoc.SelectionManager;
    
    var features = new List<Feature>();
    var selMarks = new List<int>();
    var drViews = new List<object>();
    
    var count = selMgr.GetSelectedObjectCount2(SelectionMark);
    if (count > 0)
    {
        for (var i = 1; i <= count; i += 1)
        {
            var type = selMgr.GetSelectedObjectType3(i, SelectionMark);
            if (type == SelectionType)
            {
                var selection = selMgr.GetSelectedObject6(i, SelectionMark);
                if (selection is Feature)
                {
                    features.Add((Feature)selection);
                    selMarks.Add(SelectionMark);
                    drViews.Add(null);
                }
            }
        }
    }
    
    if (Feature == null)
    {
        Feature = ModelDoc.FeatureManager.InsertMacroFeature3
        (
            BaseName: "MacroFeature",
            ProgId: "Namespace.MacroFeature",
            MacroMethods: null,
            ParamNames: null,
            ParamTypes: null,
            ParamValues: null,
            DimTypes: null,
            DimValues: null,
            EditBodies: null,
            IconFiles: null,
            Options: 0
        );
    }
    
    if (Feature != null)
    {
        var data = (MacroFeatureData)Feature.GetDefinition();
        if (data != null)
        {
            var access = data.AccessSelections(ModelDoc, null);
            if (access == true)
            {
                data.SetSelections2
                (
                    Objects: features.ToArray(),
                    SelMarks: selMarks.ToArray(),
                    DrViews: drViews.ToArray()
                );
                Feature.ModifyDefinition(data, ModelDoc, null);
            }
        }
    }
}

 

At creation time, everything is ok but at edition time, if I add or remove a sketch

from the selection box and I click on OK, the new selection is not saved.

 

Note: If I run step by step, everything look ok:

- features list is ok

- selmarks list is ok

- Feature.ModifyDefinition returns true

 

I do not really understand AccessSelections / ReleaseSelection / ModifyDefinition mechanism

 

Some help will be welcome.

Outcomes