コード例 #1
0
ファイル: SwCutListItem.cs プロジェクト: EddyAlleman/xcad
        protected override void DeleteProperty(IXProperty prp)
        {
            if (m_ParentDoc.Configurations.Active.Configuration != m_ParentConf.Configuration)
            {
                throw new ConfigurationSpecificCutListPropertiesWriteNotSupportedException();
            }

            base.DeleteProperty(prp);
        }
コード例 #2
0
 public bool TryGet(string name, out IXProperty ent)
 {
     if (Exists(name))
     {
         ent = CreatePropertyInstance(PrpMgr, name, true);
         return(true);
     }
     else
     {
         ent = null;
         return(false);
     }
 }
コード例 #3
0
ファイル: EventsAddIn.cs プロジェクト: xarial/xcad
        public void Init(IXApplication app, IXDocument model)
        {
            m_Model = model;

            m_DescPrp = m_Model.Properties["Description"];
            m_D1Dim   = m_Model.Dimensions["D1@Sketch1"];

            m_Model.Closing += OnModelClosing;
            m_Model.Selections.NewSelection += OnNewSelection;

            m_DescPrp.ValueChanged += OnPropertyValueChanged;
            m_D1Dim.ValueChanged   += OnDimensionValueChanged;
        }
コード例 #4
0
        public bool TryGet(string name, out IXProperty ent)
        {
            var prp = GetOrPreCreate(name);

            if (prp.IsCommitted)
            {
                ent = prp;
                return(true);
            }
            else
            {
                ent = null;
                return(false);
            }
        }
コード例 #5
0
        protected virtual void DeleteProperty(IXProperty prp)
        {
            if (m_App.IsVersionNewerOrEqual(Enums.SwVersion_e.Sw2014))
            {
                var delRes = (swCustomInfoDeleteResult_e)PrpMgr.Delete2(prp.Name);

                if (delRes != swCustomInfoDeleteResult_e.swCustomInfoDeleteResult_OK)
                {
                    throw new Exception($"Failed to remove property '{prp.Name}'. Error code: {delRes}");
                }
            }
            else
            {
                const int SUCCESS = 0;

                if (PrpMgr.Delete(prp.Name) != SUCCESS)
                {
                    throw new Exception($"Failed to remove property '{prp.Name}'");
                }
            }
        }
コード例 #6
0
ファイル: AddIn.cs プロジェクト: xarial/xcad-examples
        private void OnModelSaving(IXDocument doc, DocumentSaveType_e type, DocumentSaveArgs args)
        {
            if (type == DocumentSaveType_e.SaveAs)
            {
                var tempDir = Path.GetTempPath();
                var ext     = Path.GetExtension(args.FileName);

                IXProperty titlePrp = null;

                if (doc is ISwDocument3D)
                {
                    titlePrp = (doc as ISwDocument3D).Configurations.Active.Properties.GetOrPreCreate(FILE_NAME_PRP);
                }

                if (titlePrp == null || !titlePrp.Exists())
                {
                    titlePrp = doc.Properties.GetOrPreCreate(FILE_NAME_PRP);
                }

                var prpVal = "";

                if (titlePrp.Exists())
                {
                    prpVal = titlePrp.Value?.ToString();
                }

                if (string.IsNullOrEmpty(prpVal))
                {
                    prpVal = Guid.NewGuid().ToString();
                }

                var destFile = Path.Combine(tempDir, prpVal + ext);

                args.FileName = destFile;
            }
        }
コード例 #7
0
 /// <summary>
 /// True if this property exists
 /// </summary>
 public static bool Exists(this IXProperty prp) => prp.IsCommitted;
コード例 #8
0
ファイル: EventsAddIn.cs プロジェクト: xarial/xcad
 private void OnPropertyValueChanged(IXProperty prp, object newValue)
 {
     //TODO: handle property change
 }
コード例 #9
0
        private bool Approve(XSubmittal submittal, Guid userId)
        {
            //Helpers.Log("PropertyValueSubmittalLayer", "PropertyValueSubmittal_Approve()");

            if (submittal != null)
            {
                foreach (XValue pv in submittal.PropertyValues)
                {
                    pv.Approved   = DateTime.Now;
                    pv.ApprovedBy = userId;
                    pv.IsDirty    = true;
                }

                submittal.Approved   = DateTime.Now;
                submittal.ApprovedBy = userId;
                submittal.IsDirty    = true;

                //List<SynchTrigger> triggers = this.CreateSynchTriggers(submittal);

                this.Save(submittal, false, userId);
                //new SynchTriggerDal().Save(triggers);

                List <Guid> propIds = new List <Guid>();
                foreach (XValue pv in submittal.PropertyValues)
                {
                    if (!propIds.Contains(pv.PropertyId))
                    {
                        propIds.Add(pv.PropertyId);
                    }
                }

                IDictionary <Guid, IXProperty> properties = new XPropertyDomain().GetObjectDictionary(propIds);

                foreach (XValue pv in submittal.PropertyValues)
                {
                    IXProperty prop = properties[pv.PropertyId];

                    if (prop != null)
                    {
                        XObjectRelation relation = null;

                        if ((prop.DataType == EDataType.Relation_ParentChild) || (prop.DataType == EDataType.Relation_ChildParent))
                        {
                            #region Relations

                            // need to create a relation for this item
                            relation = new XObjectRelation();

                            if (prop.DataType == EDataType.Relation_ParentChild)
                            {
                                relation.FromAssetId = pv.AssetId;
                                relation.ToAssetId   = new Guid(pv.Value);
                            }
                            else
                            {
                                relation.FromAssetId = new Guid(pv.Value);
                                relation.ToAssetId   = pv.AssetId;
                            }

                            relation.AssetRelationType = EObjectRelationType.ParentChild;

                            #endregion
                        }
                        else if (prop.DataType == EDataType.Dependency)
                        {
                            #region Dependency
                            relation                   = new XObjectRelation();
                            relation.FromAssetId       = pv.AssetId;
                            relation.ToAssetId         = new Guid(pv.Value);
                            relation.AssetRelationType = EObjectRelationType.Dependency;
                            #endregion
                        }
                        else if ((prop.DataType == EDataType.User) && (prop.RoleId.HasValue))
                        {
                            // TODO: Complete implementation of the dynamic role-based security

                            if (!string.IsNullOrEmpty(pv.Value))
                            {
                                Guid memberId;

                                if (Guid.TryParse(pv.Value, out memberId))
                                {
                                    XRoleDomain roleLayer = new XRoleDomain();
                                    if (!roleLayer.ContainsUser(prop.RoleId.Value, memberId))
                                    {
                                        //roleLayer.AddMemberToRole(memberId, prop.RoleId.Value, Constants.MemberIds.Admin);
                                    }
                                }
                            }

                            // determine if someone else is already in this value
                            // if they are, we need to determine whether or not they are in this role for another asset
                            // if not, remove the role association
                            // if they are, do nothing
                            // determine whether or not the newly-supplied user is in this role
                            // if not, add them to the role
                            // if they are, do nothing
                        }

                        if (prop.IsSystem && (prop.SystemType == ESystemType.AssetName))
                        {
                            bool renamed = new XObjectDomain <XObject>().Rename(pv.AssetId, pv.Value);
                        }

                        if (relation != null)
                        {
                            #region more relation stuff

                            relation.Created    = DateTime.Now;
                            relation.CreatedBy  = submittal.CreatedBy;
                            relation.Approved   = relation.Created;
                            relation.ApprovedBy = submittal.CreatedBy;

                            XObjectRelationDomain relationDal = new XObjectRelationDomain();

                            // a child can only have one parent
                            // delete any previous relations
                            if (prop.DataType == EDataType.Relation_ChildParent)
                            {
                                relationDal.RemoveExistingParentRelations(relation.FromAssetId, relation.AssetRelationType.GetHashCode());
                            }

                            if (!relationDal.AssetAssetRelationExists(relation.FromAssetId, relation.ToAssetId, relation.AssetRelationType.GetHashCode()))
                            {
                                relationDal.Save(relation);
                            }

                            // TODO: Need more logic in here.  Other cases
                            // What if relation is removed?

                            #endregion
                        }
                    }
                }

                return(new XObjectDomain().MarkAsUpdated(submittal.AssetId, submittal.CreatedBy));
            }

            return(false);
        }
コード例 #10
0
        public string GetData(IXDrawing drw, SourceData srcData)
        {
            var src = srcData.Source;

            using (var scopedDoc = new ScopedDocument(m_DocAdapter, drw, m_Logger, srcData.ReferencedDocument))
            {
                IEdmVault5 vault;

                var doc  = scopedDoc.Document;
                var conf = scopedDoc.Configuration;

                switch (src)
                {
                case Source_e.FilePath:
                    return(doc.Path);

                case Source_e.PartNumber:
                    if (conf == null)
                    {
                        throw new UserException("Part number can only be extracted from the configuration of part or assembly");
                    }
                    return(conf.PartNumber);

                case Source_e.CustomProperty:
                    IXProperty prp = null;

                    if (conf != null)
                    {
                        conf.Properties.TryGet(srcData.CustomPropertyName, out prp);
                    }

                    if (prp == null)
                    {
                        doc.Properties.TryGet(srcData.CustomPropertyName, out prp);
                    }

                    if (prp != null)
                    {
                        return(prp.Value?.ToString());
                    }
                    else
                    {
                        throw new UserException("Specified custom property does not exist");
                    }

                case Source_e.PdmVaultLink:
                    const string CONISIO_URL_ACTION = "explore";
                    FindRelativeVaultPath(doc.Path, out vault);
                    var file = vault.GetFileFromPath(doc.Path, out IEdmFolder5 folder);
                    return($"conisio://{vault.Name}/{CONISIO_URL_ACTION}?projectid={folder.ID}&documentid={file.ID}&objecttype={(int)file.ObjectType}");

                case Source_e.PdmWeb2Url:
                    if (string.IsNullOrEmpty(srcData.PdmWeb2Server))
                    {
                        throw new UserException("Url of Web2 server is not specified");
                    }

                    var vaultRelPath = FindRelativeVaultPath(doc.Path, out vault);
                    return($"{srcData.PdmWeb2Server}/{vault.Name}/{Path.GetDirectoryName(vaultRelPath).Replace('\\', '/')}?view=bom&file={Path.GetFileName(vaultRelPath)}");

                case Source_e.Custom:
                    return(srcData.CustomValue);

                default:
                    throw new NotSupportedException();
                }
            }
        }