Aller au contenu

opération dans bloc


lovecraft

Messages recommandés

Tu peux essayer une macro de ce genre:

 

^C^C_.'attdia;0;_.'users1;\_.'users2;\_.-insert;"NOM-DU-BLOC_3ATT";\1;1;0;$M=$(getvar,users1);$(getvar,users2);$(+,$(getvar,users1),$(getvar,users2));_.'attdia;1;^Z

 

Tu donnes ta valeur1 , ta valeur2 , puis le point d'insertion du bloc.

 

Bien sur dans cette macro le "NOM-DU-BLOC_3ATT" et éventuellement les échelles et rotation sont à adapter à ton besoin.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Merci j'ai pu faire ce que je voulais:

 

1) creation d'un bloc avec trois attribut

1er attribut (champ expression diesel ====>$(getvar,users1)

2sd attribut (champ expression diesel ====>$(getvar,users2)

3ieme attribut (champ expression diesel ====>$(+,$(getvar,users1),$(getvar,users2))

 

 

Creation d'un icone avec la macro ci-dessous

 

^C^C_.'attdia;0;_.'users1;\_.'users2;\_.-insert;"NOM-DU-BLOC_3ATT";\1;0;;;;

 

 

Merci à toi bonuscad

Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...

Bonjour,

 

j'ai Autocad Map 2004 et je n'ai pas accès aux champs pour les attributs. Je voudrais créer un bloc avec 3 attributs : deux attributs que l'on saisit et le troisième est la différence du premier avec le second. Est ce faisable ?

 

merci

 

PLE64_sog

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Un lisp vite fait

 

(defun c:dif(/ att res sel val1 val2)
 (while (setq sel (ssget "_:e:s" (list (cons 0 "INSERT") (cons 66 1))))
   (if (> (length (setq att (vlax-invoke (vlax-ename->vla-object (ssname sel 0)) 'getattributes))) 2)
     (progn
(or (setq val1 (read (vla-get-textstring (car att))))
  (setq val1 0)
)
(or (setq val2 (read (vla-get-textstring (cadr att))))
  (setq val2 0)
)
(if (vl-catch-all-error-p (setq res (vl-catch-all-apply '- (list val1 val2))))
  (princ "\nUn des deux premiers attributs n'est pas numérique.")
  (progn
    (if (eq (type res) 'INT)
      (setq res (itoa res))
      (setq res (rtos res))
    )
    (and (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-textstring (list (caddr att) res)))
      (princ "\nImpossible de modifier le 3em attribut.")
    )
  )
)
     )
     (princ "\nLe bloc doit comporter au minimum 3 attributs.")
   )
 )
 (princ)
)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

effectivement (gile) mais j'ai regardé vite et je t'avoue ne pas avoir trop bien compris comment faire car je ne suis pas du tout spécialiste de le programmation macros et lisp je débute tout juste donc pour moi c"'est assez raide j'essaie de suivre mais difficile parfois il me faut un peu de temps parfois pour comprendre certains trucs, desolé, ça viendra avec le temps mais en attendant ...

Lien vers le commentaire
Partager sur d’autres sites

merci pour le lisp mais je suis novice ... je l'ai copié et chargé dans autocad mais après ? dois je créer mon bloc avec les attributs et lancer le lisp ou bien dois d'abord lancer le lisp ? Quand je lance le lisp, la commande m'indique "select objects" et puis après plus rien ?

 

fait il que je donne un nom particulier au bloc et aux attributs ?

 

merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

ok Patrick, j'ai bien lu le sujet.

 

- charger une routine LISP -------ok

- [surligneur] lancer une commande LISP[/surligneur]

- Éditeur VisualLISP

- Boites de dialogue (DCL)

- Les fichiers VLX

 

Charger routine pas de soucis particulier par contre le reste loin d'être evident pour moi.

L'éditeur VISUAL LISP il faut déjà connaitre un peu la programamtion macro ce qui n'est pas mon cas. Idem pour les boites de dialogue.

Par contre pour les boutons je pense pense que c'est avec "lancer une commande LISP" et c'est là que cela se complique pour moi, j'ai quelques lisp que j'ai enregistré ds un répertoire macros lisp et je souhaiterai faire une barre d'outils avec des boutons pour lancer ces lisps.

Si j'ai compris il faut que je definisse une commande mais o, fait cela ou ds l'éditeur visuallisp ! ou rentres-tu par exemple "le nom de la commande/fonction par c: au début de la routine, juste après (defun , exemple :

(defun c:toto (...))", je sais suis nul mais faut bien debuter un jour non

Forcement pour toi Patrick c'est facile mais pour un debutant moins evident désolé

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Re,

Forcement pour toi Patrick c'est facile mais pour un debutant moins evident désolé

Ce n'est pas le sujet, il me semblait juste que tu ne te donnais pas la peine de tout lire et de comprendre ce que te donnais (gile) comme solution.

De plus en plus de personnes de contentent de formules toutes faites et c'est tout juste s'ils ne gueulent pas s'il faut réfléchir un peu.

Donc, pour revenir à ton problème, tu remarqueras que le lisp commence par (defun c:dif(/ att res sel val1 val2).

C'est le c:dif qui indique le nom de la commande à utiliser pour lancer le lisp.

Dans un lisp, toute fonction qui débute par un defun c:... indique que c'est une commande utilisable dans Autocad (les ... représentant le nom de la commande à utiliser)

Le lisp étant chargé, il suffit donc de faire sur la ligne de commande dif (sans le c: ), et de suivre ce qu’indique le lisp comme toute commande Autocad.

Pour intégrer les lisps dans une barre d'outils, il est souhaitable que les lisps soient chargés au demarrage (aide de gile 1.3 ou 1.4).

Ensuite, définir des boutons à l'aide de l'éditeur cui (commande _.cui) et de définir comme macro par exemple ^C^Cdif

Un ^C signifie un appuie sur échap. C'est pour sortir d'un commande en cours quand on clic sur le bouton,

Deux ^C, c'est quand on est par exemple dans une commande dans les cotations.

commande cot --> commande aj --> deux niveaux.

 

ps : oublie pour l'instant dans l'aide de (gile) l'Éditeur VisualLISP

 

ple64_sog

Le lisp fonctionne de la manière suivante.

- Sélection du bloc pour faire la soustraction de la valeur du second attribut sur la valeur du premier.

- Résultat de l'opération sur le troisième.

Cela veut donc dire que le bloc doit-être implanté et que les deux premiers attributs renseignés.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Ok Patrick,

J'ai lu ton message.je ne cherche pas toujours des formules tte faite mais tt cela étant nouveau pour moi il faut un temps d'adaptation et de compréhension pas tjrs facile donc au début un peu obligé de prendre des bases et exemples pour comprendre le principe.Je rélfléchis et en plus j'aime pas faire quelque chose ss vraiment comprendre pas soucis.

Il faut donc si je suis bien faire une commande puis le bouton..

Donc la commande tu f'a fait comment et tu l'a place ou !

Par exemple si je veux faire une barre d'outils et boutons avec le lisp " Increment", il faut donc que je commence ma commande par c:dif

et ensuite je fais quoi pour lui indiquer le lilsp increment ?

Tu fais cela ou dans l'Editeur cui et tu le trouves ou cet éditeur c'est ds ce menu ou pas !

 

Pour créer une commande

Cliquez sur le menu Outils Personnaliser Menus.

Dans l'onglet Personnaliser de la boîte de dialogue Personnaliser l'interface utilisateur, cliquez sur Nouvelle dans le volet Liste des commandes.

Une nouvelle commande (nommée Commande1) s'affiche dans les volets Liste des commandes et Propriétés.

 

Dans le volet Propriétés, effectuez les opérations suivantes :

Dans la zone Nom, entrez le nom de la commande. Ce nom s'affichera sous forme d'info-bulle ou de nom de menu lorsque vous sélectionnerez la commande.

Dans la zone Description, entrez la description de la commande. Cette description s'affichera dans la barre d'état lorsque le curseur survolera l'élément de menu ou le bouton de barre d'outils. Dans la zone Macro, entrez la macro de la commande.

Dans la zone ID élément, entrez l'ID d'élément de la commande. (Pour les nouvelles commandes uniquement. Vous ne pouvez pas modifier l'ID élément d'une commande existante.)

 

Je t'indique que j'ai bien chargé au démarrage tous mes lisp comme il faut le faire pas de soucis de ce coté là, ça j'ai pigé(<acronym class=dict title=).

J'ai été ds propriété creation de commande comme indiqué

" Dans la zone Macro, entrez la macro de la commande.

Dans la zone ID élément, entrez l'ID d'élément de la commande. (Pour les nouvelles commandes uniquement. Vous ne pouvez pas modifier l'ID élément d'une commande existante.)

et là ça se complique au niveau "Dans la zone Macro, entrez la macro de la commande. car l ça comme par "^C^C ds l'éditeur dse chaines longues" je mets "commande _.cui....."!

Vraiment pas evident au debut je galere un peu Patircik comme tu vois donc si tu pouvais à travers un exemple me dire en gros comme procéder en faisant simple.

En te remerciant d'avance

 

Phil

 

 

 

 

 

 

.

 

 

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

merci Patrick

 

le lisp ne marchait pas car j'avais un bloc avec plus de troix attributs.

 

Avec 3 attributs ça marche très bien. que faut il rajouter pour un bloc où j'aurais 5 attributs (ex : att 1 : numéro d'ouvrage, att 2 : type d'ouvarge + les 3 autes attributs sur lesquels je renseigne att 3 et att4 et att 5 est la différence de att 3 - att 4).

 

Est ce possible? N'y a t il qu'un lisp pour résoudre ce pb avec autocad 2004 ?

 

Merci d'avanve.

 

 

Lien vers le commentaire
Partager sur d’autres sites

philous2,

 

Pour créer une commande et un bouton, puis une barre d'outils je te conseille de regarder l'aide :

Guide de personnalisation > Personnalisation de l'interface utilisateur > Personnalistion des commandes (suivant ta version d'AutoCAD, tu auras même des petites vidéos)

 

Pour la macro, comme le dit Patrick_35, tu met derrière le ^C^C la commande LISP (ce que tu entres à la ligne de commande pour le lancer, ce qui, dans le code LISP se trouve juste après le c:).

 

Par exemple si je veux faire une barre d'outils et boutons avec le lisp " Increment"

 

Le LISP contient (ce jour) 5 commandes : inctxt, incatt, incsel, incsuf et incadd. Il te faut donc faire 5 boutons avec les macros suivantes :

^C^Cinctxt

^C^Cincatt

^C^Cincsel

^C^Cincsuf

^C^Cincadd

 

et les mettre dans une barre d'outils.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Ok merci (gile) j'essaerai demain au boulot.

Je profite de l'occasion pour te poser une autre question en passant.

Pour progresser en Lisp, j'ai acheter il y a 2 semaines 2 logiciels " : [surligneur] AidLISP: l'éditeur-correcteur de programmes AutoLISP[/surligneur] " et " [surligneur] AidDCL: le générateur de boîtes de dialogue conçu comme un jeu...[/surligneur]" [/u] sur le site http://aidacad.com/fr/dcl.htm et j'attend tjrs mes logiciels.

Connais-tu ce site car j'ai l'impression m'ête fait avoir pourtant le site est tjrs en fonction aujourd'hui.

J'étais intéressé car ne connaissant rien a la programmation Lisp cela me paraissait pas mal comme aide de départ.

Ah oui une tte dernière chose (gile) comment tu utilises le lisp Dialog apres avoir charger l'application

Merci d'avance , pour info ce site est canadien je crois

 

Phil

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne peut rien te dire à propos d'aidacad, je n'ai jamais utilisé que la page où sont décrites les principales fonctions LISP en français. Le site ne semble pas avoir évolué depuis des années...

 

Le fichier Dialog.lsp contient plusieurs routines définissant des boites de dialogue. Ces routines (ou sous-routines) ne sont pas des commandes définies en LISP, elles sont plutôt assimilables (comme toute sous routine) à des fonctions LISP qu'on peut appeler depuis d'autres programmes LISP.

Par exemple, dans la commande incatt (du fichier Increment.lsp), la première boite de dialogue qui permet de choisir le nom du bloc est définie dans la routine GetBlock, qui fait parti des routines contenues dans le fichier Dialog.lsp.

 

 

[Edité le 10/4/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é