ASTERIXII Posté(e) le 14 avril 2014 Posté(e) le 14 avril 2014 Bonjour, Encore une question sur les blocs dynamique. J'ai un jeu de sélection (y compris les blocs anonyme) et pour chaque bloc dans le jeu de sélection , je veux tester la valeur d'un paramètre et du paramètre visibilité.Ensuite je le modifier. Je voudrais trouver "les paires pointées" en DXF, mais je ne trouve pas.Je voudrais éviter le code VL que je ne métrise pas.
(gile) Posté(e) le 14 avril 2014 Posté(e) le 14 avril 2014 Salut, Pour les paramètres dynamiques, je crains qu'il ne soit nécessaire de passer par les fonctions vla-*.C'est probablement possible en DXF, mais bon courrage pour l'exploration dans l'arborescence des dictionnaires et autres objets... Il faut d'abord convertir le ENAME en VLA-OBJECT :(setq vla-bloc (vlax-ename->vla-object bolc)) tu peux tester si le bloc est dynamique :(= (vla-get-IsDynamicBlock vla-bloc) :vlax-true) l'expression suivante retourne la liste des propriétés dynamiques :(setq dynProps (vlax-invoke vla-bloc 'getDynamicBlockProperties)) ensuite tu traites la liste avec les fonctions classique de traitement de liste(foreach prop dynProps (princ (strcat "\nNom: " (vla-get-PropertyName prop) " Valeur: " (vlax-get prop 'Value))) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
ASTERIXII Posté(e) le 15 avril 2014 Auteur Posté(e) le 15 avril 2014 Bonjour Gil, Bon s'il faut passer par le Vla .... Mais tu me donne une bonne source Il faut d'abord convertir le ENAME en VLA-OBJECT :(setq vla-bloc (vlax-ename->vla-object bolc)) Je vais pouvoir utiliser ma selection sur une boucle. J'ai vu de bon code (de toi), comme SSD qui fait l'operation pour un bloc. Je vais potasser...Merci
ASTERIXII Posté(e) le 18 avril 2014 Auteur Posté(e) le 18 avril 2014 Sa marche mais....Le code n'est pas de moi (Gile), je sais, c'est pas bien. mais le vla et moi sa fait 3 PJ: plan dwg avec petite explication Sur plus de 300 blocs je trouve le temps long. C'est normal, je teste chaque bloc et chaque propriétés.D'où ma question, pourquoi toujours faire une boucle sur les propriétés ?Si je pars du principe que je connais les blocs à traiter, pourquoi ne "attaquer" directement la propriété ? Analyse: DYNPROP et PROP Liste des proprietes pour un type de blocIci 9 propriétes, pour un autre bloc 11. donc la position est differente, mais semble être en fin de liste. un hazard ? DYNPROP[0]#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f0c68>[1] #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f3028>[2]#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f72e8>[3] #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f5968>[4] #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f78a8>[5] #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f3de8>[6] #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f4b28>[7] #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8fa468>[8] #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f6a68>) La 9 éme propriété (c'elle que je veux modifier)PROP.................LOG #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000002c8f6a68><AllowedValues> #<variant 8204 ...><Description> <PropertyName> Flèche<ReadOnly> :vlax-false<Show> :vlax-true<UnitsType> 0<Value> #<variant 8 Flèche haut EF>................. Ensuite je voudrais supprimer du dessin certains bloc. J'ai essayé avec (VLA-DELETE blk1), mais la méthode n'est pas bonne. problème de mise à jour de la sélection ? ;; TABLDYNBLOC;; Crée un tableau qui liste les blocs sélectionnés(defun c:tabldynbloc (/ ss refs lst ele ins tbl row) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) (prompt "\nSélectionnez les blocs à lister ou ") (or (setq ss (ssget '((0 . "INSERT")))) (setq ss (ssget "_X" '((0 . "INSERT")))) ) ;****************** (setq ctr 0) (repeat (sslength ss) ;SS = <Selection set: c55> (setq item (ssname ss ctr)) ;ITEM = <Nom d'entité: 7ffff62b020> (setq item2 (vlax-ename->vla-object item)) ; ITEM2 = #<VLA-OBJECT IAcadBlockReference2 00000000320810c8> (setq blk0 item) (setq blk1 item2) (c:essai) (setq ctr (1+ ctr)) ) ;repeat (vla-Delete ss) ; supprimer le jeu de sélection (libérer les ressources)) ; fin defun ;******************************************************(defun c:essai () (vl-load-com) ;l'expression suivante retourne la liste des propriétés dynamiques : (setq dynProps (vlax-invoke blk1 'getDynamicBlockProperties)) ;DYNPROPS = (#<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000003482ecb8> #<VLA-OBJECT ;ensuite tu traites la liste avec les fonctions classique de traitement de liste (foreach prop dynProps ;PROP = #<VLA-OBJECT IAcadDynamicBlockReferenceProperty 000000003482ecb8> (setq dyn1 (vla-get-PropertyName prop)) ;Exemple DYN1 = "Flèche" (setq dyn2 (vlax-get prop 'Value)) ;Exemple DYN2 = "Flèche bas" ;-------------------------- (if (= dyn2 "Flèche haut") ;(progn (VLA-DELETE blk1) ;(setq Repere "Flèche") ;(setq New "Aucune Flèche") ;(setq blk blk0) ;(gc:SetDynPropValue) ; ); fin progn ) ; fin if ;-------------------------- ;-------------------------- (if (= dyn2 "Flèche bas") (progn (setq Repere "Flèche") (setq New "Flèche haut") (setq blk blk0) (gc:SetDynPropValue) ) ; fin progn ) ; fin if ;-------------------------- ) ; fin forreah) ; fin defun ;***************************************;; gc:GetDynProps;; Retourne la liste des propriétés dynamiques de la référence de bloc;; sous forme d'une liste de paires pointées : (nom_propriété . propriété);;;; Argument;; blk : le bloc (ename ou vla-object)(defun gc:GetDynProps (blk / lst) (vl-load-com) (and (= (type blk) 'ENAME) (setq blk (vlax-ename->vla-object blk)) ) (if (and (= (vla-get-ObjectName blk) "AcDbBlockReference") (= (vla-get-IsDynamicBlock blk) :vlax-true) ) (foreach p (vlax-safearray->list (vlax-variant-value (vla-GetDynamicBlockProperties blk)) ) (setq lst (cons (cons (vla-get-PropertyName p) p) lst)) ) ) (reverse lst));; gc:GetDynPropValue;; Retourne la valeur d'une propriété dynamique;;;; Arguments;; blk : la référence de bloc (ename ou vla-object);; name : le nom de la propriété (sensible à la casse)(defun gc:GetDynPropValue (blk name / val) (vl-load-com) (if (setq prop1 (assoc name (gc:GetDynProps blk))) (vlax-variant-value (vla-get-Value (cdr prop1))) ));; gc:SetDynPropValue;; Attribue la valeur à une propriété dynamique;; Retourne T si l'opération a réussi, nil sinon;;;; Arguments;; blk : la référence de bloc (ename ou vla-object);; name : le nom de la propriété (sensible à la casse);; val : la valeur de la propriété(defun gc:SetDynPropValue (/ prop1) ;(blk name val / prop1) (setq name Repere) (setq val New) (vl-load-com) (and (numberp val) (setq val (float val))) (if (setq prop1 (assoc name (gc:GetDynProps blk))) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Value (list (cdr prop1) val)) ) ) )) ; fin defun
Patrick_35 Posté(e) le 18 avril 2014 Posté(e) le 18 avril 2014 Salut Un exemple avec commentaires qui change les paramètres de visibiltés des blocs choisis (defun c:test(/ bl doc pr sel) (vl-load-com) ; Document actif (setq doc (vla-get-activedocument (vlax-get-acad-object))) ; Sélection des blocs (or (ssget (list (cons 0 "insert"))) (ssget "x" (list (cons 0 "insert"))) ) ; Boucle en vlisp de la sélection active (vlax-for bl (setq sel (vla-get-activeselectionset doc)) ; Test si c'est un bloc dynamique (and (= (vla-get-isdynamicblock bl) :vlax-true) ; Boucle sur les propriétés dynamiques du bloc (foreach pr (vlax-invoke bl 'getdynamicblockproperties) ; Test sur le paramètre de visibilité (and (= (vla-get-propertyname pr) "Visibilité") ; Test si la propriété a changer existe (member "Bas" (vlax-get pr 'allowedvalues)) ; Changer la propriété (vla-put-value pr "Bas") ) ) ) ) ; Effacer la selection active (vla-delete sel) ; Silence (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 18 avril 2014 Auteur Posté(e) le 18 avril 2014 Bonjour Patrick, Merci pour ta réponse, un code beaucoup plus court, et simple, mais il modifie tout les blocs avec une version "Flèche haut" dans mon cas.Il semble qu'il ne fait que tester les blocs avec une visibilité "Flèche" et une propriété "Flèche bas", et change en "Flèche haut"Tous les blocs ont une propriété "Flèche bas", mais pas forcement active.Ne faudrait t'il pas la tester ? ; Test si la propriété a changer existe (member "Flèche bas" (vlax-get pr 'allowedvalues)) Ajustement par rapport au bloc: (defun c:test(/ bl doc pr sel) (vl-load-com) ; Document actif (setq doc (vla-get-activedocument (vlax-get-acad-object))) ; Sélection des blocs (or (ssget (list (cons 0 "insert"))) (ssget "x" (list (cons 0 "insert"))) ) ; Boucle en vlisp de la sélection active (vlax-for bl (setq sel (vla-get-activeselectionset doc)) ; Test si c'est un bloc dynamique (and (= (vla-get-isdynamicblock bl) :vlax-true) ; Boucle sur les propriétés dynamiques du bloc (foreach pr (vlax-invoke bl 'getdynamicblockproperties) ; Test sur le paramètre de visibilité (and (= (vla-get-propertyname pr) "Flèche") ; Test si la propriété a changer existe (member "Flèche bas" (vlax-get pr 'allowedvalues)) ; Changer la propriété (vla-put-value pr "Flèche haut") ) ) ) ) ; Effacer la selection active (vla-delete sel) ; Silence (princ))
Patrick_35 Posté(e) le 18 avril 2014 Posté(e) le 18 avril 2014 mais il modifie tout les blocsNon; Sélection des blocs (or (ssget (list (cons 0 "insert"))) (ssget "x" (list (cons 0 "insert"))) )Cela permet une sélection et si on fait entrée directement sans rien choisir, alors on sélectionne tous les blocs dans le dessin. Il semble qu'il ne fait que tester les blocs avec une visibilité "Flèche" et une propriété "Flèche bas", et change en "Flèche haut"Non, l'idée est de tester si la visibilité existe et alors de changer par cette visibilité.Tu peux éviter ce test si tu fais un test sur le nom du bloc dans la boucle et que tu es certain que ton bloc contient bien cette visibilité.Il est aussi possible d'inclure le test sur le nom du bloc pour éviter ceux qui n'ont rien à voir. Tous les blocs ont une propriété "Flèche bas", mais pas forcement active.Je ne comprends pas. Un paramètre de visibilité ne peut être désactivé ? @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 18 avril 2014 Auteur Posté(e) le 18 avril 2014 Je vais expliquer: Dans mon dessin j'ai un ensemble de blocDes blocs du nom de Chute_EP , Chute_EU, Chute_EV avec 4 possibilités de visibilité. Cette Visibilité, c'est Flèche (son nom) elle peut être soit sur "Flèche bas" "Flèche haut" "2 Flèche" "sans Flèche"Il peut y avoir d'autre bloc qui n'on pas cette visibilité, mais je n'y touche pasMon bloc Chute_EP peut aussi être sous la forme d'un bloc anonyme "*U" Je sélectionne tous les blocs.Si un bloc à une propriété sur "Flèche bas" (active) je la modifie en "Flèche haut"Si un bloc à une propriété sur "Flèche haut" (active) j'efface le bloc du dessinSi un bloc à une propriété sur "2 Flèche" ou "sans Flèche" je ne fais rien Je ne sais pas si j'utilise le bon vocabulaire pour le nom de la visibilité (Flèche) et propriété "Flèche bas"
Patrick_35 Posté(e) le 18 avril 2014 Posté(e) le 18 avril 2014 Ok (defun c:test(/ bl doc lst pr sel) (vl-load-com) ; Document actif (setq doc (vla-get-activedocument (vlax-get-acad-object))) ; Sélection des blocs (or (ssget (list (cons 0 "insert"))) (ssget "x" (list (cons 0 "insert"))) ) ; Boucle en vlisp de la sélection active (vlax-for bl (setq sel (vla-get-activeselectionset doc)) ; Test si c'est un bloc dynamique (and (= (vla-get-isdynamicblock bl) :vlax-true) ; Boucle sur les propriétés dynamiques du bloc (foreach pr (vlax-invoke bl 'getdynamicblockproperties) ; Test nom de la propriété (and (= (vla-get-propertyname pr) "Flèche") ; Différents tests selon les besoins (cond ; Si Flèche bas, changer en Flèche haut ((= (vlax-get pr 'value ) "Flèche bas") (vlax-put pr 'value "Flèche haut") ) ; Si Flèche haut, mémoriser le bloc dans une liste pour ensuite l'effacer hors de cette boucle ((= (vlax-get pr 'value) "Flèche haut") (setq lst (cons bl lst)) ) ) ) ) ) ) ; Effacer si besoin les blocs de la liste (mapcar 'vla-delete lst) ; Effacer la selection active (vla-delete sel) ; Silence (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 18 avril 2014 Auteur Posté(e) le 18 avril 2014 Merci Patrick, C'est simplement génial ! Sa marche super bien, et semble beaucoup plus rapide que mon bidouillage.Cela me fera gagner du temps.Si cela intéresse qq'un... Le but de cette opération: Lors de grand projet en plomberie (gravitaire), pour un niveau N2 (par exemple), je place les blocs (qui représentent des attentes de plomberie, des chutes vers le niveau N1)Ensuite je copie l'ensemble des blocs sur le niveau N1.C'est la que le lisp intervient, il ne va conserver que les attentes du dessus qui traversent le niveau.Car une attente qui à une "flèche haut" ne doit pas se retrouver au N1Il suffit alors de raccorder les attentes aux chutes.
Patrick_35 Posté(e) le 18 avril 2014 Posté(e) le 18 avril 2014 Il ne te reste plus qu'à payer ta bolée ;) Pour la rapidité, je pense que c'est surtout dû à la boucle en vlisp (vlax-for ...) et éviter de transformer un ename en vla-object. Il ne te reste plus qu'à te mettre au vlisp.Si tu as compris ce lisp, ce n'est pas aussi compliqué que l'on pense. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 18 avril 2014 Auteur Posté(e) le 18 avril 2014 (modifié) Hmm, je parle trop vitePas de ton code, mais de ma phrase :Ensuite je copie l'ensemble des blocs sur le niveau N1. Je pensais qu'avec Autocad il était possible de faire une sélection multiple (avec sélection rapide ou express tools) ???.Je le fais avec sélection rapide, mais avec 2 ou 3 objets maxi. Et en lisp je pensais qu'avec un truc du genre (defun c:essai ()(setq sel (ssget "_X" '((0 . "INSERT") (2 . "CHUTE_EP,CHUTE_EU,CHUTE_EV,`*U")))) ); fin defun Je pourrais sélectionner les blocs anonymes .... ben nonIl n'est pas possible d'inclure un filtre pour les *U ? --> mais c'est pas une bonne idée, car j'aurais tous les autres blocs anonymes Une autre piste:Dans ton code je crée une liste des blocs modifié : lst2 ; Si Flèche bas, changer en Flèche haut ((= (vlax-get pr 'value ) "Flèche bas") (vlax-put pr 'value "Flèche haut") (setq lst2 (cons bl lst2)) <-- soit une liste soit directement l'élément avec sssetfirst ) et à la fin du traitement juste après l'effacement des blocs, j'active à l'écran la sélection contenu dans la liste ; Effacer la selection active (vla-delete sel);*************************(sssetfirst nil lst2) <--- si c'est traité avec une liste;************************ ; Silence Mais la encore sa marche pas. Il faut transformer ma liste ? (du type LST2 = (#<VLA-OBJECT IAcadBlockReference2 0000000040640bf8>.....)Travailler avec vlax-vla-object->ename Modifié le 20 avril 2014 par ASTERIXII
Patrick_35 Posté(e) le 22 avril 2014 Posté(e) le 22 avril 2014 Salut Un bloc dynamique est logiquement un bloc anonyme (sauf s'il est inséré tel que dans la base).Autocad à ses débuts ne connaissait pas ce type de bloc, donc ils étaient nommés et tout le monde était content.Pour qu’Autocad gère ces blocs, les développeurs ont fait une chose simple. A chaque changement d'état d'un bloc dynamique, Autocad efface l'ancien pour insérer un nouveau selon les besoins demandés. Et comme Autocad ne sait pas afficher pour un même nom des états différents, alors ils ont utilisés les blocs anonymes.Pour tester, tu regardes le nom anonyme d’un bloc dynamique, tu lui changes par exemple sa visibilité et tu regardes de nouveau son nom. Et bien il a changé. Pour ta sélection, tu peux faire(ssget "x" (list (cons 0 "insert") (cons 2 "CHUTE_EP,CHUTE_EU,CHUTE_EV,`*U*"))) Pour une sélection avec sssetfirst, il faut recréer un jeu de sélection dans une variable avec ssadd @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 22 avril 2014 Auteur Posté(e) le 22 avril 2014 Bonjour Patrick,J'utilise le code que tu a fais pour modifier les visibilités.Au moment ou je modifie un bloc, je pensais qu'il faudrait l'ajouter "a une liste" Ici dans ton code, au moment ou la condition est vrai ; Si Flèche bas, changer en Flèche haut ((= (vlax-get pr 'value ) "Flèche bas") (vlax-put pr 'value "Flèche haut") (ICI) ) sachant que bl = #<VLA-OBJECT IAcadBlockReference2 00000000320810c8>je pensais faire (vlax-vla-object->ename bl)) qui donne <Nom d'entité: 7ffff62b020>J'ajoute à chaque passage l'élément à ma liste J'ai bien une liste, mais sa ne marche pas avec (sssetfirst nil lst)(sssetfirst fonctionnement avec une sélection <*U21><Nom d'entité: 7ffff62b020>.....) ? Donc ma question, est de savoir si le début du raisonnement est bon, et ce qui est faux. Re: depuis un nom d'entité (ssname sel2 n)) est-il possible de retrouver le type d'entité, dans mon cas <INSERT *U39> ?
Patrick_35 Posté(e) le 23 avril 2014 Posté(e) le 23 avril 2014 Salut Je t'avais répondu avec SSADD Un exemple; Déclaration d'un jeu de sélection vide (à faire en dehors d'une boucle) (setq js (ssadd)) ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename Mon_Objet) js) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 24 avril 2014 Auteur Posté(e) le 24 avril 2014 Salut Je t'avais répondu avec SSADD Un exemple; Déclaration d'un jeu de sélection vide (à faire en dehors d'une boucle) (setq js (ssadd)) ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename Mon_Objet) js) @+ Désolé, je pensais que tu voulais reboucler sur l’ensemble des blocs.Du coup, je ne pouvais plus connaitre les blocs modifiés pour ma sélection.Bon, comme toujours ta solution fonctionne.Voila le code complet, (qui fonctionne avec mes blocs)(defun c:PBrev(/ bl doc lst pr sel) (vl-load-com); Déclaration d'un jeu de sélection vide (à faire en dehors d'une boucle) (setq js (ssadd)) ; Document actif (setq doc (vla-get-activedocument (vlax-get-acad-object))) ; Sélection des blocs (or (ssget (list (cons 0 "insert"))) (ssget "x" (list (cons 0 "insert"))) ) ; Boucle en vlisp de la sélection active (vlax-for bl (setq sel (vla-get-activeselectionset doc)) ; Test si c'est un bloc dynamique (and (= (vla-get-isdynamicblock bl) :vlax-true) ; Boucle sur les propriétés dynamiques du bloc (foreach pr (vlax-invoke bl 'getdynamicblockproperties) ; Test nom de la propriété (and (= (vla-get-propertyname pr) "Flèche") ; Différents tests selon les besoins (cond ; Si Flèche bas, changer en Flèche haut ((= (vlax-get pr 'value ) "Flèche bas") (vlax-put pr 'value "Flèche haut") ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename bl) js) ) ; Si 2 Flèche , ne rien changer ((= (vlax-get pr 'value ) "2 Flèches") ; ne rien changer ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename bl) js) ) ; Si Flèche EF (bas), changer en Flèche haut ((= (vlax-get pr 'value ) "Flèche EF") (vlax-put pr 'value "Flèche haut") ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename bl) js) ) ; Si sans Flèche EF (bas), changer en Flèche haut sans EF ((= (vlax-get pr 'value ) "SANS Flèche EF") (vlax-put pr 'value "Flèche haut sans EF") ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename bl) js) ) ; Si Flèche EF EC(bas), changer en Flèche haut ((= (vlax-get pr 'value ) "Flèche EF EC") (vlax-put pr 'value "Flèche haut") ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename bl) js) ) ; Si sans Flèche EF EC(bas), changer en Flèche haut sans EF EC ((= (vlax-get pr 'value ) "SANS Flèche EF EC") (vlax-put pr 'value "Flèche haut sans EF EC") ; Ajouter un objet vla à la sélection) (ssadd (vlax-vla-object->ename bl) js) ) ; Si Flèche haut, mémoriser le bloc dans une liste pour ensuite l'effacer hors de cette boucle ((= (vlax-get pr 'value) "Flèche haut") (setq lst (cons bl lst)) ) ((= (vlax-get pr 'value) "Flèche haut sans EF") (setq lst (cons bl lst)) ) ((= (vlax-get pr 'value) "Flèche haut sans EF EC") (setq lst (cons bl lst)) ) ) ) ) ) ) ; Effacer si besoin les blocs de la liste (and lst (mapcar 'vla-delete lst)) ; Effacer la selection active (vla-delete sel) (sssetfirst nil js) ; Silence (princ))
Patrick_35 Posté(e) le 24 avril 2014 Posté(e) le 24 avril 2014 Salut En regardant vite fait le code, je pense que tu pourrais simplifier les condPar exemple en changeant ((= (vlax-get pr 'value) "Flèche haut") (setq lst (cons bl lst)) ) ((= (vlax-get pr 'value) "Flèche haut sans EF") (setq lst (cons bl lst)) ) ((= (vlax-get pr 'value) "Flèche haut sans EF EC") (setq lst (cons bl lst)) ) par ((member (vlax-get pr 'value) '("Flèche haut" "Flèche haut sans EF" "Flèche haut sans EF EC") (setq lst (cons bl lst)) ) Il y en a un autre à simplifier. Je te laisse chercher. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
ASTERIXII Posté(e) le 25 avril 2014 Auteur Posté(e) le 25 avril 2014 Salut,Bon j’ai regardé, la seul chose que je vois c'est mutualiser (vlax-put pr 'value "Flèche haut") ((member (vlax-get pr 'value) '("Flèche bas " " Flèche EF " " Flèche EF EC ")(vlax-put pr 'value "Flèche haut"); Ajouter un objet vla à la sélection)(ssadd (vlax-vla-object->ename bl) js) ) Une bonne réponse de ma part ? :)
Patrick_35 Posté(e) le 25 avril 2014 Posté(e) le 25 avril 2014 Gagné B) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant