API Solidworks Ajout propriété pièce puis la voir dans le mise en plan

Bonjour,

J'ai une macro qui ajoute une propriété "Nom_Modificateur" dans une part, Le problème est que lorsque j'ouvre ma mise en plan (toujours dans la macro) le fond de plan de se modifie pas, je suis obligé d'éditer le fond de plan puis de éclater le bloc et la mes donné apparaisse. A savoir si dès le début j'éclate le bloc, la macro marche parfaitement. Mais je ne veux pas éclater le bloc pacque j'ai une autre macro qui écrit aussi des propretés qui sont dans le cartouche et qui fonctionne alors que le code est identique.

voici le code:

Set Part = swApp.OpenDoc6(Fichier, 1, 0, "", longstatus, longwarnings)
    Set swApp = Application.SldWorks
    'on récupére le document actif
    Set swModel = swApp.ActiveDoc

swCustPropMgr.Add3 "Type_Validation", swCustomInfoText, "", 2
swCustPropMgr.Add3 "Date_Validation", swCustomInfoText, "", 2
swCustPropMgr.Add3 "Indice", swCustomInfoText, chaine, 2
If chaine = "02" Then
swCustPropMgr.Add3 "Raison_Modification_A02", swCustomInfoText, Raison, 2
swCustPropMgr.Add3 "Nom_Modificateur_A02", swCustomInfoText, Nom_Modif, 2
ElseIf chaine = "03" Then
swCustPropMgr.Add3 "Raison_Modification_A03", swCustomInfoText, Raison, 2
swCustPropMgr.Add3 "Nom_Modificateur_A03", swCustomInfoText, Nom_Modif, 2
ElseIf chaine = "04" Then
swCustPropMgr.Add3 "Raison_Modification_A04", swCustomInfoText, Raison, 2
swCustPropMgr.Add3 "Nom_Modificateur_A04", swCustomInfoText, Nom_Modif, 2
End If

swApp.CloseDoc FileName

Merci 

Bonjours,

 

Compliquer de travailler avec si peu de donner, tu peu mettre le code de ton autre macro ? Quand tu lance l'autre tu es déjà sur la mise en plan, ou elle ouvre aussi un document ?

Bonjour,

Il suffit d'éditer le fond puis d'éclater votre bloc et de re-enregister le modèle de fond de plan car un bloc et par défaut verrouillé en modification..

2 « J'aime »

Merci de ta réponse,

Je vous met la macro complète, je la lance depuis un assemblage-->

-Il faut sélectionner un composant depuis l'arbre des composants puis lancer la macro

(Je sais que la macro n'est pas optimisé mais avant de l'optimisé je cherche a que tous fonctionne)

 


3_prise_dindice.swp

J'ai plusieurs formats de plan .slddrt(A4H, A4V, A3H...) Tous ces formats ont un bloc lier a un fichier bloc pour définir tous ce qui'il doit y avoir dans le cartouche(fichier .sldblk). Grace a cela, si je veux ajout un élément je l'ajoute dans le fichier sldblk et tous mes format sont modifié. C'est mieux que faire la modif sur tous les formats de plan (J'en est 30)

Alors si mon fond de plan a un bloc éclaté, Je vais perdre le lien?

Oui vous perdez le lien car il sera éclaté..

Bonjour,

Tu es vraiment obligé d'éclater le bloc pour que les modifications soient prises en compte ou une simple reconstruction est-elle suffisante ?

Pour info, les modifications apportées par macro nécessitent assez souvent une reconstruction pour être prises en compte, c'est le fameux CTRL + Q qui est un peu un réflexe.

Cordialement,

1 « J'aime »

d.roger, La reconstruction ne fait rien

La macro ne peut pas fonctionnée avec le bloc car le bloc est protégé en écriture à moins de rajouter une case directement dedans nom du modificateur et de renseigner dans une propriété de la pièce..

Justement c'est exactement ce que je fais, je rajoute une propriété perso a mon fichier 3d et dans mon cartouche j'ai le nom de cette propriété qui sont les mêmes. Mais mon problème est que elle ne s'affiche pas. Et même si au préalable j'éclate mon bloc, je doit quand même éditer le fond de plan pour que ça apparaisse

 

Et comment s'affiche les autres propriétés dans le cartouche ?

De la même manière et il y a aucun problème(Voir pièce jointe). C'est pour ça que je comprend pas du tout


propriete_piececartouche.png

Mais c'est  là qu'il faut rajouter la propriété "Nom_Modificateur" et après créer le lien dans le bloc.

1 « J'aime »

Oui c'est ce que je fait, lorsque je regarde mes propriété pièce, elles sont bien ajouter, mais rien dans le cartouche alors qu'il y a un lien

Mais là dans vos propriété il n'y a pas "Nom_Modificateur" d'après l'imprim écran que vous avez fait...

Comme le dit ac cobra, la variable ne semble pas exister donc il faudrait que ton code corresponde a ca :

swCustPropMgr.Add3 "Type_Validation", swCustomInfoText, "", 0
swCustPropMgr.Add3 "Date_Validation", swCustomInfoText, "", 0
swCustPropMgr.Add3 "Indice", swCustomInfoText, chaine, 0
If chaine = "02" Then

...

 

Sur le lien ci-dessous tu vois que les variables doivent exister si tu met un "2" a la fin, il remplace al valeur seulement si cette dernière existe. Avec un 0 il crée la variable si elle es inexistante.

http://help.solidworks.com/2018/english/api/swconst/SOLIDWORKS.Interop.swconst~SOLIDWORKS.Interop.swconst.swCustomPropertyAddOption_e.html

 

Par contre attention il faut prévoir un incrément en allant, sinon a la première utilisation il va crée le A02 - A03 .... et a la prochaine utilisation vue qu'elle sont déjà crée il ne fera rien. et si tu met "1" il va réecrire a chaque fois dessus donc vous n'aurez plus d'historique.

J'ai résolu mon problème. Lors de la première macro qui insère des donnée je met toute mes future valeur de prise d'indice et je ne sais pas pourquoi, quand il a déjà créer une valeur, la deuxième fois il fait la mise a jour tout seul. 

Merci pour toute vos réponse, je sais que tous n'est pas claire...