Ik ben een SW gebruiker met bestaande (geschiedenis) profielen.
Van mijn kant vind ik ze een beetje 'ouderwets'.
Ik wil graag een aantal zaken automatiseren:
Automatische update van de browser, bijvoorbeeld met de naam van de Windows-sessie. (Environ("GEBRUIKERSNAAM"))
Automatische aanmaak van een configuratiespecifieke parameter van de naam 'Productcode'
En 3e ding, in sommige gevallen waarin we een bestaand onderdeel als een bestaande basis nemen, zou ik de datum in de cartouche die aanroeper op de parameter van de datum van aanmaak van het bestand, willen vervangen door de huidige datum.
Heeft u codevoorbeelden of praktische oplossingen?
Wat betreft de huidige datum, ik heb als een eigendomslink naar de annotatie "SW-Date Courte(ShortDate)" geplaatst, d.w.z. de huidige datum wanneer je deze opent. Maar er is ook een lange datum etc...
Wat betreft het bewerken van uw naam in de cartridge,
Je moet de laatste bewerken, een notitie toevoegen die op de plaats komt van de naam van de auteur in het titelblok, een eigenschap toepassen op deze notitie. Maak een eigenschap voor het bestand, wijs een naam toe aan deze eigenschap, in het volgende voorbeeld is het "Sessie", zet type "tekst" en stel de waarde in $PRP: "Laatst opgeslagen door", klik op ok.
In de lijst Koppelen aan eigenschappen neemt u gewoon de eigenschap Sessie en de notitie verandert in de naam van de pc-gebruiker.
Ik heb een formulier voor aangepaste eigenschappen opgezet, de datum is geselecteerd in een kleine kalender, heel praktisch, de namen van de ontwerpers / verificateurs / goedkeurders worden geselecteerd in vervolgkeuzelijsten, allemaal tot aan de C-index om snel oude plannen te kunnen ontwikkelen. De rest wordt automatisch ingevuld, plannamen = bestandsnamen, ....
Met deze methode kun je snel alle cartridges van alle vellen op dezelfde manier voltooien, en om verschillende vellen te hebben, moest ik een 3D-cartridge maken en je moet jongleren met de lagen om enkele aangepaste eigenschappen te verbergen. Maar we hoeven niet in eigen beheer aan meerdere folio's te werken, dus deze methode is erg handig, omdat we regelmatig oude plannen bewerken.
Terug uit de verovering, blaas ik het probleem nieuw leven in.
Automatische update van de browser, bijvoorbeeld met de naam van de Windows-sessie. (Environ("GEBRUIKERSNAAM")). - De versie 'laatste gebruiker' is goed, maar past niet bij mij. - Ik wil graag het veld in 1 klik kunnen updaten
Automatische aanmaak van een configuratiespecifieke parameter van de naam 'Productcode' vooral als ik historische stukken gebruik.
Voor de update van de datum is de instelling 'afdrukdatum' niet slecht, maar werkt historisch gezien niet. A.Leblanc : Als je een voorbeeld hebt dat ik zou kunnen aanpassen, zou dat cool zijn.
Hallo Net als a.leblanc heb ik een formulier voor aangepaste eigenschappen opgezet in de vorm van een extern programma dat via een macro wordt aangeroepen, deze vorm kan ook direct de macro zijn, afhankelijk van de complexiteit ervan. Met dit formulier kunt u alle aangepaste eigenschappen op een nieuwe 3D aanmaken, maar ook alle eigenschappen van de bestaande 3D ophalen en indien nodig wijzigen. Ik heb verschillende aangepaste eigenschappen gemaakt (ongeveer dertig in mijn geval) en in het bijzonder de auteur, de maker van de revisie (hij is niet noodzakelijkerwijs de oorspronkelijke auteur), de aanmaakdatum, de revisiedatum, de revisieaanduiding, de aanduiding, enz... Ik krijg ook het materiaal, de bestandsnaam (identiek aan de artikelcode in mijn geval), de massa, enz... en natuurlijk vul ik mijn 2D cartridge met deze eigenschappen. De eigenschappen Author en ReviewCreator zijn uiteraard gelijk aan de gebruikersnaam van de PC, de aanmaak- en revisiedata zijn die van de dag (alleen als deze leeg is op het moment van laden van de macro voor de aanmaakdatum) en kunnen worden bewerkt via een kleine kalender (voor geschiedenisbeheer of deelkopieën). Om aangepaste eigenschappen via API te beheren, moet je naar http://help.solidworks.com/2016/English/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IConfiguration~CustomPropertyManager.html gaan, al het andere is gewoon programmeren en testen, afhankelijk van wat je wilt doen.
Ik vul alles in de kamer in via een formulier en wanneer ik mijn MEP aanmaak , wordt het automatisch ingevuld dankzij de koppelingen die tussen hen worden gemaakt.
Om mijn vorige bericht op te volgen, hier zijn 3 voorbeelden van functies (in C#) om aangepaste eigenschappen te maken, op te halen en te verwijderen, wees voorzichtig, dit zijn slechts voorbeelden met links op tekstvakken van een UserForm:
// Exemple de fonction pour créer les propriétés personnalisées
private void CreerProprietes()
{
try
{
ModelDoc2 swModel = null;
swModel = ((ModelDoc2)(Program.swapp.ActiveDoc));
CustomPropertyManager PropMgr = null;
CustomPropertyManager PropMgr0 = null;
ConfigurationManager swConfigMgr;
Configuration swConfig;
swConfigMgr = swModel.ConfigurationManager;
swConfig = swConfigMgr.ActiveConfiguration;
int nb = 3;
string[] PropName = new string[nb];
string[] PropVal = new string[nb];
int i = 0;
PropName[i] = CodeArticle;
PropVal[i] = textBox1.Text.Trim();
i++;
PropName[i] = CreateDate;
if (textBox9.Text == "")
{
PropVal[i] = System.DateTime.Today.ToShortDateString();
}
else
{
PropVal[i] = textBox9.Text.Trim();
}
i++;
PropName[i] = Dessinateur;
if (textBox19.Text == "")
{
PropVal[i] = System.Environment.UserName.ToUpperInvariant();
}
else
{
PropVal[i] = textBox19.Text;
}
i++;
PropMgr0 = swModel.Extension.get_CustomPropertyManager("");
int value = 0;
for (int m = 0; m <= (nb - 1); m++)
{
value = PropMgr0.Add2(PropName[m], (int)swCustomInfoType_e.swCustomInfoText, PropVal[m]);
}
}
catch (Exception)
{
MessageBox.Show("Erreur lors de la création des propriétés personnalisées, Contactez l'administrateur.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
// Exemple de fonction pour récupérer les propriétés personnalisées
private void ObtenirProprietes()
{
try
{
ModelDoc2 swModel = null;
swModel = ((ModelDoc2)(Program.swapp.ActiveDoc));
CustomPropertyManager PropMgr = null;
ConfigurationManager swConfigMgr;
Configuration swConfig;
swConfigMgr = swModel.ConfigurationManager;
swConfig = swConfigMgr.ActiveConfiguration;
int nNbrProps;
int j;
object[] vPropNames;
string valOut;
string resolvedValOut;
int custPropType;
PropMgr = swConfig.CustomPropertyManager;
nNbrProps = PropMgr.Count;
vPropNames = (object[])PropMgr.GetNames();
for (j = 0; j <= nNbrProps - 1; j++)
{
PropMgr.Get2(vPropNames[j].ToString(), out valOut, out resolvedValOut);
custPropType = PropMgr.GetType2(vPropNames[j].ToString());
if (vPropNames[j].ToString() == CodeArticle)
{
textBox1.Text = resolvedValOut.ToString();
}
if (vPropNames[j].ToString() == CreateDate)
{
textBox9.Text = resolvedValOut.ToString();
}
if (vPropNames[j].ToString() == Dessinateur)
{
textBox19.Text = resolvedValOut.ToString();
}
}
}
catch (Exception)
{
MessageBox.Show("Erreur lors de l'obtention des propriétés personnalisées, Contactez l'administrateur.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
// Exemple de fonction pour effacer toutes les propriétés personnalisées
private void EffacerProprietes()
{
try
{
ModelDoc2 swModel;
swModel = ((ModelDoc2)(Program.swapp.ActiveDoc));
CustomPropertyManager PropMgr;
ConfigurationManager swConfigMgr;
Configuration swConfig;
swConfigMgr = swModel.ConfigurationManager;
swConfig = swConfigMgr.ActiveConfiguration;
PropMgr = swConfig.CustomPropertyManager;
int nNbrProps;
object[] vPropNames;
nNbrProps = PropMgr.Count;
vPropNames = (object[])PropMgr.GetNames();
int h;
for (h = 0; h <= nNbrProps - 1; h++)
{
object[] configNameArr = null;
string configName = null;
int j = 0;
configNameArr = (object[])swModel.GetConfigurationNames();
for (j = 0; j <= configNameArr.GetUpperBound(0); j++)
{
configName = (string)configNameArr[j];
swConfig = (Configuration)swModel.GetConfigurationByName(configName);
PropMgr = swModel.Extension.get_CustomPropertyManager(configName);
PropMgr.Delete(vPropNames[h].ToString());
}
PropMgr = swModel.Extension.get_CustomPropertyManager("");
PropMgr.Delete(vPropNames[h].ToString());
}
return;
}
catch (Exception)
{
MessageBox.Show("Erreur lors de l'effacement des propriétés personnalisées, Contactez l'administrateur.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
SmartPropeties zou het begin van een oplossing kunnen zijn. U zult ook in staat zijn om de eigenschappen te beheren volgens de configuratie van uw onderdeel/assemblage zoals u hebt gevraagd.