/// <summary>
        /// Serializes the parameters of the macro feature to a structure
        /// </summary>
        /// <typeparam name="TParams">Type of parameters structure</typeparam>
        /// <param name="featData">Pointer to macro feature data</param>
        /// <param name="feat">Pointer to a feature</param>
        /// <param name="model">Pointer to model document</param>
        /// <param name="parameters">Parameters to serialize</param>
        public static void SetParameters <TParams>(this IMacroFeatureData featData, IFeature feat, IModelDoc2 model, TParams parameters)
            where TParams : class, new()
        {
            MacroFeatureOutdateState_e state;

            m_ParamsParser.SetParameters(model, feat, featData, parameters, out state);
        }
Пример #2
0
        /// <summary>
        /// Parameters are not updated when SetParameters is called from OnRebuild method, updating one by one fixes the issue
        /// </summary>
        private void UpdateParameters(IMacroFeatureData featData,
                                      string[] paramNames, int[] paramTypes, string[] paramValues)
        {
            if (paramNames != null && paramTypes != null && paramValues != null)
            {
                for (int i = 0; i < paramNames.Length; i++)
                {
                    var paramName = paramNames[i];
                    var val       = paramValues[i];

                    switch ((swMacroFeatureParamType_e)paramTypes[i])
                    {
                    case swMacroFeatureParamType_e.swMacroFeatureParamTypeString:
                        featData.SetStringByName(paramName, val);
                        break;

                    case swMacroFeatureParamType_e.swMacroFeatureParamTypeInteger:
                        featData.SetIntegerByName(paramName, int.Parse(val));
                        break;

                    case swMacroFeatureParamType_e.swMacroFeatureParamTypeDouble:
                        featData.SetDoubleByName(paramName, double.Parse(val));
                        break;
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Json反序列化
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="macroFeatureData"></param>
        /// <returns></returns>
        public static T Read <T>(this IMacroFeatureData macroFeatureData)
        {
            string data;

            macroFeatureData.GetStringByName(FeatureDataKey, out data);
            return(JsonConvert.DeserializeObject <T>(data));
        }
 /// <summary>
 /// Adds tracking ids to a body faces and edges. This is not the best way to
 /// do this in a repeatable way but works quickly.
 /// </summary>
 /// <param name="macroFeatureData"></param>
 /// <param name="body"></param>
 public static int AddIdsToBody(this IMacroFeatureData macroFeatureData, IBody2 body, int i = 1)
 {
     if (body == null)
     {
         throw new ArgumentNullException(nameof(body));
     }
     {
         object FacesNeedId;
         object EdgesNeedId;
         macroFeatureData.GetEntitiesNeedUserId((object)body, out FacesNeedId, out EdgesNeedId);
         var edgesNeedId = (object[])EdgesNeedId;
         var facesNeedId = (object[])FacesNeedId;
         var empty       = new object[] {};
         foreach (var edge in edgesNeedId ?? empty)
         {
             if (!macroFeatureData.SetEdgeUserId((Edge)edge, i, 0))
             {
                 throw new Exception("SetUserIdFailed");
             }
             i++;
         }
         foreach (var face in facesNeedId ?? empty)
         {
             if (!macroFeatureData.SetFaceUserId((Face2)face, i, 0))
             {
                 throw new Exception("SetUserIdFailed");
             }
             i++;
         }
     }
     return(i);
 }
        public static T Read <T>(this IMacroFeatureData macroFeatureData)
        {
            string data;

            macroFeatureData.GetStringByName(FeatureDataKey, out data);
            return(Json.FromJson <T>(data));
        }
Пример #6
0
 internal TParams GetParameters <TParams>(IFeature feat, IMacroFeatureData featData, IModelDoc2 model,
                                          out IDisplayDimension[] dispDims, out string[] dispDimParams, out IBody2[] editBodies, out MacroFeatureOutdateState_e state)
     where TParams : class, new()
 {
     return(GetParameters(feat, featData, model, typeof(TParams), out dispDims,
                          out dispDimParams, out editBodies, out state) as TParams);
 }
Пример #7
0
        /// <summary>
        /// 获取选中对象,通过类型和标记
        /// Return selected objects filtered by type and mark.
        /// </summary>
        /// <param name="selMgr"></param>
        /// <param name="filter">(type,mark)=>bool</param>
        /// <returns></returns>
        public static IEnumerable <object> GetSelectedObjects(this IMacroFeatureData selMgr, Func <swSelectType_e, int, bool> filter)
        {
            {
                object objects;
                object objectTypes;
                object marks;
                object drViews;
                object componentXForms;
                selMgr.GetSelections3(out objects, out objectTypes, out marks, out drViews, out componentXForms);

                var objectsArray = (object[])objects;
                var typesArray   = (swSelectType_e[])objectTypes;
                var marksArray   = (int[])marks;

                var i = 0;
                foreach (var item in objectsArray)
                {
                    if (filter(typesArray[i], marksArray[i]))
                    {
                        yield return(item);
                    }
                    i++;
                }
            }
        }
        public void ShowPage(RoundStockFeatureParameters parameters, IPartDoc part, IFeature editingFeature, IMacroFeatureData featData)
        {
            m_CurrentParameters  = parameters;
            m_CurrentPart        = part;
            m_EditingFeature     = editingFeature;
            m_EditingFeatureData = featData;

            if (m_ActivePage != null)
            {
                m_ActivePage.Handler.DataChanged -= OnDataChanged;
                m_ActivePage.Handler.Closing     -= OnPageClosing;
                m_ActivePage.Handler.Closed      -= OnClosed;
            }

            m_CurrentViewModel = RoundStockViewModel.FromParameters(parameters);

            m_ActivePage = new RoundStockView(m_CurrentViewModel, m_App);

            m_ActivePage.Handler.DataChanged += OnDataChanged;
            m_ActivePage.Handler.Closing     += OnPageClosing;
            m_ActivePage.Handler.Closed      += OnClosed;

            m_ActivePage.Show();

            m_Model.ShowPreview(part, parameters.Direction, parameters.ConcenticWithCylindricalFace,
                                parameters.StockStep, parameters.ExtraRadius);
        }
Пример #9
0
        private void OnFeatureEditingCompleted(RoundStockFeatureParameters parameters,
                                               IPartDoc part, IFeature feat, IMacroFeatureData featData, bool isOk)
        {
            if (isOk)
            {
                MacroFeatureOutdateState_e state;
                SetParameters(part as IModelDoc2, feat, featData, parameters, out state);

                if (state != MacroFeatureOutdateState_e.UpToDate)
                {
                    if (m_Controller.App.SendMsgToUser2("This features is outdated. It is required to replace it. Do you want to replace this feature?",
                                                        (int)swMessageBoxIcon_e.swMbWarning,
                                                        (int)swMessageBoxBtn_e.swMbYesNo) == (int)swMessageBoxResult_e.swMbHitYes)
                    {
                        feat = (part as IModelDoc2).FeatureManager
                               .ReplaceComFeature <RoundStockMacroFeature, RoundStockFeatureParameters>(
                            feat, parameters);

                        return;
                    }
                }

                feat.ModifyDefinition(featData, part, null);
            }
            else
            {
                featData.ReleaseSelectionAccess();
            }
        }
Пример #10
0
        /// <summary>
        /// Returns the current instance of parameters data model for the feature
        /// </summary>
        /// <param name="feat">Pointer to feature</param>
        /// <param name="featData">Pointer to feature data</param>
        /// <param name="model">Pointer to model</param>
        /// <returns>Current instance of parameters</returns>
        protected TParams GetParameters(IFeature feat, IMacroFeatureData featData, IModelDoc2 model)
        {
            IDisplayDimension[] dispDims;
            IBody2[]            editBodies;
            var parameters = GetParameters(feat, featData, model, out dispDims, out editBodies);

            return(parameters);
        }
        private object GetBodyResult(ISldWorks app, IEnumerable <IBody2> bodies, IMacroFeatureData featData, bool updateEntityIds)
        {
            if (bodies != null)
            {
                if (CompatibilityUtils.IsVersionNewerOrEqual(app, SwVersion_e.Sw2013, 5))
                {
                    featData.EnableMultiBodyConsume = true;
                }

                if (updateEntityIds)
                {
                    if (featData == null)
                    {
                        throw new ArgumentNullException(nameof(featData));
                    }

                    foreach (var body in bodies)
                    {
                        object faces;
                        object edges;
                        featData.GetEntitiesNeedUserId(body, out faces, out edges);

                        if (faces is object[])
                        {
                            int nextId = 0;

                            foreach (Face2 face in faces as object[])
                            {
                                featData.SetFaceUserId(face, nextId++, 0);
                            }
                        }

                        if (edges is object[])
                        {
                            int nextId = 0;

                            foreach (Edge edge in edges as object[])
                            {
                                featData.SetEdgeUserId(edge, nextId++, 0);
                            }
                        }
                    }
                }

                if (bodies.Count() == 1)
                {
                    return(bodies.First());
                }
                else
                {
                    return(bodies.ToArray());
                }
            }
            else
            {
                throw new ArgumentNullException(nameof(bodies));
            }
        }
Пример #12
0
        protected TParams GetParameters(IFeature feat, IMacroFeatureData featData, IModelDoc2 model,
                                        out IDisplayDimension[] dispDims, out IBody2[] editBodies)
        {
            MacroFeatureOutdateState_e state;

            string[] dispDimParams;
            return(m_ParamsParser.GetParameters <TParams>(feat, featData, model, out dispDims,
                                                          out dispDimParams, out editBodies, out state));
        }
        internal void Show(IModelDoc2 model, IFeature feat, IMacroFeatureData featData, TPage data)
        {
            m_Model = model;
            m_Data  = data;

            m_Feat     = feat;
            m_FeatData = featData;

            m_Page.Show(data);
        }
        /// <summary>
        /// Deserializes the parameters of the macro feature to a structure
        /// </summary>
        /// <typeparam name="TParams">Type of parameters structure</typeparam>
        /// <param name="featData">Pointer to macro feature data</param>
        /// <param name="feat">Pointer to a feature</param>
        /// <param name="model">Pointer to model document</param>
        /// <returns>Parameters</returns>
        public static TParams GetParameters <TParams>(this IMacroFeatureData featData, IFeature feat, IModelDoc2 model)
            where TParams : class, new()
        {
            IDisplayDimension[]        dispDims;
            IBody2[]                   bodies;
            MacroFeatureOutdateState_e state;

            string[] dispDimParams;
            return(m_ParamsParser.GetParameters <TParams>(feat, featData, model,
                                                          out dispDims, out dispDimParams, out bodies, out state));
        }
Пример #15
0
        private Version GetVersion(IMacroFeatureData featData, string name)
        {
            Version dimsVersion;
            string  versVal;

            featData.GetStringByName(name, out versVal);

            if (!Version.TryParse(versVal, out dimsVersion))
            {
                dimsVersion = new Version();
            }

            return(dimsVersion);
        }
        private void OnFeatureEditCompleted(IModelDoc2 model, IFeature feat, IMacroFeatureData featData, TPage data, bool isOk)
        {
            HidePreview(model, m_CurrentEditBodies.ToArray());

            if (isOk)
            {
                var parameters = ConvertPageToParams(data);
                SetParameters(model, feat, featData, parameters);
                feat.ModifyDefinition(featData, model, null);
            }
            else
            {
                featData.ReleaseSelectionAccess();
            }
        }
        private void ShowPropertyPage(ISldWorks app, IModelDoc2 model, IFeature feat,
                                      IMacroFeatureData featData, TParams parameters, PageClosedDelegate <TPage> closeHandler)
        {
            m_CurrentEditBodies    = new List <IBody2>();
            m_CurrentPreviewBodies = new List <IBody2>();
            m_LastError            = null;

            m_CurrentCloseHandler = closeHandler;

            var data = ConvertParamsToPage(parameters);

            GetPage(app).Show(model, feat, featData, data);

            PregenerateAndPreviewGeometry(app, model, parameters);
        }
Пример #18
0
        internal protected MacroFeatureRebuildBodyResult(IMacroFeatureData featData,
                                                         bool updateEntityIds, params IBody2[] bodies) : base(GetBodyResult(bodies))
        {
            if (Context.CurrentApp.IsVersionNewerOrEqual(SwVersion_e.Sw2013, 5))
            {
                featData.EnableMultiBodyConsume = true;
            }

            if (updateEntityIds)
            {
                if (featData == null)
                {
                    throw new ArgumentNullException(nameof(featData));
                }

                for (int i = 0; i < bodies.Length; i++)
                {
                    var body = bodies[i];

                    object faces;
                    object edges;
                    featData.GetEntitiesNeedUserId(body, out faces, out edges);

                    if (faces is object[])
                    {
                        int nextId = 0;

                        foreach (Face2 face in faces as object[])
                        {
                            featData.SetFaceUserId(face, nextId++, 0);
                        }
                    }

                    if (edges is object[])
                    {
                        int nextId = 0;

                        foreach (Edge edge in edges as object[])
                        {
                            featData.SetEdgeUserId(edge, nextId++, 0);
                        }
                    }
                }
            }
        }
        private void OnFeatureInsertCompleted(IModelDoc2 model, IFeature feat, IMacroFeatureData featData, TPage data, bool isOk)
        {
            Logger.Log("Inserting new feature");

            HidePreview(model, m_CurrentEditBodies.ToArray());

            if (isOk)
            {
                try
                {
                    var parameters = ConvertPageToParams(data);

                    var newFeat = model.FeatureManager.InsertComFeature(GetType(), parameters);
                }
                catch (Exception ex)
                {
                    Logger.Log(ex);
                    throw;
                }
            }
        }
Пример #20
0
        private MacroFeatureOutdateState_e GetState(IMacroFeatureData featData, IDisplayDimension[] dispDims)
        {
            var state = MacroFeatureOutdateState_e.UpToDate;

            if (dispDims != null && dispDims.Any(d => d is DisplayDimensionPlaceholder))
            {
                state |= MacroFeatureOutdateState_e.Dimensions;
            }

            if (m_CurrentIcons != null)
            {
                var curIcons = featData.IconFiles as string[];

                if (curIcons == null || !m_CurrentIcons.SequenceEqual(curIcons,
                                                                      StringComparer.CurrentCultureIgnoreCase))
                {
                    state |= MacroFeatureOutdateState_e.Icons;
                }
            }

            return(state);
        }
        protected override MacroFeatureRebuildResult CreateRebuildResult(ISldWorks app, IMacroFeatureData featData, BodiesFilletFeatureDataModel parameters)
        {
            IReadOnlyList <IFace2> filletFaces;
            var bodies = CreateFillets(app, parameters.Selections, parameters.Radius, false, out filletFaces);

            return(new BodiesFilletMacroFeatureRebuildResult(featData, bodies, filletFaces));
        }
 internal BodiesFilletMacroFeatureRebuildResult(IMacroFeatureData featData,
                                                IBody2[] bodies, IReadOnlyList <IFace2> filletFaces) : base(featData, true, bodies)
 {
     FilletFaces = filletFaces;
 }
        private object ParseMacroFeatureResult(CustomFeatureRebuildResult res, ISldWorks app, IMacroFeatureData featData)
        {
            switch (res)
            {
            case CustomFeatureBodyRebuildResult bodyRes:
                //TODO: validate if any non SwBody in the array
                //TODO: get updateEntityIds from the parameters
                return(GetBodyResult(app, bodyRes.Bodies?.OfType <SwBody>().Select(b => b.Body), featData, true));

            default:
                return(GetStatusResult(res.Result, res.ErrorMessage));
            }
        }
Пример #24
0
 /// <summary>
 /// 将数据序列化到宏特征上
 /// </summary>
 /// <param name="macroFeatureData"></param>
 /// <param name="data"></param>
 public static void Write(this IMacroFeatureData macroFeatureData, object data)
 {
     macroFeatureData.SetStringByName(FeatureDataKey, JsonConvert.SerializeObject(data));
 }
 public static void Write(this IMacroFeatureData macroFeatureData, object data)
 {
     macroFeatureData.SetStringByName(FeatureDataKey, Json.ToJson(data));
 }
Пример #26
0
        private object GetBodyResult(ISldWorks app, IModelDoc2 model, IEnumerable <IBody2> bodies,
                                     IMacroFeatureData featData, bool updateEntityIds)
        {
            if (bodies != null)
            {
                if (CompatibilityUtils.IsVersionNewerOrEqual(app, SwVersion_e.Sw2013, 5))
                {
                    featData.EnableMultiBodyConsume = true;
                }

                if (updateEntityIds)
                {
                    if (featData == null)
                    {
                        throw new ArgumentNullException(nameof(featData));
                    }

                    foreach (var body in bodies)
                    {
                        object faces;
                        object edges;
                        featData.GetEntitiesNeedUserId(body, out faces, out edges);

                        if (faces is object[])
                        {
                            var faceIds = (faces as object[]).ToDictionary(x => (Face2)x, x => new MacroFeatureEntityId());

                            AssignFaceIds(app, model, faceIds);

                            foreach (var faceId in faceIds)
                            {
                                featData.SetFaceUserId(faceId.Key, faceId.Value.FirstId, faceId.Value.SecondId);
                            }
                        }

                        if (edges is object[])
                        {
                            var edgeIds = (edges as object[]).ToDictionary(x => (Edge)x, x => new MacroFeatureEntityId());

                            AssignEdgeIds(app, model, edgeIds);

                            foreach (var edgeId in edgeIds)
                            {
                                featData.SetEdgeUserId(edgeId.Key, edgeId.Value.FirstId, edgeId.Value.SecondId);
                            }
                        }
                    }
                }

                if (bodies.Count() == 1)
                {
                    return(bodies.First());
                }
                else
                {
                    return(bodies.ToArray());
                }
            }
            else
            {
                throw new ArgumentNullException(nameof(bodies));
            }
        }
Пример #27
0
 /// <inheritdoc cref="SetParameters(IModelDoc2, IFeature, IMacroFeatureData, TParams)"/>
 /// <param name="state">Current state of the parameters</param>
 protected void SetParameters(IModelDoc2 model, IFeature feat, IMacroFeatureData featData, TParams parameters, out MacroFeatureOutdateState_e state)
 {
     m_ParamsParser.SetParameters(model, feat, featData, parameters, out state);
 }
        protected virtual MacroFeatureRebuildResult CreateRebuildResult(ISldWorks app, IMacroFeatureData featData, TParams parameters)
        {
            var bodies = CreateGeometry(app, parameters);

            if (bodies.Any())
            {
                return(MacroFeatureRebuildResult.FromBodies(bodies, featData, true));
            }
            else
            {
                return(MacroFeatureRebuildResult.FromStatus(true));
            }
        }
 private void OnPageClosed(IModelDoc2 model, IFeature feat, IMacroFeatureData featData, TPage data, bool isOk)
 {
     m_CurrentCloseHandler?.Invoke(model, feat, featData, data, isOk);
 }
Пример #30
0
 public IMacroFeatureDataObject(IMacroFeatureData IMacroFeatureDatainstance)
 {
     IMacroFeatureDataInstance = IMacroFeatureDatainstance;
 }