Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous.

 

Voici un de mes lisps qui me permet de mettre un ensemble d'entité dans le calque voulu juste en lui donnant un numéro.

 

 ;Mettre le jeu de sélection dans le calque CACHE;

(defun c:2 (/ js x name paire)
 (or js (setq js (ssget)))
 (sslength js)
 (setq x 0)
 (while (/= x (sslength js))
   
;ECRIRE LE PROGRAMME

   (setq name (entget (ssname js x)))
   (setq paire (cons 8 "CACHE"))
   (setq name (subst paire (assoc 8 name) name))
   (entmod name)

;FIN FDU PROGRAMME
   (setq x (+ x 1))
   )
 )

 

• Je souhaiterai améliorer ce lisp en forçant aussi la couleur à devenir DuCalque. Je sais que dans ce cas qu'il me faut enlever le code DXF 62..... Est-ce possible? Et si elle n'existe pas,eh bien ne rien faire cela va de soi!

 

• J'aimerai aussi que quand ce programme se termine, qu'il me laisse en surbrillance mon jeu de sélection. comment sélectionner un objet via le lisp.?

 

PS: J'ai remarqué que ce genre de programme ne fonctionne pas pour changer le calque d'une fenêtre de présentation.

 

Merci à tous

 

 

 

 

 

 

[Edité le 7/4/2009 par Arcasdk]

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Salut

 

Je sais que dans ce cas qu'il me faut enlever le code DXF 62..... Est-ce possible?

Regarde la fonction vl-remove

 

qu'il me laisse en surbrillance mon jeu de sélection

Regarde la fonction redraw (à utiliser dans la boucle)

 

PS: J'ai remarqué que ce genre de programme ne fonctionne pas pour changer le calque d'une fenêtre de présentation.

Exact, il faut pour cela utiliser le vlisp

 

@+

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)

Bon ben je suis résigné à me mettre au V-Lisp...

 

Merci Patrick_35

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Bonjour, eh bien y a du nouveau.

 

J'ai rajouté les éléments en surbrillance mais il ne se passe rien ou pas comme je le souhaite

 

La fonction "vl-remove" ne fonctionne pas. (pas d'erreur non plus)

 

Et le "redraw" laisse bien mon entité en surbrillance mais n'est pas sélectionnée pour autant. Mon jeu de sélection est vide.

 

;Mettre le jeu de sélection dans le calque 0;

(defun c:5 (/ js x name paire code ent)

 (vl-load-com)
 (or js (setq js (ssget)))
 (sslength js)
 (setq x 0)
 (while (/= x (sslength js))
   
;ECRIRE LE PROGRAMME

   (setq ent (ssname js x))
   (setq name (entget ent))
   (setq paire (cons 8 "DESSIN"))
   (setq name (subst paire (assoc 8 name) name))
   
   [surligneur](if (setq code (assoc 67 name))
   (vl-remove code name))
   (if (setq code (assoc 6 name))
   (vl-remove code name))
   (redraw ent 3)
   (entupd name)[/surligneur]

   (entmod name)

;FIN FDU PROGRAMME
   (setq x (+ x 1))
 )
 ) 

 

 

Ai-je oublié quelque chose?

 

 

 

 

 

 

 

[Edité le 7/4/2009 par Arcasdk]

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Salut

 

Une version corrigée

 

(defun c:5 (/ js x name paire code ent)
 (vl-load-com)
 (or js (setq js (ssget)))
;  (sslength js)
 (setq x 0)
 (while (/= x (sslength js))
;ECRIRE LE PROGRAMME
   (setq ent (ssname js x))
   (setq name (entget ent))
   (setq paire (cons 8 "DESSIN"))
   (setq name (subst paire (assoc 8 name) name))
   (if (setq code (assoc 67 name))
   (setq name (vl-remove code name)))
   (if (setq code (assoc 6 name))
   (setq name (vl-remove code name)))
   (entmod name)
;    (entupd (cdr (assoc -1 name)))
   (redraw ent 3)
;FIN FDU PROGRAMME
   (setq x (+ x 1))
 )
)

 

@+

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_35 mais cela ne fonctionne toujours pas.

 

Tu l'as testé?

 

Tu as supprimé le sslenght et ajouté un entupd. C'est bien ça?

 

Le code "67" et "6" existe toujours..... :casstet:

 

et le "redraw" ne dois pas être la commande que je cherche.

 

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Re

Tu l'as testé?

Heu, non, juste à la lecture du lisp

 

Sinon, je l'aurais écrit comme ça

(defun c:5 (/ js x name ent)
 (setq x 0)
 (or js (setq js (ssget)))
 (while (setq ent (ssname js x))
   (setq name (entget ent)
  name (subst (cons 8 "DESSIN") (assoc 8 name) name)
  name (subst (cons 62 256)  (assoc 62 name) name)
  name (subst (cons 6 "BYLAYER") (assoc 6 name) name)
   )
   (entmod name)
;    (redraw ent 3)
   (setq x (1+ x))
 )
 (sssetfirst nil js) ; Cette sélection ?
)

 

ps : testé ;)

pps : le code 67 est pour espace objet/papier en non couleur, j'avais pas fait gaffe

 

@+

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)

Ah ouais, ça va déjà mieux...

 

Tu n'utilises pas le V-Lisp toi?

 

j'essayais de le faire en V-Lisp suite à ton message

 

 

PS: J'ai remarqué que ce genre de programme ne fonctionne pas pour changer le calque d'une fenêtre de présentation.

 

 

Exact, il faut pour cela utiliser le vlisp

 

Merci

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)
Tu n'utilises pas le V-Lisp toi?

Ben si, mais c'était pour rester accessible et comme c'était en autolisp, j'ai continué

 

j'essayais de le faire en V-Lisp suite à ton message

 

Une version vlisp

(defun c:5(/ doc js sel)
 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (vl-catch-all-apply 'vla-add (list (vla-get-layers doc) "DESSIN"))
 (and (setq js (ssget))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(vla-put-layer ent "DESSIN")
(vla-put-color ent 256)
(vla-put-linetype ent "ByLayer")
     )
     (vla-delete sel)
   )
 )
 (sssetfirst nil js)
 (vla-endundomark doc)
 (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 tout marche nikel.

 

Je voulais rajouter une propriété.....L'épaisseur de ligne.

 

Je pense avoir trouver le code V-lisp mais je ne sais pas quelle réponse il attend pour stipuler l'épaisseur de ligne "DuCalque"

 

il s'agit bien de LineWeight?

 

 (vla-put-lineweight ent "LnWtByLayer")

 

En revanche le LnWtByLayer ne doit pas être bon!!!

 

Ahhh j'ai trouvé... c'est "-1".

 

J'ai tapé (setq toto (vla-get-lineweight ent)) sur une ligne avec une épaisseur de ligne en DuCalque.... Pas CON Jean Pierre..... ;-)

 

Ou est ce que je peux trouver ce genre de renseignement.

 

J'ai trouver certains trucs dans l'explorateur du VBA (Alt+F11 et F2) mais je ne cherche peut être pas au bon endroit.

 

Merci

 

 

 

 

[Edité le 8/4/2009 par Arcasdk]

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Bien, tu commences à saisir le vlisp :D

 

Pour trouver les propriétés d'un objet

(setq a (vlax-ename->vla-object (car (entsel))))

puis

(vlax-dump-object a)

Pour être certain que c'est bien la propriété Lineweight, je change l'épaisseur de mon objet, un vlax-dump-objet de ma variable et je constate qu'elle change

 

Une astuce

En faisant (vlax-dump-objet a T), tu vois aussi les méthodes applicables à l'objet

 

Une autre méthode en utilisant l'éditeur vba

Tu fais F2 pour l'explorateur et tu vas dans sur ton type d'objet (AcadArc pour un arc de cercle, AcadCircle pour un cercle, etc...)

Lors du vlax-ename->vla-objet, tu as une réponse du type #

En enlevant le I de IAcadArc, tu le retrouves dans l'explorateur. Tu as tout, même des exemples vba qu'il reste à traduire en vlisp.

C'est une logique à comprendre.

 

Tu verras qu'en fait, le vlisp est plus simple et plus puissant qu'autolisp.

 

@+

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 beaucoup Patrick_35, c'est bon je m'y lance....

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

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é