AnsweredAssumed Answered

C# macro to add new custom properties

Question asked by Gene Massion on Oct 12, 2016
Latest reply on Oct 15, 2016 by Amen Allah Jlili

I’m in the  process of trying to learn how to program Solidworks macros in C#.  I am pretty comfortable with C# but am having some difficulty with the SW API. My first task is pretty easy, I just want to write a macro that will allows me to add some predefined custom properties to every part in an assembly.  First step is to just add the custom properties to one, already open SW part.  I thought this example http://help.solidworks.com/2014/English/api/sldworksapi/Get_Custom_Properties_for_Configuration_Example_CSharp.htm was pretty close to what I need for my first step but I don’t seem to be able to get it to run.  I just copied it off the web page into Visual Studio Tools for Applications.   It compiles fine but I get a “The operation could not be completed. The parameter is incorrect” error. 

 

Any ideas would be greatly appreciated.  Thanks

 

Here's the code from the example

 

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;
using System;
using System.Diagnostics;
namespace GetCustProperties_CSharp.csproj
{
   
partial class SolidWorksMacro
    {

       
ModelDoc2 swModel;
       
Configuration config;
       
CustomPropertyManager cusPropMgr;
       
int lRetVal;
       
object[] vPropNames;
       
object vPropNamesObject;
       
object vPropTypes;
       
object vPropValues;
       
string ValOut;
       
string ResolvedValOut;
       
bool wasResolved;
       
object resolved;
       
int nNbrProps;
       
int j;

       
int custPropType;

       
public void Main()
        {
            swModel = (
ModelDoc2)swApp.ActiveDoc;
            config = (
Configuration)swModel.GetActiveConfiguration();

            cusPropMgr = config.CustomPropertyManager;

            lRetVal = cusPropMgr.Add3(
"ADATE", swCustomInfoType_e.swCustomInfoDate, "4-13-59", swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd);
            lRetVal = cusPropMgr.Get5(
"ADATE", false, out ValOut, out ResolvedValOut, out wasResolved);
            lRetVal = cusPropMgr.Set2(
"ADATE", "4-13-89");

           
// Get the number of custom properties for this configuration
            nNbrProps = cusPropMgr.Count;
           
Debug.Print("Number of properties for this configuration:            " + nNbrProps);

           
// Get the names of the custom properties
            vPropNames = (object[])cusPropMgr.GetNames();

           
// For each custom property, print its type, value, and resolved value
            for (j = 0; j <= nNbrProps - 1; j++)
            {
                lRetVal = cusPropMgr.GetAll2(
ref vPropNamesObject, ref vPropTypes, ref vPropValues, ref resolved);
                custPropType = cusPropMgr.GetType2((
string)vPropNames[j]);
               
Debug.Print("    Name, swCustomInfoType_e value, and resolved value:  " + vPropNames[j] + ", " + custPropType + ", " + ResolvedValOut);
            }

            lRetVal = cusPropMgr.Delete2(
"ADATE");
           
// Get the number of custom properties for this configuration
            nNbrProps = cusPropMgr.Count;
           
Debug.Print("Number of properties for this configuration:            " + nNbrProps);
        }
       
public SldWorks swApp;
    }
}

Outcomes