Modification automatique

Bonjour à tous.

Je suis un utilisateur de SW avec des profiles existant  (historique).

pour ma part je les trouves un peut 'vieillot'.

je voudrais automatiser plusieur choses :

  • la mise à jour automatique de l'autreur, par exemple avec le nom de la session windows. (Environ("USERNAME"))
  • la création automatique d'un paramêtre Spécifiques à la configuration du nom 'Code Produit'
  • et 3ème chose, dans certains cas ou on reprend une pièce existante comme base existante, je voudrais remplcer la date dans le cartouche qui caller sur le paramètre de la date de création du fichier, par la date actuel.

avez vous des exemples de code ou des solutions pratique ?

 

Merci d'avance.

 

Jey 

Pour la mise à jour des dates, j'ai renseigné dans mon cartouche la date de dérnière impression

Comme ça le plan a toujours la bonne date du jour.

Pour le reste, si tu as les outils mycadtools cela pourrait être utile

5 « J'aime »

Bonjour,

 

En ce qui concerne la date actuelle, je met comme propriété lier à l'annotation" SW-Date Courte(ShortDate)" soit la date du jour quand on l'ouvre. Mais il y'a aussi date longue etc...

 

En espérant que cela puisse aider

2 « J'aime »

pas mal comme solution Bart☺

merci

Pour ce qui est de l'édition de ton nom dans le cartouche,

il faut éditer ce dernier, ajouter une note qui sera à l'emplacement du nom de l'auteur dans le cartouche, appliquer une propriété à cette note. Créer une propriété au fichier, affecter un nom à cette propriété, dans l'exemple qui suit c'est "Session", mettre type "texte" et mettre pour valeur $PRP:"Dernier enregistrement par", cliquer sur ok.

 

Dans la liste Lier à la propriété, il suffit de prendre la propriété Session et la note se transformera par le nom de l'utilisateur du pc.

 

Voili


tuto_mise_a_jour_auto_de_lauteur.png

Bonjour,

moi j'ai mis en place un formulaire de propriétés personnalisées, la date se sélectionne dans un petit calendrié très pratique, le noms des desinnateurs / vérificateurs / approbateur se sélectionnent dans des listes déroulantes, le tout jusqu'à l'indice C pour pouvoir faire évoluer rapidement d'anciens plans. Le reste se complète automatiquement, noms du plan = noms du fichier, ....

Cette méthode permet de compléter rapidement tout les cartouche de toutes les feuilles de façon identique, et du coups pour avoir des feuilles différentes j'ai du faire un cartouche 3D et il faut jongler avec les calques pour cacher certaines propriétés personnalisées. Mais nous n'avons pas besoin de travailler sur plusieurs folios en interne, donc cette méthode est vraiment très practique, car nous modifions régulièrement des anciens plans..

2 « J'aime »

p.guyader : merci, mais j'ai deja un cartouche qui ce met a jour automatiquement.

ce que je vais modifier est le nom de l'autreur qui ce trouve dans les propriété du document.

ci possible à l'aide d'une macro, serai bien.

 

a.leblanc : aurais tu quelques exemples ?

jey

Re-bonjour

personne n'a une solution pour ajouter un paramêtre Spécifiques à la configuration du nom 'Code Produit' ?

ni pour la date ?

 

Jey

Bonjour à tous.

De retour de vancance, je relance le problème.

  • la mise à jour automatique de l'autreur, par exemple avec le nom de la session windows. (Environ("USERNAME")).
    - La version 'dernier utilisateur' est bien mais ne me convient pas.
    - Je voudrais pouvoir mettre à jour le champ en 1 clic
  • la création automatique d'un paramêtre Spécifiques à la configuration du nom 'Code Produit'
    surtout si je reprend des pièces historique.
  • Pour la MAJ de la date, le paramètre 'date d'impression' est pas mal mais ne fonctionne pas sur les plan historique.
    a.leblanc : si tu as un exemple que je pourais adapter, se serai cool.

Merci à tous 

Bonjour,
Comme a.leblanc, j'ai mis en place un formulaire de propriétés personnalisées sous la forme d'un programme externe appelé via une macro, ce formulaire peut aussi être la macro directement suivant la complexité de celui-ci.
Ce formulaire permet de créer toutes les propriétés personnalisées sur un nouveau 3D mais aussi de récupérer toutes celles des 3D existants et de les modifier si nécessaire.
J'ai créé plusieurs propriétés personnalisées (une trentaine dans mon cas) et notament l'auteur, le créateur de la révison (celui-ci n'étant pas nécessairement l'auteur initial), la date de création, la date de révision, la désignation de la révision, la désignation, etc... Je récupère aussi la matière, le nom de fichier (identique au code article dans mon cas), la masse, etc... et bien sûr je remplis mon cartouche du 2D avec ces propriétés.
Les propriétés Auteur et CréateurRévision sont bien sûr égales au UserName du PC, les dates de création et de révision sont celles du jour (seulement si vide au moment du chargement de la macro pour la date de création) et modifiable via un petit calendrier (pour la gestion de l'historique ou les copies de pièce).
Pour gérer les propriétées personnalisées par API il faut aller voir http://help.solidworks.com/2016/English/api/sldworksapi/SOLIDWORKS.Interop.sldworks~SOLIDWORKS.Interop.sldworks.IConfiguration~CustomPropertyManager.html , tout le reste n'est que de la programmation et des tests suivant ce que tu veux faire.

Cordialement,


capture-dr.jpg
2 « J'aime »

bonjour,

Moi je rempli le tout dans la pièce via un formulaire et quand je crée ma MEP elle se rempli automatiquement grace aux liens crées entre eux.

1 « J'aime »

Pour faire suite à mon post précédent, voici 3 exemples de fonctions (en C#) permettant de créer, récupérer et effacer des propriétés personnalisées, attention ce ne sont que des exemples avec des liens sur des textBox issus d'un 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);
}
}

Cordialement,

Merci à vous.

Vous m'avez tout un tas de piste à suivre.

Je vais examiner tout ça et essayer d'en tirrer quelque chose.

AU besoin je vous recontacterais.

 

Merci

 

Jey

Salut,

SmartPropeties pourrait être un début de solution. Tu pourras en plus gérer les proprietés suivant la configuration de ta pièce/assemblage comme tu demandais.

2 « J'aime »