-
Compteur de contenus
2 764 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Bred
-
Je sais, mais j'ai tendance par "sécurité" (et pendant mes test) à mettre à nil les listes que je construit avec cons et append ... C'est ce que j'essayais de faire avant que je n'édite mon code... et maintenant que tu l'as fait je me demande sur quoi je blocais .... lovecraft : j'y fairais attention dorénavent. (defun test (lst / LST-F ele N) ;;; commande test avec argument lst (liste à trier) (setq lst (vl-sort lst '>)) ;;; Tri la liste par ordre alphabétique contraire (while lst ;;; Boucle : "tant que lst existe" (setq n (length lst) ;;; nombre d'élément dans liste mis dans variable n lst (vl-remove (setq ele (car lst)) lst) ;;; crées nouvel lst en enlevant 1er élement à toute la liste (et le récupère dans variable ele) lst-F (cons (cons ele (- n (length lst))) lst-F) ;;; construit la liste finale en retranchant le nombre n à la liste restante. ) ) ) ... c'est pas facile à expliquer comme ça en fait ... donc : (test '("a" "b" "c" "f" "a" "c" "f" "g" "t" "b" "c" "a")) retourne (("a" . 3) ("b" . 2) ("c" . 3) ("f" . 2) ("g" . 1) ("t" . 1))
-
J'ai édité ma précédente routine (j'avais une variable inutile qui trainait ...) Je te retourne l'exclamation. Je trouve la récursivité trés "stylé" !... mais j'ai toujours du mal (malgré toutes tes explications diverse) à le "sentir"... mais je ne désespère pas !!!!
-
Comme ça peut-être ? (defun test (lst / LST-F N) (setq lst (vl-sort lst '>) lst-F nil) (while lst (setq n (length (vl-remove (car lst) lst)) lst-F (cons (cons (car lst) (- (length lst) n)) lst-F) lst (vl-remove (car lst) lst)) ) lst-F ) [Edité le 18/5/2007 par Bred]
-
Je propose ça (merci (gile) de ta patience ...) (defun test (lst / LST-F X) (setq lst (acad_strlsort lst) lst-F nil) (repeat (setq x (length lst)) (if (assoc (nth (setq x (1- x)) lst) lst-F) (setq lst-F (subst (cons (nth x lst) (+ (cdr (assoc (nth x lst) lst-F)) 1)) (assoc (nth x lst) lst-F) lst-F)) (setq lst-F (cons (cons (nth x lst) 1) lst-F)) ) ) lst-F ) (test '("a" "b" "c" "f" "a" "c" "f" "g" "t" "b" "c" "a")) -> (("a" . 3) ("b" . 2) ("c" . 3) ("f" . 2) ("g" . 1) ("t" . 1))
-
J'avoue ne pas trop voir où tu peux utilise reverse ... Une solution plus basic : (defun test (lst / A LSTX LSTY LSTZ) (setq a -1) ;lstx nil ;lsty nil ;lstz nil) (repeat (/ (length lst) 3) (setq lstx (append lstx (list (nth (setq a (1+ a)) lst))) lsty (append lsty (list (nth (setq a (1+ a)) lst))) lstz (append lstz (list (nth (setq a (1+ a)) lst))) ) ) (append (list lstx) (append (list lsty) (list lstz))) ) [Edité le 18/5/2007 par Bred]
-
Pas beau... et le plus difficile étant été déjà fait par (gile) ... (defun test (lst / LST-F LST1 X) (setq lst1 (vl-sort (mapcar 'cdr lst) '(lambda (s1 s2) (< (apply 'strcat s1) (apply 'strcat s2)))) lst-F nil x 0) (repeat (length lst) (foreach n lst (if (equal (cdr n) (nth x lst1)) (setq lst-F (append lst-F (list n))) ) ) (setq x (+ x 1)) ) lst-F )
-
un truc basique pour (inc-lst '("d" "e" "f") '("a" "b" "c" "g" "h" "i") "c") : (defun inc-lst (lst-R lst s / a b lst-F) (setq a (reverse (member s (reverse lst))) b (cdr (member s lst)) lst-F (append a (append lst-R b))) lst-F ) le même que ci-dessus en le "compilant" (defun inc-lst (lst-R lst s) (append (reverse (member s (reverse lst))) (append lst-R (cdr (member s lst)))) ) Ah ben tient, un truc qui fonctionne avec (inc-lst '("d" "e" "f") '("a" "b" "c" "g" "h" "i") "c") et (inc-lst '("d" "e" "f") '("a" "b" "c" "g" "h" "i") 3) (defun inc-lst (lst-R lst s / s) (if (equal (type s) 'INT) (setq s (nth (1- s) lst)) ) (append (reverse (member s (reverse lst))) (append lst-R (cdr (member s lst)))) ) [Edité le 17/5/2007 par Bred]
-
(gile).... arrête de me faire du mal !!!... http://gifs.toutimages.com/images/personnages/person_028.gif
-
Re, je pense qu'il y a une erreur dans ton code : (while (setq cal (nth n lstdata)) (if (not (member (vlax-variant-value cal) calq)) (progn (setq lstd (cons (nth n lstdata) lstd)) (setq lstt (cons (nth n LstType) lstt)))) (setq n (1+ n)) ) ... mais ça ne fonctionne pas .... Je suis en train de me demander si c'est faisable avec vla-setxdata de "supprimer" quelque chose... :casstet:
-
Bien vu, je pars la dessus ! En fait je reconstruit les lists data et type en enlevant ceux correspodant au calque correspondant avec ceci : (repeat (setq n (length LstType)) (if (not (member (vlax-variant-value (nth (setq n (1- n)) LstData)) calq)) (setq New-LstType (append (list (nth n LstType)) new-LstType) New-LstData (append (list (nth n LstData)) New-LstData)) ) ) ... mais ça ne fonctionne pas ....
-
Bon, je ne sais pas si c'est trés propre, mais ça à l'air de fonctionner comme ça : Je fait un test sur l'existance du 1003, sinon je prends "le seconds 1002". ;;; Routine de gel de calques dans fenêtre ;;; (Gel-Calq-Fen vla-fenêtre (list "nom_du_calque1" "nom_du_calque2") (defun Gel-Calq-Fen (fen calq / xData xType LstData LstType lstd lstt b cal n l) (vla-getxdata fen "" 'xType 'xData) (setq LstType (vlax-safearray->list xType) LstData (vlax-safearray->list xData)) (foreach cal calq (if (member (vlax-make-variant cal) LstData) (setq calq (vl-remove cal calq)) ) ) (if calq (progn (setq n (- (length lstdata) 2) l (- (length lstdata) n) b 0) (repeat n (setq lstd (cons (nth b lstdata) lstd)) (setq lstt (cons (nth b lsttype) lstt)) (setq b (1+ b)) ) (foreach cal calq (setq lstd (cons (vlax-make-variant cal) lstd)) (setq lstt (cons 1003 lstt)) ) (repeat l (setq lstd (cons (nth b lstdata) lstd)) (setq lstt (cons (nth b lsttype) lstt)) (setq b (1+ b)) ) (setq xData (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length lstd)))) xType (vlax-make-safearray vlax-vbInteger (cons 0 (1- (length lstt))))) (vlax-safearray-fill xData (reverse lstd)) (vlax-safearray-fill xType (reverse lstt)) (vla-setxdata fen xType xData) (vla-display fen 0) (vla-display fen 1) ) ) )[Edité le 16/5/2007 par Bred] [Edité le 16/5/2007 par Bred]
-
patrick_35, je pense avoir trouvé le problème : si il n'y a aucun calque gelé dans la fenêtre, il arrive ce que je cite plus haut (c'est à dire que le 1003 ce met en début de liste).
-
Désolé Patrick mais j'ai toujours le 1003 qui est "n'importe où" (je suis sous 2008 là ...) Pour que ça fonctionne, le 1003 doit être entre les 1002 !!! Je suis un peu dépassé par les divers vlax-make-safearray .... Mais j'ai trouvé un "xdata_variants.lsp" dans les express. Là dedans il reconstruise la liste avec une routine qui s'appelle BuildArrays. Dedans ils utilisent vlax-safearray-put-element ... En fait, en parrallèlle je cherche aussi à faire le "dégeler calque", et je ne comprends pas pourquoi ça ne marche pas aussi (je t'ai repiqué les fonctions principal de construction de safferay ...) ;;; Routine de Degel de calques dans fenêtre ;;; (DeGel-Calq-Fen vla-fenêtre (list "nom_du_calque1" "nom_du_calque2")) (defun DeGel-Calq-Fen (fen calq / LSTDATA LSTTYPE N NEW-LSTDATA NEW-LSTTYPE XDATA XTYPE) (vla-getxdata fen "" 'xType 'xData) (setq LstType (vlax-safearray->list xType) LstData (vlax-safearray->list xData) New-LstType nil New-LstData nil) (repeat (setq n (length LstType)) (if (not (member (vlax-variant-value (nth (setq n (1- n)) LstData)) calq)) (setq New-LstType (append (list (nth n LstType)) new-LstType) New-LstData (append (list (nth n LstData)) New-LstData)) ) ) (setq xData (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length New-LstData)))) xType (vlax-make-safearray vlax-vbInteger (cons 0 (1- (length New-LstType))))) (vlax-safearray-fill xData New-LstData) (vlax-safearray-fill xType New-LstType) (vla-setxdata fen xType xData) (vla-display fen 0) (vla-display fen 1) ) [Edité le 16/5/2007 par Bred]
-
Tu as le choix de la manière ici !
-
Ton code ne fonctionne pas chez moi : Il crées bien un xdata (1003 . "Mon-calque"), mais il ne le créés pas entre les (1002 . "{") ...
-
Ah ben tient... j'étais dessus aussi ... Tous pareil, mais je restait planter à la reconstruction de la list xdata .... merci !!!!
-
... on a un peu l'impression de t'aider dans le vent franchement .... Ton code corriger, revu, simplifier : (defun c:Jpg (/ CDOSSIER NAME SDOSSIER X) (setq Cdossier (getvar "dwgprefix") Sdossier "H:\\Hotels & Convention Centers\\BS Base Audiovisuel\\PLANS_EVENTS_JPG\\" name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_1.jpg")) (setq x 1) (if (findfile name) (while (findfile (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (setq x (+ x 1)) ) ) (setq name (strcat Cdossier(vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (command "_zoom" "ET" "") (command "jpgout" name "") (vl-file-copy (findfile name) (strcat Sdossier (vl-string-trim ".dwg" (getvar "dwgname")) "_ver_"(rtos x)".jpg")) (princ) )
-
où encore plus propre : tu supprime la partie Autocad (la version inetressé) dans la base de registre. Tu auras un Autocad Tout neuf !
-
Depuis 2006 en fait... mais là on est en 2005 .....
-
Alors, en recopiant et adaptant variable pour variable le lisp de Patrick_35, voilà la routine pour geler le calque "Mon_Calque" dans les fenêtres selectionnés : (defun c:test (/ F SEL) (setq sel (ssget "I")) (while (not (setq sel (ssget '((0 . "VIEWPORT,*POLYLINE,SPLINE,ELLIPSE,CIRCLE,REGION")))))) (foreach n (vl-remove-if 'listp (mapcar 'cadr (ssnamex sel))) (if (equal (vla-get-ObjectName (setq f (vlax-ename->vla-object n))) "AcDbViewport") (Gel-Calq-Fen f [b]"Mon_Calque"[/b])) ) (princ) ) ;;; Routine de gel de calque dans fenêtre ;;; (Gel-Calq-Fen vla-fenêtre "nom_du_calque") (defun Gel-Calq-Fen (fen calq / xData xType NewData NewType k) (vla-getxdata fen "" 'xType 'xData) (setq k (vlax-safearray-get-u-bound xType 1)) (setq NewType (vlax-make-safearray vlax-vbInteger (cons 0 (+ k 1)))) (setq NewData (vlax-make-safearray vlax-vbVariant (cons 0 (+ k 1)))) (setq n 0) (repeat (+ k 1) (vlax-safearray-put-element Newtype n (vlax-safearray-get-element xType n)) (vlax-safearray-put-element NewData n (vlax-safearray-get-element xData n)) (setq n (1+ n)) ) (vlax-safearray-put-element Newtype (+ k 1) 1002) (vlax-safearray-put-element NewData (+ k 1) "}") (vlax-safearray-put-element Newtype (- k 1) 1003) (vlax-safearray-put-element NewData (- k 1) calq) (vla-setxdata fen NewType NewData) (vla-display fen 0) (vla-display fen 1) ) à la fin j'ai été obligé de faire (vla-display fen 0) (vla-display fen 1) regen n'a pas l'air de fonctionner ....
-
Merci Patrick_35. J’avais omis bêtement de regarder dans ta page ! :P
-
Salut et merci à tous ! (j'ai eu un lot de réponse des couches- tards et lève tôt !!!) Mais aucune de vos proposition n'est en vlisp ou est transposable .... (command "_vplayer" est ce que je ne veux pas utiliser, justement ! par contre, bonuscad, en entmake je ne l'avais pas tenter parceque l'aide dit que l'on ne peut pas modifier les propriété d'une fenêtre par là (je m'étais cassé le nez pour modifier les lignes de délimitation avant et arrière ...)
-
OK, compris maintenant .... Je vais me coucher. La nuit porte conseil ....
-
Désolé mais ce que je demande soit être bizarre vu que je ne connais pas covadis. c'est que que j'imaginais... mais donc je ne comprends pas : tu veux en fait le point le plus haut des 3 points ? (en passant en revue toutes les faces 3D pour récupérer le point le plus grand sur les Z ?) Mais c'est trop simple pour que ce soit ça ....
-
Salut, j'avoues ne pas trés bien comprendre : ta ligne de commande est trop loin ?
