Aller au contenu

Messages recommandés

Posté(e)

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.

Posté(e)

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

Posté(e)

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

Posté(e)

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 bloc

Ici 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

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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)

)

Posté(e)
mais il modifie tout les blocs

Non

; 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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

Je vais expliquer:

 

Dans mon dessin j'ai un ensemble de bloc

Des 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 pas

Mon 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 dessin

Si 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"

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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 N1

Il suffit alors de raccorder les attentes aux chutes.

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e) (modifié)

Hmm, je parle trop vite

Pas 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 non

Il 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é par ASTERIXII
Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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> ?

Posté(e)

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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)

)

Posté(e)

Salut

 

En regardant vite fait le code, je pense que tu pourrais simplifier les cond

Par 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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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 ? :)

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é