Aller au contenu

Pragma

Membres
  • Compteur de contenus

    4
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Pragma a gagné pour la dernière fois le 12 août 2019

Pragma a eu le contenu le plus aimé !

Pragma's Achievements

Newbie

Newbie (1/14)

-4

Réputation sur la communauté

  1. Bonjour, Je suis en train de faire mes petits test pour comprendre les petit bouts de code que vous m'avez donné. Je crois m'en sortir avec la plupart sauf : Le passage avec getattributes ... Mon petit test : [...] (setq acadObj (vlax-get-acad-object)) (setq doc (vla-get-ActiveDocument acadObj)) (setq Bl (vla-get-blocks doc)) (while (<= n NbrPage) (setq Nom_Onglet (car (nth n lst))) (setq Num_Onglet (cdr (nth n lst))) (vlax-for bl1 (vla-item Bl "Cartouche") (setq at1 (vlax-invoke bl1 'get-attributes) ) (print at1) (setq n (1+ n)) ) ) [...] Je ne suis pas sûr de comprendre ce que fais cette ligne : (setq at1 (vlax-invoke bl1 'get-attributes)) J'ai vu ici : https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-3E8E1756-F45D-4CCE-838B-00FBC0374278-htm.html Qu'ils utilisent (setq varAttributes (vlax-variant-value (vla-GetAttributes blockRefObj))) Peux importe ce que je test j'ai l'erreur suivante : erreur: Le serveur ActiveX a renvoyé l'erreur: nom inconnu: GetAttributes Qu'est censé retourner (vlax-invoke bl1 'get-attributes) ? une liste des attributs de bl1 ? (ça m'arrangerait :) ) Je pense que je n'ai pas encore saisi cette partie ou qu'il me manque une notion importante en LISP ... Auriez vous une idée de ce que j'ai loupé ? Cordialement,
  2. Merci beaucoup pour ces réponses ! Je fonce décortiquer tout ça !!!! Je ne manquerais pas de revenir vers vous si j'ai d'autres questions ;)
  3. Merci Pour cette réponse rapide ! Je suis aller fouiner du coté des expressions DIESEL et j'ai trouvé des petites choses qui me seront bien utiles, donc merci pour le conseil :) Notamment CTAB pour récupérer le nom de l'onglet et l'afficher dans un bloc. Et ça c'est cool quand on a à écrire le nom de la présentation qu'une seule fois. Car oui, mes onglets sont nommés avec des petits nom bien à moi et non avec 01, 02, 03 ... Je sais que ce mode de fonctionnement en fait hurler certains ... mais à chacun sa façon de travailler ;) Puisqu'on parle des champs avec expression DIESEL voici quelques problèmes dont je cherche la solution en ce moment : - A : Récupérer dans un champs le nombre d'onglet (Pb de pagination). J'en suis à une solution de ce type : $(getvar,NbrPage) avec NbrPage défini en LISP par (setq NbrPage (length (layoutlist))) mais je n'arrive pas encore à créer un LISP qui calcule NbrPage puis lance la mise à jour des champs avec la prise en compte des variables définies en amont. - B : Récupérer dans un champs la position de l'onglet par rapport aux autres (tj pb de pagination). Et là je ne connais pas encore assez bien la gestion des onglets et la façon dont ils sont définis dans Autocad pour savoir si c'est possible. - C : Récupérer dans un champs (lui même dans un bloc) la valeur d'un champs qui se trouve dans un autre bloc ... sorte de champ-ception ... mais là je n'ai pas encore commencé à chercher !! Pour en revenir à mon problème initial : L'idée est de pouvoir cibler précisément un attribut et en changer sa valeur. Je pars aujourd'hui de l'hypothèse que le bloc qui contient cet attribut est unique dans la présentation (par la suite je me poserai le problème de la multiplicité de ce bloc). Pour modifier les valeurs d'un bloc dynamique depuis une application excel j'avais écrit ceci (à titre d'exemple) : VBA ********************************************************************************** Set blockRefObj = MonPlan.ModelSpace.InsertBlock(insertionPnt, CheminBloc, 1, 1, 1, 0) varPropDyn = blockRefObj.GetDynamicBlockProperties For i = LBound(varPropDyn) To UBound(varPropDyn) If varPropDyn(i).PropertyName = "L1X" Then varPropDyn(i).Value = L1X If varPropDyn(i).PropertyName = "L2X" Then varPropDyn(i).Value = L2X If varPropDyn(i).PropertyName = "L1Y" Then varPropDyn(i).Value = L1Y If varPropDyn(i).PropertyName = "L2Y" Then varPropDyn(i).Value = L2Y [...] ********************************************************************************** VBA Je me demande s'il est possible d'avoir une approche similaire en LISP ou si je suis complètement à côté de la plaque avec ce mode de fonctionnement ... D'après ce que j'ai compris des formules DIESEL, leur utilisation supposerai que le champs concerné soit toujours remplis par le même calcul (la même expression DIESEL) or je veux pouvoir donner à l'attribut une valeur dont la méthode de calcul change ... Et j'en suis arriver à la conclusion que trouver une solution à mon pb A cité plus haut pourrait m'aider dans ma quête !! Je ne sais pas si je me fait comprendre ... En tous cas, merci encore pour votre première réponse et espérant que vous pourrez m'aider d'avantage :)
  4. Bonjour, Je suis nouveau sur ce forum. C'est la première fois que j'écris un sujet, que ce soit ici ou ailleurs. N'hésitez donc pas à me reprendre si je fais quelque chose de travers. J'ai l'habitude de frafouiller sur internet pour trouver les réponses à mes questions mais, compte tenu de ma deadline sur ce sujet, je me suis dit qu'il étant peut être temps d'accepter l'aide des plus érudits. Je commence en LISP. D'habitude pour ce qui est de l'automatisation AUTOCAD j'utilise VBA pour des raisons de transfert de donnée avec d'autre application comme Excel. Ici je souhaite créer une routine directement sur AutoCAD. Ce que j'ai : - Un dessin Autocad dans lequel j'ai plusieurs présentations - Sur Chaque présentation se trouve un bloc - Le même bloc, même nom, mêmes attributs ... - Ce bloc ne se trouve qu'une seule fois sur chaque présentation - Ce bloc possède plusieurs attributs Ce que je veux faire : - Changer la valeur de deux des attributs du blocs - L'un prendra toujours la même valeur - L'autre prendra une valeur différente selon qu'il soit sur telle ou telle présentation. [Pour la suite, je ne sais pas si ma façon de raisonner correspond à la façon de travailler en LISP ...] Je veux donc parcourir les présentations une à une. (J'imagine un "for each" ...) Trouver, dans cette présentation, le bloc portant le nom du bloc cible. Parcourir les attribut de ce bloc et, lorsque l'étiquette correspond à l'attribut que je veux modifier, changer la valeur de cet attribut par une autre valeur. Je poste ce message avec l'état actuel de mes connaissance en LISP (Cad pas grand chose). Je continue bien sûr à chercher de mon côté et posterais au fur et à mesure mes avancées. D'avance, merci.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité