Code Red => .NET => Topic started by: pBe on April 11, 2019, 08:00:29 AM

Title: Sheet CustomProperty
Post by: pBe on April 11, 2019, 08:00:29 AM
Need help with this:

Code - C#: [Select]
  1. private void TheSetSheetCustomProperty(IAcSmPersist owner, Dictionary<string, string> kval)
  2.         {
  3.             Autodesk.AutoCAD.ApplicationServices.Document activeDocument;
  4.             activeDocument = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  6.             // Create a reference to the Custom Property Bag
  7.             AcSmCustomPropertyBag customPropertyBag = default(AcSmCustomPropertyBag);
  9.             if (owner.GetTypeName() == "AcSmSheet")
  10.             {
  11.                 AcSmSheet sheet = (AcSmSheet)owner;
  12.                 customPropertyBag = sheet.GetCustomPropertyBag();
  13.                 IAcSmEnumProperty enumeratorProperty;
  14.                 enumeratorProperty = customPropertyBag.GetPropertyEnumerator();
  16.                 AcSmCustomPropertyValue customPropertyValue = null;
  17.                 enumeratorProperty.Next(out string name, out customPropertyValue);
  19.                 while (!(customPropertyValue == null))
  20.                 {
  21.                    // if (name == propertyName)
  22.                    if  (kval.ContainsKey(name) == true)
  23.                     {
  24.                         customPropertyValue.SetValue(kval[name]); // <-- This
  25.                         customPropertyBag.SetProperty(name, customPropertyValue); // <-- and this
  26.                     }
  27.                     enumeratorProperty.Next(out name, out customPropertyValue);
  28.                 }
  29.             }
  30.         }

The IF's evaluates to TRUE but it's not setting the string value. What am I missing?

Yes, the custom property name exists on the DST file.

Title: Re: Sheet CustomProperty
Post by: Jeff H on April 12, 2019, 05:39:59 PM
I've use routines regularly that modify custom sheet set properties & I use the AcSmCustomPropertyValue.SetProperty() property method. I dont think Ive used the AcSmCustomPropertyBag.SetProperty(), but looks like it would be setting the property back to original value in your example.

Code - C#: [Select]
  1.                         customPropertyValue.SetValue(kval[name]); // <-- Update property
  2.                         customPropertyBag.SetProperty(name, customPropertyValue); // <--Set back to original value
Title: Re: Sheet CustomProperty
Post by: pBe on April 15, 2019, 02:21:05 AM
Hi Jeff,
Thank you for your reply.

I added that line thinking it would "regen" or update the value after setting the desired string. Now I commented on this line.
Code - C#: [Select]
  1. customPropertyBag.SetProperty(name, customPropertyValue)
It doesn't make a difference.

As for  AcSmCustomPropertyValue.SetProperty(). That was my first thought, but its not a valid definition for AcSmCustomPropertyValue.
Do i need to invoke a save?
Code - C#: [Select]
  1. AcSmCustomPropertyValue.Save

Is there a similar function in c# that retrieves an item from a sheet set definition much like the l method below?
Code - Auto/Visual Lisp: [Select]
  1. vla-item Sheets "The Custom Property Name"

Thank you
Title: Re: Sheet CustomProperty
Post by: Jeff H on April 15, 2019, 01:55:20 PM
I will double check but from I remember you call save on the database.
Title: Re: Sheet CustomProperty
Post by: Jeff H on April 15, 2019, 05:27:06 PM
Also I wrote a little library that helps grabbing the sheets, etc.... where you dont have do the old style of using enumerators and just grab them in a for each loop from the sheet, will dig it out this week.

Title: Re: Sheet CustomProperty
Post by: pBe on April 22, 2019, 12:51:04 PM
Thank you for your help Jeff.

I found out what's wrong. I had this line at the bottom of the code.
Code - C#: [Select]
  1. SyncProperties(sheetSetDatabase)
Passing the values from the Custom property down the subset line. I picked it up from AU09_Presentation_CP318-4

My bad.

A different item.
I use this to open a sheet set file
Code - C#: [Select]
  1. doc.SendStringToExecute("._-opensheetset " + yourSheetSetFilePath + "\n", false, false, true);
Question now is. How do close an opened sheet set fiel from the Sheetset Manager?

Title: Re: Sheet CustomProperty
Post by: Jeff H on April 23, 2019, 02:26:35 PM
I'm sure you can, but I never done that. I typically require just one sheetset to be open in the sheetsetmanager before the code executes.