Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Voilà, j'ai "personnalisé" l'excellent "SomPoly" de (gile) qui fait la somme de toutes les polylignes du calque courant.

(defun c:SomPoly ()
 (princ (strcat "\nLongueur cummulée des polylignes sur le calque '"
            	(getvar 'clayer)
            	"' : "
            	(rtos (polyLengthByLayer (getvar 'clayer)))
    	) ;_ Fin de strcat
 ) ;_ Fin de princ
 (princ)
) ;_ Fin de defun
;;;********************************
(defun polyLengthByLayer (layer / len ss)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 ) ;_ Fin de or
 (setq len 0)
 (if (ssget "_X" (list '(0 . "lwpolyline") (cons 8 layer)))
   (progn (vlax-for pl (setq ss (vla-get-ActiveSelectionSet *acdoc*))
        	(setq len (+ len (vla-get-Length pl)))
      	) ;_ Fin de vlax-for
      	(vla-Delete ss)
   ) ;_ Fin de progn
 ) ;_ Fin de if
 len
) ;_ Fin de defun

 

Voici ce que j'ai écrit :

;;;Utilise "getlayers" de (gile) contenu dans Dialog.lsp
 (defun c:DHSomPoly ()
 (setq ListCalq (getlayers "Choisir les calques..." nil nil)
       Som      0
 ) ;_ Fin de setq
 (foreach calque ListCalq
   (princ (strcat "\nLe calque '" calque "' contient " (rtos (polyLengthByLayer calque)) "m"
      	) ;_ Fin de strcat
   ) ;_ Fin de if
   (setq Som (+ Som (polyLengthByLayer calque)))
 ) ;_ Fin de foreach
 (princ (strcat "\nPour un total de : " (rtos Som) "m"))
 (princ)
) ;_ Fin de defun

Mon problème est que cette somme de polylignes comptabilisent aussi les polylignes de l'espace papier, comme celles contenues dans les légendes...

 

Comment ne comptabiliser uniquement que les polylignes de l'espace objet ?

 

Su quelqu'un a une idée, un conseil ou une astuce, je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci VDH-Bruno de m'aider...

 

Tu veux parler de

(eq (getvar "CVPORT") 1)

Mais avec le (cons 67, je ne sais pas trop quoi faire avec... Mais je trouverais... Et comme le dit si bien x_all, je jardinnerais... ;)

 

Je testerais demain, j'ai du temps à "perdre"...

 

Encore merci...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci VDH-Bruno, c'était (410 . "Model") qu'il fallait ajouter au filtre et que j'ai eu grâce à toi...

 

Merci encore de ton aide...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci VDH-Bruno, c'était (410 . "Model") qu'il fallait ajouter au filtre et que j'ai eu grâce à toi...

 

(cons 410 (getvar "ctab"))

Pour un filtre par espace de présentation ;)

 

Merci encore de ton aide...

Toujours un plaisir même si je ne lisp plus.. :(

Apprendre => Prendre => Rendre

Posté(e)

Toujours un plaisir même si je ne lisp plus.. :(

 

Quel dommage !...

J'espère, surtout pour toi, que tu continues quand même la programmation (fonctionnelle).

De ma courte expérience dans la programmation (d'AutoCAD) et la participation aux forums qui lui sont dédiés, tu es la personne qui m'a le plus impressionné par la rapidité avec laquelle tu as appris et acquis les fondamentaux au point de tutoyer les grands maîtres actuels (Evgeniy Elpanov, Lee Mac, etc.) dans des challenges ici ou sur TheSwamp.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Oui c'est un grand dommage pour moi, j'espère y revenir si je retrouve un environnement professionnel plus favorable..

 

Il parait qu'il n'y a pas de mauvais élèves mais de mauvais professeurs, sur l'aspect fonctionnel du langage et de ma progression j'ai eu la chance de croiser un Maître en la matière, je t'en suis extrèmement reconnaissant. :)

 

Amicalement Bruno

(Ps: Même si je ne suis plus très actif sur le forum, je le lis toujours)

Apprendre => Prendre => Rendre

Posté(e)

Salut

 

Je pense comme (gile), c'est dommage.

Mais je ne m'inquiète pas trop car on a des moments professionnels plus calmes et c'est là qu'on se perfectionne et qu'on développe des outils qui étaient en attente.

Au plaisir de te relire.

 

@+

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

  • 2 semaines après...
Posté(e)

Pour en revenir à la personnalisation de SomPoly de (gile), j'ai ajouter à cette commande une sélection multiple de calques... Voici mon code :

(defun c:DHSomPoly ( / List1@ Value1$ Som LstCalq calque Dist)
 (princ "\nSomme des Polylignes par calques")
 (if (not *DHSomPolye@)                ;Unique global variable name to store dialog info
   (setq *DHSomPoly@ (list nil "" ""))
 ) ;_ Fin de if
 (setq Value1$ nil
       List1@ nil
       Som 0
 ) ;_ Fin de setq
 (while (setq lay (tblnext "LAYER" (not lay)))
   (if (not (wcmatch (cdr (assoc 2 lay)) "*|*"))
     (setq List1@ (cons (cdr (assoc 2 lay)) List1@))
   ) ;_ Fin de if
 ) ;_ Fin de while
 (setq List1@ (vl-sort List1@ '<))
 (setq Dcl_Id% (load_dialog "SelectCalque.dcl"))
 (new_dialog "SelectCalque" Dcl_Id%)   ; Set Dialog Initial Settings
 (set_tile "Title" "Sélection de calques")
 (set_tile_list "List1" List1@ Value1$) ;*Included
 ;; Dialog Actions
 (action_tile "List1" "(set_multilist_value \"List1@\" \"Value1$\")")
 ;;*Included
 (setq Return# (start_dialog))
 ;; Unload Dialog
 (unload_dialog Dcl_Id%)
 (setq LstCalq Value1$)
 (foreach calque LstCalq
   (setq Dist (polyLengthByLayer calque))
   (princ
     (strcat "\nLe calque '" calque "' contient " (rtos Dist 2 1) "m") ;_ Fin de strcat
   ) ;_ Fin de if
   (setq Som (+ Som Dist))
 ) ;_ Fin de foreach
 (princ (strcat "\nPour un total de : " (rtos Som 2 1) "m"))
 (princ)
) ;_ Fin de defun
;;;
;;;
(defun polyLengthByLayer (layer / len ss)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 ) ;_ Fin de or
 (setq len 0)
 (if
   (ssget "_X"
          (list '(0 . "lwpolyline") (cons 8 layer) (cons 410 "Model"))
   ) ;_ Fin de ssget
    (progn (vlax-for pl (setq ss (vla-get-ActiveSelectionSet *acdoc*))
             (setq len (+ len (vla-get-Length pl)))
           ) ;_ Fin de vlax-for
           (vla-Delete ss)
    ) ;_ Fin de progn
 ) ;_ Fin de if
 len
) ;_ Fin de defun
;;;
(defun set_tile_list (KeyName$ ListName@ Selected / Item)
 (start_list KeyName$ 3)
 (mapcar 'add_list ListName@)
 (end_list)
 (foreach Item (if (listp Selected)
                 Selected
                 (list Selected)
               ) ;_ Fin de if
   (if (member Item ListName@)
     (set_tile KeyName$ (itoa (- (length ListName@) (length (member Item ListName@)))))
   ) ;if
 ) ;foreach
) ;defun set_tile_list
;;;
(defun set_list_value (SentList$ SentVar$ / SaveVar$ SubList@)
 (setq SubList@ (eval (read SentList$)))
 (setq SaveVar$ (eval (read SentVar$)))
 (set (read SentVar$) (nth (atoi $value) SubList@))
 (if (= (eval (read SentVar$)) "")
   (progn (set (read SentVar$) SaveVar$) (set_tile_list $key SubList@ SaveVar$)) ;progn
 ) ;if
 (princ)
) ;defun set_list_value
;;;
(defun set_multilist_value (SentList$ SentVar$ / SubList@)
 (setq SubList@ (eval (read SentList$)))
 (set (read SentVar$) (list (nth (atoi $value) SubList@)))
 (setq $value (substr $value (+ (strlen (itoa (atoi $value))) 2)))
 (while (/= $value "")
   (set (read SentVar$) (append (eval (read SentVar$))
     (list (nth (atoi $value) SubList@)))
   );set
   (setq $value (substr $value (+ (strlen (itoa (atoi $value))) 2)))
 );while
);defun set_multilist_value

 

Voici le code de SelectCalque.dcl :

//-------------
// SelectCalque
//-------------
SelectCalque : dialog {
 key = "Title";
 label = "";
 : boxed_column {
   label = "Sélection multiple";
   : list_box {
     multiple_select = true;
     key = "List1";//Value1$ from lsp file
     height = 40;
     fixed_height = true;
     width = 50;
     fixed_width = true;
   }
   spacer;
 }
 spacer;
 ok_only
 ;}//SelectCalque

La commande : DHSomPoly...

 

Merci à CadXP pour m'avoir permis de faire cette petite personnalisation...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

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é