コード例 #1
0
        public virtual void SetParameters(IXDocument model, IXCustomFeature feat,
                                          object parameters, out CustomFeatureOutdateState_e state)
        {
            CustomFeatureParameter[]       param;
            IXSelObject[]                  selection;
            CustomFeatureDimensionType_e[] dimTypes;
            double[] dimValues;
            IXBody[] bodies;

            Parse(parameters,
                  out param,
                  out selection, out dimTypes, out dimValues, out bodies);

            var dispDims = GetDimensions(feat);

            var dimsVersion = GetDimensionsVersion(feat);

            ConvertParameters(parameters.GetType(), dimsVersion, conv =>
            {
                dispDims = conv.ConvertDisplayDimensions(model, feat, dispDims);
            });

            if (dispDims != null)
            {
                if (dispDims.Length != dimValues.Length)
                {
                    throw new ParametersMismatchException("Dimensions mismatch");
                }
            }

            state = GetState(feat, dispDims);

            SetParametersToFeature(feat, selection, bodies, dispDims, dimValues, param);
        }
コード例 #2
0
        protected override void ExtractRawParameters(IXCustomFeature feat, IXDocument doc,
                                                     out Dictionary <string, object> parameters,
                                                     out IXDimension[] dimensions, out IXSelObject[] selection, out IXBody[] editBodies)
        {
            object retParamNames  = null;
            object retParamValues = null;
            object paramTypes     = null;
            object retSelObj;
            object selObjType;
            object selMarks;
            object selDrViews;
            object compXforms;

            var featData = ((SwMacroFeature)feat).FeatureData;

            featData.GetParameters(out retParamNames, out paramTypes, out retParamValues);
            featData.GetSelections3(out retSelObj, out selObjType, out selMarks, out selDrViews, out compXforms);

            dimensions = GetDimensions(feat);

            var editBodiesObj = featData.EditBodies as object[];

            if (editBodiesObj != null)
            {
                editBodies = editBodiesObj.Cast <IBody2>()
                             .Select(b => SwObject.FromDispatch <SwBody>(b, (SwDocument)doc)).ToArray();
            }
            else
            {
                editBodies = null;
            }

            var paramNames  = retParamNames as string[];
            var paramValues = retParamValues as string[];

            if (paramNames != null)
            {
                parameters = new Dictionary <string, object>();

                for (int i = 0; i < paramNames.Length; i++)
                {
                    parameters.Add(paramNames[i], paramValues[i]);
                }
            }
            else
            {
                parameters = null;
            }

            var selObjects = retSelObj as object[];

            if (selObjects != null)
            {
                selection = selObjects.Select(s => SwObject.FromDispatch <SwSelObject>(s, (SwDocument)doc)).ToArray();
            }
            else
            {
                selection = null;
            }
        }
コード例 #3
0
        public void Insert(IXDocument model)
        {
            m_CurData = new TPage();

            CurModel = model;

            m_EditingFeature = null;

            m_PmPage.Show(m_CurData);
        }
コード例 #4
0
        public void Insert(IXDocument model)
        {
            m_CurData = new TPage();

            CurModel = model;

            m_EditingFeature = null;

            EditingStarted?.Invoke(m_App, model, null);
            m_PmPage.Show(m_CurData);
            UpdatePreview();
        }
コード例 #5
0
        public void Edit(IXDocument model, IXCustomFeature <TData> feature)
        {
            CurModel         = model;
            m_EditingFeature = feature;

            try
            {
                var featParam = m_EditingFeature.Parameters;

                m_CurData = m_DataToPageConv.Invoke(featParam);

                m_PmPage.Show(m_CurData);
                UpdatePreview();
            }
            catch
            {
                m_EditingFeature.Parameters = null;
            }
        }
コード例 #6
0
        public override object GetParameters(IXCustomFeature feat, IXDocument model, Type paramsType, out IXDimension[] dispDims, out string[] dispDimParams, out IXBody[] editBodies, out IXSelObject[] sels, out CustomFeatureOutdateState_e state)
        {
            dispDims = null;

            try
            {
                return(base.GetParameters(feat, model, paramsType, out dispDims, out dispDimParams, out editBodies, out sels, out state));
            }
            catch
            {
                if (dispDims != null)
                {
                    foreach (SwDimension dim in dispDims)
                    {
                        dim.Dispose();
                    }
                }

                throw;
            }
        }
コード例 #7
0
        protected override IXDimension[] GetDimensions(IXCustomFeature feat)
        {
            var dispDimsObj = ((SwMacroFeature)feat).FeatureData.GetDisplayDimensions() as object[];

            if (dispDimsObj != null)
            {
                var dimensions = new IXDimension[dispDimsObj.Length];

                for (int i = 0; i < dispDimsObj.Length; i++)
                {
                    dimensions[i]  = new SwDimension(dispDimsObj[i] as IDisplayDimension);
                    dispDimsObj[i] = null;
                }

                return(dimensions);
            }
            else
            {
                return(null);
            }
        }
コード例 #8
0
        public void Edit(IXDocument model, IXCustomFeature <TData> feature)
        {
            CurModel         = model;
            m_EditingFeature = feature;

            try
            {
                var featParam = m_EditingFeature.Parameters;

                m_CurPageData = Definition.ConvertParamsToPage(featParam);

                EditingStarted?.Invoke(m_App, model, feature, featParam, m_CurPageData);
                m_PmPage.Show(m_CurPageData);

                UpdatePreview();
            }
            catch
            {
                m_EditingFeature.Parameters = null;
            }
        }
コード例 #9
0
        public override void OnFeatureInserted(IXApplication app, IXDocument doc, IXCustomFeature <CoordinateSystemData> feat,
                                               CoordinateSystemData data, CoordinateSystemData page)
        {
            var bodies = ((object[])((ISwDocument)doc).Model.Extension.FindTrackedObjects(m_TrackingId, null,
                                                                                          new int[] { (int)swTopoEntity_e.swTopoBody }, new int[] { X_BODY_TRACKING_ID, Y_BODY_TRACKING_ID, Z_BODY_TRACKING_ID })).Cast <IBody2>().ToArray();

            var xBody = bodies[0];
            var yBody = bodies[1];
            var zBody = bodies[2];

            var xEdge = (IEntity)((object[])xBody.GetEdges()).First();
            var yEdge = (IEntity)((object[])yBody.GetEdges()).First();
            var zEdge = (IEntity)((object[])zBody.GetEdges()).First();
            var orig  = (IEntity)((IEdge)xEdge).GetStartVertex();

            if (xBody.RemoveTrackingID(m_TrackingId) != (int)swTrackingIDError_e.swTrackingIDError_NoError)
            {
                throw new Exception("Failed to clear track body");
            }

            if (yBody.RemoveTrackingID(m_TrackingId) != (int)swTrackingIDError_e.swTrackingIDError_NoError)
            {
                throw new Exception("Failed to clear track body");
            }

            if (zBody.RemoveTrackingID(m_TrackingId) != (int)swTrackingIDError_e.swTrackingIDError_NoError)
            {
                throw new Exception("Failed to clear track body");
            }

            orig.SelectByMark(false, 1);
            xEdge.SelectByMark(true, 2);
            yEdge.SelectByMark(true, 4);
            zEdge.SelectByMark(true, 8);

            var coordSysFeat = ((ISwDocument)doc).Model.FeatureManager.InsertCoordinateSystem(false, false, false);

            ((ISwFeature)feat).Feature.MakeSubFeature(coordSysFeat);
        }
コード例 #10
0
        protected override CustomFeatureOutdateState_e GetState(IXCustomFeature featData, IXDimension[] dispDims)
        {
            var state = CustomFeatureOutdateState_e.UpToDate;

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

            //TODO: fix icons

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

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

            return(state);
        }
コード例 #11
0
 public override void OnEditingStarted(IXApplication app, IXDocument doc, IXCustomFeature <CabinetSizeData> feat,
                                       CabinetSizeData data, CabinetConfiguratorPage page)
 {
     page.Order.Db = new FurnitureDbContext(Settings.Default.DbConnectionString);
     UpdateStatuses(page);
 }
コード例 #12
0
        protected override void SetParametersToFeature(IXCustomFeature feat, IXSelObject[] selection, IXBody[] editBodies,
                                                       IXDimension[] dims, double[] dimValues, CustomFeatureParameter[] param)
        {
            try
            {
                var featData = ((SwMacroFeature)feat).FeatureData;

                if (selection != null && selection.Any())
                {
                    var dispWraps = selection.Cast <SwSelObject>().Select(s => new DispatchWrapper(s.Dispatch)).ToArray();

                    featData.SetSelections2(dispWraps, new int[selection.Length], new IView[selection.Length]);
                }

                if (editBodies != null)
                {
                    featData.EditBodies = editBodies.Cast <SwBody>().Select(b => b.Body).ToArray();
                }

                if (dims != null)
                {
                    for (int i = 0; i < dims.Length; i++)
                    {
                        dims[i].SetValue(dimValues[i]);
                        ((SwDimension)dims[i]).Dispose();
                    }
                }

                var state = GetState(feat, dims);

                if (param.Any())
                {
                    //macro feature dimensions cannot be changed in the existing feature
                    //reverting the dimensions version
                    if (state.HasFlag(CustomFeatureOutdateState_e.Dimensions))
                    {
                        var vers = GetVersion(feat, VERSION_DIMENSIONS_NAME);

                        var par = param.First(p => p.Name == VERSION_DIMENSIONS_NAME);
                        par.Value = vers.ToString();
                    }

                    string[] paramNames;
                    string[] paramValues;
                    int[]    paramTypes;

                    ConvertParameters(param, out paramNames, out paramTypes, out paramValues);

                    featData.SetParameters(paramNames, paramTypes, paramValues);

                    UpdateParameters(featData, paramNames, paramTypes, paramValues);
                }
            }
            finally
            {
                if (dims != null)
                {
                    foreach (SwDimension dim in dims)
                    {
                        dim.Dispose();
                    }
                }
            }
        }
コード例 #13
0
ファイル: BackwardCompatibility.cs プロジェクト: xarial/xcad
            public override Dictionary <string, string> ConvertParameters(IXDocument model, IXCustomFeature feat, Dictionary <string, string> parameters)
            {
                var paramVal = parameters["Param1"];

                parameters.Remove("Param1");
                parameters.Add("Param1A", paramVal); //renaming parameter
                parameters.Add("Param3", "Default"); //adding new parameter with default value
                return(parameters);
            }
コード例 #14
0
 protected abstract IXDimension[] GetDimensions(IXCustomFeature feat);
コード例 #15
0
 //TODO: need to spearate to different methods
 protected abstract void ExtractRawParameters(IXCustomFeature feat, IXDocument doc,
                                              out Dictionary <string, object> parameters, out IXDimension[] dimensions,
                                              out IXSelObject[] selection, out IXBody[] editBodies);
コード例 #16
0
 public virtual IXDimension[] ConvertDisplayDimensions(IXDocument model, IXCustomFeature feat, IXDimension[] dispDims)
 {
     return(dispDims);
 }
コード例 #17
0
        public virtual object GetParameters(IXCustomFeature feat, IXDocument model, Type paramsType,
                                            out IXDimension[] dispDims, out string[] dispDimParams, out IXBody[] editBodies,
                                            out IXSelObject[] sels, out CustomFeatureOutdateState_e state)
        {
            var dispDimParamsMap = new SortedDictionary <int, string>();

            Dictionary <string, object> featRawParams;

            IXDimension[] featDims;
            IXSelObject[] featSels;
            IXBody[]      featBodies;

            ExtractRawParameters(feat, model, out featRawParams, out featDims, out featSels, out featBodies);

            var parameters = new Dictionary <string, string>();

            var paramsVersion = new Version();
            var dimsVersion   = new Version();

            if (featRawParams?.Any() == true)
            {
                foreach (var featRawParam in featRawParams)
                {
                    var paramName = featRawParam.Key;

                    //TODO: think about conversion
                    var paramVal = featRawParam.Value?.ToString();

                    if (paramName == VERSION_PARAMETERS_NAME)
                    {
                        paramsVersion = new Version(paramVal);
                    }
                    else if (paramName == VERSION_DIMENSIONS_NAME)
                    {
                        paramsVersion = new Version(paramVal);
                    }
                    else
                    {
                        parameters.Add(paramName, paramVal);
                    }
                }
            }

            ConvertParameters(paramsType, paramsVersion, conv =>
            {
                parameters = conv.ConvertParameters(model, feat, parameters);
                featBodies = conv.ConvertEditBodies(model, feat, featBodies);
                featSels   = conv.ConvertSelections(model, feat, featSels);
                featDims   = conv.ConvertDisplayDimensions(model, feat, featDims);
            });

            var resParams = Activator.CreateInstance(paramsType);

            TraverseParametersDefinition(resParams.GetType(),
                                         (prp) =>
            {
                AssignObjectsToProperty(resParams, featSels, prp, parameters);
            },
                                         (dimType, prp) =>
            {
                var dimIndices = GetObjectIndices(prp, parameters);

                if (dimIndices.Length != 1)
                {
                    throw new InvalidOperationException(
                        "It could only be one index associated with dimension");
                }

                var dimInd = dimIndices.First();

                if (featDims.Length > dimInd)
                {
                    var dispDim = featDims[dimInd];

                    //TODO: work with current configuration when assembly is supported
                    var val = dispDim.GetValue();

                    if (!double.IsNaN(val))
                    {
                        prp.SetValue(resParams, val, null);
                    }

                    dispDimParamsMap.Add(dimInd, prp.Name);
                }
                else
                {
                    throw new IndexOutOfRangeException(
                        $"Dimension at index {dimInd} id not present in the macro feature");
                }
            },
                                         (prp) =>
            {
                AssignObjectsToProperty(resParams, featBodies, prp, parameters);
            },
                                         prp =>
            {
                var paramVal = GetParameterValue(parameters, prp.Name);

                object val = null;

                if (paramVal != null)
                {
                    if (prp.PropertyType.IsEnum)
                    {
                        val = Enum.Parse(prp.PropertyType, paramVal);
                    }
                    else
                    {
                        val = Convert.ChangeType(paramVal, prp.PropertyType);
                    }
                }

                prp.SetValue(resParams, val, null);
            });

            dispDims   = featDims;
            editBodies = featBodies;
            sels       = featSels;

            state = GetState(feat, featDims);

            dispDimParams = dispDimParamsMap.Values.ToArray();

            return(resParams);
        }
コード例 #18
0
 CustomFeatureRebuildResult IXCustomFeatureDefinition.OnRebuild(IXApplication app, IXDocument model, IXCustomFeature feature)
 => OnRebuild((ISwApplication)app, (ISwDocument)model, (ISwMacroFeature)feature);
コード例 #19
0
 public override void OnEditingCompleted(IXApplication app, IXDocument doc, IXCustomFeature <CabinetSizeData> feat,
                                         CabinetSizeData data, CabinetConfiguratorPage page, PageCloseReasons_e reason)
 {
     page.Order.Db.Dispose();
 }
コード例 #20
0
 protected abstract CustomFeatureOutdateState_e GetState(IXCustomFeature featData, IXDimension[] dispDims);
コード例 #21
0
 public virtual CustomFeatureRebuildResult OnRebuild(IXApplication app, IXDocument model, IXCustomFeature feature)
 {
     return(null);
 }
コード例 #22
0
 public virtual bool OnEditDefinition(IXApplication app, IXDocument model, IXCustomFeature feature)
 {
     return(true);
 }
コード例 #23
0
 public override void OnPageParametersChanged(IXApplication app, IXDocument doc, IXCustomFeature <CabinetSizeData> feat,
                                              CabinetConfiguratorPage page)
 {
     UpdateStatuses(page);
 }
コード例 #24
0
 public virtual IXBody[] ConvertEditBodies(IXDocument model, IXCustomFeature feat, IXBody[] editBodies)
 {
     return(editBodies);
 }
コード例 #25
0
 public virtual CustomFeatureState_e OnUpdateState(IXApplication app, IXDocument model, IXCustomFeature feature)
 {
     return(CustomFeatureState_e.Default);
 }
コード例 #26
0
 protected abstract void SetParametersToFeature(IXCustomFeature feat,
                                                IXSelObject[] selection, IXBody[] editBodies, IXDimension[] dims, double[] dimValues, CustomFeatureParameter[] param);
コード例 #27
0
 bool IXCustomFeatureDefinition.OnEditDefinition(IXApplication app, IXDocument model, IXCustomFeature feature)
 => OnEditDefinition((ISwApplication)app, (ISwDocument)model, (SwMacroFeature)feature);
コード例 #28
0
 public virtual Dictionary <string, string> ConvertParameters(IXDocument model, IXCustomFeature feat, Dictionary <string, string> parameters)
 {
     return(parameters);
 }
コード例 #29
0
 CustomFeatureState_e IXCustomFeatureDefinition.OnUpdateState(IXApplication app, IXDocument model, IXCustomFeature feature)
 => OnUpdateState((ISwApplication)app, (ISwDocument)model, (SwMacroFeature)feature);
コード例 #30
0
 public virtual IXSelObject[] ConvertSelections(IXDocument model, IXCustomFeature feat, IXSelObject[] selection)
 {
     return(selection);
 }