示例#1
0
        internal SpecialPart(Matrix3d insertMatrix, string blockName, List <Property> cameraProperties)
        {
            lock (access_obj)
            {
                using (var ctx = new SteelServices.DocContext())
                {
                    List <Property> defaultData     = cameraProperties.Where(x => x.Level == ".").ToList <Property>();
                    List <Property> postWriteDBData = cameraProperties.Where(x => x.Level == "Z_PostWriteDB").ToList <Property>();

                    double scale = (double)defaultData.FirstOrDefault <Property>(x => x.Name == "Scale").InternalValue;

                    string handle = SteelServices.ElementBinder.GetHandleFromTrace();

                    Autodesk.AdvanceSteel.Modelling.SpecialPart specPart = null;
                    if (string.IsNullOrEmpty(handle) || Utils.GetObject(handle) == null)
                    {
                        specPart = new Autodesk.AdvanceSteel.Modelling.SpecialPart(insertMatrix);
                        specPart.SetBlock(blockName, scale);
                        if (defaultData != null)
                        {
                            Utils.SetParameters(specPart, defaultData);
                        }
                        specPart.WriteToDb();

                        if (postWriteDBData != null)
                        {
                            Utils.SetParameters(specPart, postWriteDBData);
                        }
                    }
                    else
                    {
                        specPart = Utils.GetObject(handle) as Autodesk.AdvanceSteel.Modelling.SpecialPart;

                        if (specPart != null && specPart.IsKindOf(FilerObject.eObjectType.kSpecialPart))
                        {
                            specPart.SetBlock(blockName, scale);
                            if (defaultData != null)
                            {
                                Utils.SetParameters(specPart, defaultData);
                            }

                            if (postWriteDBData != null)
                            {
                                Utils.SetParameters(specPart, postWriteDBData);
                            }
                        }
                        else
                        {
                            throw new System.Exception("Not a Special Part");
                        }
                    }

                    Handle = specPart.Handle;
                    SteelServices.ElementBinder.CleanupAndSetElementForTrace(specPart);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Set BlockName and Scale of Special Part
        /// </summary>
        /// <param name="steelObject">Input Dynamo Coordinate System</param>
        /// <param name="scale"> Input Special Part Scale</param>
        /// <param name="blockName"> Input Blockname to be used by SpecialPart</param>
        public static void SetBlock(SteelDbObject steelObject,
                                    string blockName,
                                    [DefaultArgument("1")] double scale)
        {
            using (var ctx = new SteelServices.DocContext())
            {
                string      handle = steelObject.Handle;
                FilerObject obj    = Utils.GetObject(handle);

                if (obj != null && obj.IsKindOf(FilerObject.eObjectType.kSpecialPart))
                {
                    Autodesk.AdvanceSteel.Modelling.SpecialPart specialPart = obj as Autodesk.AdvanceSteel.Modelling.SpecialPart;
                    specialPart.SetBlock(blockName, scale);
                }
                else
                {
                    throw new System.Exception("Failed to Get Special Part Object");
                }
            }
        }