-
Compteur de contenus
126 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Morgul
-
Merci Beaucoup Patrick pour ton aide. Je ne comprenais pas l'architecture qu'il fallait en tête du code. Désolé pour mon côté boulet..... Pour ceux que cela intéresse, le code fonctionne correctement désormais : (defun c:InfoBloc (/ doc) (setq doc (vla-get-activedocument (vlax-get-acad-object)) tot 0 ) (vla-startundomark doc) (and (ssget (list (cons 0 "insert"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (foreach prop (vlax-invoke ent 'getdynamicblockproperties) (and (= (vla-get-propertyname prop) "Visibilité1") (setq ValeurExtraite (vlax-get prop 'value)) ) ) (setq att (vlax-invoke ent 'getattributes)) ;(setq ValeurLong (vlax-dump-object (nth 0 att))) (setq ValeurLong (vla-get-textstring (nth 0 att))) (terpri) (princ (strcat "\n...Données extraites :")) ;(princ ent) ;(princ " - ") (princ "\n...Bloc n°") (princ (setq tot (1+ tot))) (princ "\n...") (princ (strcat "\n...Type de Câble.... : " ValeurExtraite)) (princ (strcat "\n...Longueur de Câble : " ValeurLong)) (princ "\n...") ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) (c:InfoBloc)
-
Hello, oui, c'est ce que je vais faire je vais dans un premier temps inclure les princ dans la boucle. Mais, je n'arrive pas à traiter un bloc puis à passer à l'autre. Je suis vraiment benêt !
-
En fait, je pense, que je me suis mal exprimé. Dans tous les blocs que je sélectionne par une fenêtre, je voudrais récupérer les valeurs : [code (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (foreach prop (vlax-invoke ent 'getdynamicblockproperties) (and (= (vla-get-propertyname prop) "Visibilité1") (setq ValeurExtraite (vlax-get prop 'value)) ) ) (setq att (vlax-invoke ent 'getattributes)) (setq ValeurLong (vla-get-textstring (nth 0 att))) ) [/code]
-
Désolé je suis un vrai boulet ! :wacko: Je n'y arrive pas malgré tes explications. En fait, normalement, je dois refaire une boucle non ?
-
Bonjour Patrick_35, Merci beaucoup pour ta réponse. :D Comme toujours, c'est effectivement beaucoup plus propre après ton passage. Grace à tes conseilles, j'ai modifié mon code qui fonctionne très bien. Par contre comme évoqué, je suis nul en VL donc il n'est peut-être pas beau ? :blink: Maintenant, je me demandais comment faire avec un jeu de sélection ? En effet, je voudrais éviter la sélection bloc par bloc. (defun c:InfoBloc(/ doc) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (prompt "\nCLIQUEz SUR LE BLOC :") (and (ssget (list (cons 0 "insert"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (foreach prop (vlax-invoke ent 'getdynamicblockproperties) (and (= (vla-get-propertyname prop) "Visibilité1") (setq ValeurExtraite (vlax-get prop 'value)) ) ) (setq att (vlax-invoke ent 'getattributes)) ;(setq ValeurLong (vlax-dump-object (nth 0 att))) (setq ValeurLong (vla-get-textstring (nth 0 att))) ) (vla-delete sel) (princ (strcat "\n...Données extraites :")) (princ "\n...") (princ (strcat "\n...Type de Câble.... : " ValeurExtraite)) (princ (strcat "\n...Longueur de Câble : " ValeurLong)) (princ "\n...") ) ) (vla-endundomark doc) (princ) ) (c:InfoBloc)
-
Bonsoir à tous, Je ne suis vraiment pas fort en Visual LISP, et là je bloc un peu. Mon problème est que j'essaye de récupérer différentes valeurs d'un bloc dynamique. Grace au site, j'ai réussi à récupérer et modifier un code pour récupérer le paramètre de visibilité. Mais, je ne sais pas comment faire pour dans le même temps récupérer la valeurs des attributs "LG." "A" et "B" du même bloc. Pourriez-vous me venir en aide s'il vous plait ? Merci d'avance. (defun c:InfoBloc (/ ValeureProp ValeureExtraite) (prompt "\nCLIQUEz SUR LE BLOC :") (setq bl1 (ssget (list (cons 0 "insert"))));; on sélectionne un bloc (foreach prop (vlax-invoke (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname bl1 0))))) 'getdynamicblockproperties) ;;; on regarde toutes les propriétées dynamiques (if (= (vla-get-propertyname prop) "Visibilité1") ;; si une propriétée dynamique "Visibilité1" (PROGN (setq ValeureProp (vla-get-value prop));; on regarde pour info comment c est agencé (setq ValeureExtraite (vlax-variant-value (vla-get-value prop)));; on extrait la valeur de la propriété ) ) ) ; =================================================================================================== ; Affichage des données extraites ; =================================================================================================== (princ (strcat "\n...Données extraites :")) (princ "\n...") (princ (strcat "\n...Type de Câble.... : " ValeureExtraite)) (princ "\n...") ) (c:InfoBloc)
-
Bonjour à Tous, Alors, voilà, tout d'abord, je voulais remercier Tramber qui avait créé le super Lisp Tabloblo qui sera le point de départ de mes demandes. En effet ce lisp est super, mais comme beaucoup aujourd'hui, j'utilise beaucoup des blocs dynamiques avec paramètre de visibilité. Ce lisp fonctionne très bien, mais il ne prend pas en compte le paramètre de visibilité appliqué sur les blocs, il ne reprend que la valeur par défaut du bloc. Ensuite, comme je travail entre autre sur des câbles électriques, j'aimerai rajouté une colonne, longueur totale. En rajoutant un if quelque part qui pourrait voir et lire la valeur de l'attribut longueur présent ou pas dans l'ensemble des blocs sélectionnés. Je ne sais pas trop comment il faudrait faire pour modifier le code. Pouvez-vous m'aider ? Je vous remercie par avance. Voici le code d'origine de Tramber : ;; Tabloblo (Tramber) ;; Crée un tableau qui liste les blocs insérés (sélectionnés ou toute la collection) (defun c:tabloblo (/ libloc liidbloc ss col liref ptins tableVL cont row lassoc) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (prompt "\nSélectionnez les blocs à lister ou ") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT"))) col T)) (if ss (progn (vlax-for x (setq ss (vla-get-ActiveSelectionSet *acdoc*) ) (or (vlax-property-available-p x 'Path) (setq liref (cons (if (vlax-property-available-p x 'EffectiveName) (vla-get-EffectiveName x) (vla-get-Name x) ) liref ) ) ) ) (vla-delete ss) ) ) (if col (vlax-for i (vla-get-Blocks *acdoc*) (if (and (not (wcmatch (setq name (vla-get-Name i)) "`**,*|*")) (= :vlax-false (vla-get-IsXref i)) ) (setq libloc (append libloc (list (vla-get-name i))) liidbloc (append liidbloc (list (vla-get-ObjectID i))) ) ) ) (setq libloc (remove_doubles liref) liidbloc (mapcar '(lambda (x) (vla-get-ObjectID (vla-item (vla-get-Blocks *acdoc*) x ) ) ) libloc ) ) ) (initget 1) (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0)) (setq tableVL (vla-addtable (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)) ) (vlax-3d-point ptins) (+ 2 (length libloc)) 3 20 ; Hauteur cellule 80 ; Largeur cellule ) ) (vla-put-VertCellMargin tableVL 4.0) ; Marge verticale (vla-put-TitleSuppressed tableVL :vlax-false) (vla-put-HeaderSuppressed tableVL :vlax-false) (vla-setText tableVL 0 0 "Blocs") ; Titre (vla-setText tableVL 1 0 "Nom") ; Titre colonne 1 (vla-setText tableVL 1 1 "Nombre") ; Titre colonne 2 (vla-setText tableVL 1 2 "Symbole") ; Titre colonne 3 (setq cont -1 row 1 ) (setq lassoc (cond((if(setq f(FINDFILE "Table blocs.txt"))(setq f(open f "r"))); ATTENTION, fichier texte à mettre dans le dossier du fichier ou dans un dossier de support (while(setq lignt (read-line f)) (setq lignt(vl-remove-if '(lambda(x)(= x ""))(gc:str2lst lignt"\t")) lis(cons lignt lis)) ) ) ) ) (if f(close f)) (repeat (- (vla-get-Rows tableVL) 2) (setq nouvn(nth (setq cont (1+ cont)) libloc)) (vla-settext tableVL (setq row (1+ row)) 0 (cond((trouvnom nouvn))(T nouvn)) ) (vla-settext tableVL row 1 (length (vl-remove-if-not '(lambda (n) (= n (nth cont libloc))) liref ) ) ) (vla-SetBlockTableRecordId tableVL row 2 (nth cont liidbloc) :vlax-true ) (vla-setcellalignment tableVL row 0 5) (vla-setcellalignment tableVL row 1 5) ) (princ) ) ;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste (defun REMOVE_DOUBLES (lst) (if lst (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst))) ) ) (defun trouvnom(ancn / result); attention lassoc est modifié en global dans c:tabloblo (if(setq result(cadar(vl-remove-if-not '(lambda(x)(=(car x)ancn))lassoc))) (setq lassoc(vl-remove-if '(lambda(x)(=(car x)ancn))lassoc)) ) result ) ;; gc:str2lst ;; Transforme une chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur (defun gc:str2lst (str sep / len lst) (setq len (strlen sep)) (while (setq pos (vl-string-search sep str)) (setq lst (cons (substr str 1 pos) lst) str (substr str (+ len pos 1)) ) ) (reverse (cons (substr str 1 pos) lst)) )
-
Vider une liste pour boite de dialogue
Morgul a répondu à un(e) sujet de Morgul dans Pour aller plus loin en LISP
Merci pour ta réponse. Mais c'est exactement ce que j'ai fait, mais ça n'est là le problème, latt400 est bien vidé. Je pense qu'il faut que je vide "present", mais je ne sais pas comment. -
Bonjour, J'ai créé un lisp d'impression dans lequel j'ai une boite de dialogue qui génère la liste de présentations. Mais à chaque fois que je relance ce lisp, la liste double, triple, etc. Je ne sais pas comment la vider. Voici l'expression de mon lisp : ... ... (start_list "present") (mapcar '(lambda (x) (add_list (strcat (car x) "_" (cadr x)))) latt400) (end_list) ... ... Pourtant, je vide bien latt400 à la fermeture de mon lisp. Merci pour votre aide.
-
Comment lancer _plot avec sa boite de dialogue ?
Morgul a répondu à un(e) sujet de Morgul dans Débuter en LISP
Super ! Merci. -
Bonjour, J'ai créé un lisp d'impression qui reconnait les diférents formats de mes présentation, mais je voudrais que lorsqu'il ne reconnait pas qu'il lance la commande _plot normalement avec sa boite de dialogue et non en ligne de commande. Comment peut-on faire ? J'ai essayé par l'intermédiaire d'un fichier script, mais cela ne fonctionne pas. Merci.
-
Ouvrir un gabarit avec la palette d\'outil
Morgul a répondu à un(e) sujet de Morgul dans AutoCAD 2007
C'est juste pour tout avoir à porté de main ... -
Merci pour vos réponses. En fait, j'utilise beaucoup les palettes d'outils et je voudrais pouvoir ouvrir un fichier gabarit à partir de celle-ci. Comme on ne peut pas le faire directement, je voudrais créer une expression lisp pour pouvoir le faire. Il faut donc que ce lisp fasse : - une sauvegarde du fichier encours - ouvrir le fichier gabarit Merci encore pour votre aide.
-
Bonjour, J'utilise beaucoup la palette d'outil, et je voudrais pouvoir ouvrir un fichier gabarit avec. Je n'y arrive pas, peut-être dois-je créer un lisp ? Merci pour votre aide.
-
Bonjour, Je n'arrive pas à ouvrir un gabarit (dwt) avec la commande "ouvrir". Avez-vous une idée ? Merci.
-
Bonjour à tous, J'utilise un champ dans mes cartouches pour remplir le format de l'échelle. Mais, j'ai un problème, parfois, le champ indique 1:100.0001 ou 1:99.9999. Je ne sais pas d'où ça vient. Pouvez-vous m'aider ? D'avance, merci.
-
Merci pour ta réponse, je vais tester cela. C'est vrais ce que tu me dis, mais c'est pour faire une étude vite faite. Cordialement.
-
Bonjour, J'ai un plan de ville avec tous les compteurs d'eaux qui sont représentés par un texte "C". Comment pourrais-je faire pour insérer un bloc là ou il y a un "C" ? J'aimerai faire un lisp mais je ne sais pas comment m'y prendre. Merci pour votre aide.
-
Merci pour ta réponse. Si, il y a certainement un bloc, mais je ne le retrouve pas. Et je ne sais pas comment faire. Si mon client récupère le fichier comme ceci, il ne va pas comprendre et ne va pas vouloir de ce fichier qui lui pose des question lorsqu'il l'ouvre.
-
Bonjour, J'ai un fichier qui me pause une question à chaque fois que je l'ouvre, et cela m'énerve ! En effet, il me réclame une police que je ne possède pas et donc il la remplace par une autre. Comment puis-je retirer cette police du dessin afin qu'il ne me la réclame plus ? J'ai tout mis en Romand, mais rien n'y fait à chaque fois il me pose cette question. Merci.
-
Télécharger un fichier en lisp
Morgul a répondu à un(e) sujet de Morgul dans Pour aller plus loin en LISP
Merci encore une fois pour ta réponse "Patrick_35", elle va beaucoup m'aider. Merci aussi à "x_all", même si je ne comprend pas trop ta réponse. Mais je comprend que parfois je peut être lourd avec mes questions. A+. -
Télécharger un fichier en lisp
Morgul a répondu à un(e) sujet de Morgul dans Pour aller plus loin en LISP
oui c'est ça à partir d'autocad Merci pour ta réponse. -
Télécharger un fichier en lisp
Morgul a répondu à un(e) sujet de Morgul dans Pour aller plus loin en LISP
J'entends par "télécharger", télécharger un fichier qui se trouve sur internet. Merci encore... -
Bonjour à tous, Peut-on télécharger un fichier en lisp ? Si oui qu'elles sont les commandes ? Merci.
-
De l\'aide pour une boucle
Morgul a répondu à un(e) sujet de Morgul dans Pour aller plus loin en LISP
Merci à vous, de faire marcher vos cellules grises pour un nul comme moi .... En fait, ma demande était in-adaptée, et j'ai trouvé plus simple d'utiliser repeat. En plus, bseb67 avait raison, j'utilisais des blocs que je ne croyait pas dynamique, mais en fait ils l'étaient devenus car j'avais créé un paramètre de Pt d'insertion. Du coup, mon Lisp ne les voyait pas. Bref, je suis un naze, mais le principale, c'est que ça tourne maintenant. Merci encore pour tout.
