Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J'ai tenté, pour me faire plaisir, de taper quelques lignes en vlisp afin de remplacer certaines de mes vieilles fonctions Lisp.

 

Cette fonction est simple, je scrute toutes les entités de mon dessin, et je remplace le texte "." des attributs et des textes par rien "".

J'en ai un autre qui fait l'inverse ...

 

Je me trouve maintenant devant un dilem,

 

- mon programme vlisp est mal contruit ?

- Le vlisp n'est pas prévu pour ça ?

- Je continue mon ptit bonhomme de chemin en lisp ....

 

Je traite 22600 entités

 

Version Lisp: (3 secondes) :D

 

(if (setq @&ssget (ssget "X" (list (cons 8 (strcat "*")))))
   (progn
     (setq @#val1 0)
     (print (sslength @&ssget))
     (repeat (sslength @&ssget)
       ; Cas du texte
       (if (=
             (cdr (assoc 0 (setq &entget (entget (setq @#ssname (ssname @&ssget @#val1))))))
             "TEXT"
             )
         (if (= (cdr (assoc 1 &entget)) ".")
           (entmod (setq &entget (subst (cons 1 "") (assoc 1 &entget) &entget)))
           )
         )
       ; Cas du symbole
       (if (and
             (=(cdr (assoc 0 &entget))"INSERT")
             (assoc 66 &entget)
             )
         (progn
           (while (/= "SEQEND" (cdr (assoc 0 &entget)))
             (if (=(cdr (assoc 0 &entget))"ATTRIB")
               (if (= (cdr (assoc 1 &entget)) ".")
                 (entmod(setq &entget (subst (cons 1 "") (assoc 1 &entget) &entget)))
                 )
               )
             (setq &entget (entget (setq @#ssname (entnext @#ssname))))
             )
           )
         )
(setq @#val1 (1+ @#val1))
)
     )
   )

 

 

Version Vlips (J'ai breaké au bout d'une minute !) :mad:

 

(if (setq @&ssget (ssget "X" (list (cons 8 (strcat "*")))))
   (progn
     (setq @#val1 0)
     (print (sslength @&ssget))
     (repeat (sslength @&ssget)
       ; Cas du texte         
(setq @#object (vlax-ename->vla-object (setq @#ssname (ssname @&ssget @#val1))))	
; Peut-on modifier du texte ?
(if (vlax-property-available-p @#object 'TextString)
  (if (= (vla-get-textstring @#object) ".")
    (vla-put-textstring @#object "")
  )
  )
; Peut-on modifier les attributs ?
(if (vlax-property-available-p @#object 'hasattributes)
  (progn
    (setq @&object (vlax-invoke @#object 'getattributes))
    (foreach @#for @&object
      (if (vlax-property-available-p @#for 'TextString)
	(if (= (vla-get-textstring @#for) ".")
	  (vla-put-textstring @#for "")
	  )
	)	      
      )
    )
  )
(setq @#val1 (1+ @#val1))
)
     )
   )

Posté(e)

Salut,

j'ai jeté un coup d'œil sur ton lisp,

à part qu'il soit particulièrement dur à lire (à cause des "@&.." devant des noms de commandes qui deviennent alors de variables...) je ne vois pas d'erreur.

il n'y a pas de raison que ça plante.

Pour vérifier qu'il tourne sur ton poste, fait un compteur :

 

   (...)
(repeat (sslength @&ssget)
    [b] (princ (strcat "\n - Objet N° " (rtos (- (sslength @&ssget) @#val1)) " traité !"))[/b]
     ; Cas du texte
(...)

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Merci bred,

 

Milles excuses pour le nom de mes variables .... il n'y a pas de déclaration possible, alors j'utilise une espèce de protocole de signe pour me faciliter la tâche , et en théorie la relecture .... ;)

 

Sinon, Oui le code vlisp fonctionne ..... !!!!

Mais, c'est super long !!! 72 secondes contre 3 en Lisp !!!!!

 

C'est pas top ! mais doit y avoir un truc pas correcte dans mon vlisp !

Posté(e)

Salut

 

Je suis comme Bred, j'ai du mal à te lire

 

Un exemple d'après ce que j'ai pu comprendre.

 

(and (ssget "x" (list (cons 0 "insert,text,mtext")))
 (progn
   (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
     (cond
((and	(member (vla-get-objectname ent) '("AcDbText" "AcDbMText"))
	(eq (vla-get-textstring ent) ".")
 )
  (vla-put-textstring ent "")
)
((eq (vla-get-objectname ent) "AcDbBlockReference")
  (foreach att (vlax-invoke ent 'getattributes)
    (if (eq (vla-get-textstring att) ".")
      (vla-put-textstring att "")
    )
  )
)
     )
   )
   (vla-delete sel)
 )
)

 

@+

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 pour la seconde couche sur la lecture de mon code patrick .... ;)

 

Sinon, rien à dire, sinon, qu'une fois de plus, je dois me plier et te faire une courbette ... ;)

 

Ton code fonctionne parfaitement bien, et tourne à 4 secondes.....

 

Donc c'était le mien qui à un soucis ...

 

Encore Merci et à plus !

 

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é