Aller au contenu

chris_mtp

Membres
  • Compteur de contenus

    406
  • Inscription

  • Dernière visite

Tout ce qui a été posté par chris_mtp

  1. chris_mtp

    Noms de calques

    Toujours la même erreur même avec le code modifié mais c'est pas grave. Gile à déjà fait un énorme travail qui va me simplifier beaucoup le traitement de mes plans. Merci encore à vous deux. John.
  2. chris_mtp

    Noms de calques

    quand j'intégre le lisp dans autocad, il me retourne la commande Commande: llist_layer ; erreur: type d'argument incorrect: consp "0" Je vais voir de mon côté si je peux trouver. Merci quand même. John
  3. chris_mtp

    Noms de calques

    Par contre, j'ai eu une dernière question et après ce lisp sera complet. Comment récupérer la variable de la couleur du calque de manière à insérer le texte avec la couleur du calque correspondant ? Si c'est possible. Sinon c'est pas grave. Merci par avance. John.
  4. chris_mtp

    Noms de calques

    Bravo Bien joué Bonuscad. Ca marche nickel même si je repète plusieurs fois le lisp. John.
  5. chris_mtp

    Noms de calques

    Bonjour Gile, J'ai essayé ton lisp mais toujours ce problème de superposition de textes. J'ai essayé plusieurs manip mais toujours le même prob. Mais je pensais, ce n'est pas un problème de la variable TEXTSIZE car c'est la seule variable commun au décalage en X et en Y. On pourrait par exemple entrer une valeur de texte nous même. Quand on le répète 3 fois de suite, au bout de la 3eme ca marche par contre après plus. De plus, j'ai vu que dans la boîte de dialogue GetLayers, le nom du calque en bas de la 3eme colonne est le même que le premier de la 4eme colonne. Au moment du lancement du lisp, il dit "NOM du calque" redéfinition de la touche. Je sais pas si ce problème est spécifique à AutoCAD 2008 mais...... Sinon au lieu de compter le nombre de caractères du nom de calque le plus long, on ne peut pas insérer un décalage constant de 80 ou 90. Merci par avance de ton aide. John.
  6. chris_mtp

    Noms de calques

    Gile, j'ai testé plusieurs fois le lisp que je t'ai mis avant en sélectionnant un nombre de calques différent. Avec 9 calques, ca marche bien. Au delà de 11 ca bug. Pourquoi ??? Merci de ton aide. John
  7. chris_mtp

    Noms de calques

    J'ai rédéfini les variables de ton code mais toujours des textes superposés. De même, avec le code précedent, on dirait qu'il y a une variable qui bloque entre la première partie du lisp et la fonction Getlayers. Voici le code que j'ai pu assembler. En surligner les parties du code que j'ai modifié. J'ai essayé de modifier le décalage entre les colonnes mais aussi de changer la variable n par m mais nada. (defun c:llist_layer (/ lst1 pti pt nb ts ht lg m) ;; liste des noms de calque (setq lst1 (reverse (getlayers "Textes" nil))) ;; point d'insertion du premier texte (setq pti (getpoint "\nSpécifiez le point haut d'insertion des textes: ")) ;; nombre d'éléments de la liste (setq nb (length lst1)) ;; hauteur de texte courante (setq ts (getvar "TEXTSIZE")) ;; décalage en Y [surligneur] (setq ht (* 1.5 ts))[/surligneur] ;; décalage en X [surligneur] (setq lg (+ (* (apply 'max (mapcar 'strlen lst1)) ts) 90))[/surligneur] ;; pt = point d'insertion des textes (setq pt pti) ;; première colonne [surligneur] (setq m 0)[/surligneur] (repeat (/ nb 2) (command "_.text" pt "" "" (nth m lst1)) [surligneur] (setq m (1+ m)[/surligneur] pt (list (car pt) (- (cadr pt) ht)) ) ) ;; deuxième colonne (setq pt (list (+ (car pti) 70) (cadr pti))) (repeat (- nb (/ nb 2)) (command "_.text" pt "" "" (nth m lst1)) (setq m (1+ m) pt (list (car pt) (- (cadr pt) ht)) ) ) (prin1) ) (defun getlayers (titre lst / toggle_column tmp file lay layers len dcl_id) (defun toggle_column (lst) (apply 'strcat (mapcar (function (lambda (x) (strcat ":toggle{key=" (vl-prin1-to-string x) ";label=" (vl-prin1-to-string x) ";}" ) ) ) lst ) ) ) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (while (setq lay (tblnext "LAYER" (not lay))) (setq layers (cons (cdr (assoc 2 lay)) layers)) ) (setq layers (vl-sort layers '<) len (length layers) ) (write-line (strcat "GetLayers:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir les calques\"") ) ";:boxed_row{:column{" (cond ((< len 12) (toggle_column layers)) ((< len 24) (strcat (toggle_column (sublist layers 0 (/ len 2))) "}:column{" (toggle_column (sublist layers (/ len 2) nil)) ) ) (T (strcat (toggle_column (sublist layers 0 (/ len 3))) "}:column{" (toggle_column (sublist layers (/ len 3) (/ len 3))) "}:column{" (toggle_column (sublist layers (* (/ len 3) 2) nil)) ) ) ) "}}spacer;ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "GetLayers" dcl_id)) (exit) ) (foreach n lst (set_tile n "1") ) (action_tile "accept" "(setq lst nil) (foreach n layers (if (= (get_tile n) \"1\") (setq lst (cons n lst)))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) lst ) J'ai essayé de renommer les variables mais rien n'y fait. Les textes s'insérent tous aux mêmes endroits ou soit certains textes sont superposés. On dirait qu'il y a un problème sur le nombre calques sélectionnés dans la boite de dialogue Getlayers. Je sais pas .... Merci par avance de ton aide. John
  8. chris_mtp

    Noms de calques

    J'ai testé le lisp que tu viens de poster mais il y des calques qui s'insérent deux fois. Un problème surement dans les variables lst1 et lst2. Je sais pas. Mais sinon j'ai déjà ajouté un décalage de +10 en Y pour la deuxième colonne. Et même si je change la variable textsize au maximum que je l'utilise, il n'y a pas de superposition des textes donc c'est bon. Une fois le noms des calques insérés, Après je peux modifier l'emplacement comme je veux. En tout cas, merci Cela va bien m'aider. John.
  9. chris_mtp

    Noms de calques

    C'est bon j'ai trouvé ma réponse sur une réponse d'un post antérieur avec un lisp associé http:// http://www.cadxp.com/XForum+print-fid-73-tid-20383.html?POSTNUKESID=b0babf4d3fb0e2a2db48ec29741f6961 Avec la commande repstring. Merci de ton aide gile. Bien cordialement. John
  10. chris_mtp

    Noms de calques

    On ne peut alors remplacer un texte par un autre à partir d'une simple commande lisp. J'ai bien regarder dans les différents sujets de cadxp mais je n'ai pas trouvé la commande. Existe t-elle ? Merci par avance. John
  11. chris_mtp

    Noms de calques

    Nickel encore une question après c bon je pourrais modifier le lisp selon mes besoins. Comment faire pour utiliser la command find en lisp et remplacer un texte par un autre ? J'ai essayé avec (command "_find" "calques" "layers") mais ca ne marche pas et dans l'aide de VisualLisp, j'ai cherché mais pas trouvé.
  12. chris_mtp

    Noms de calques

    J'ai inséré la partie du code dans le lisp d'origine. Ca marche nickel mais les calques s'affichent dans l'ordre alphabétique inverse de celui proposé dans la boite de dialogue. Il traite les noms de calques de Z à A apparemment et non de A à Z. Existe il une solution ? En tout cas, merci de ton aide gile et de ce lisp assea détaillé. John.
  13. chris_mtp

    Noms de calques

    J'ai beau cherché mais là je suis bloqué Comment puis je récupérer le nom des calques et surtout les insérer sous forme de colonnes ? John
  14. chris_mtp

    Noms de calques

    Voici en fait l'entête que j'ai pu réaliser mais seul hic (defun c:nom_calques (/ pti liste_de_calques nombre_de_calques txt) (setq liste_de_calques (getlayers "Textes" nil)) (setq nombre_de_calques (length liste_de_calque)) (setq pti (getpoint "\nSpécifiez le point haut d'insertion des textes: ")) (foreach label_nombre_de_calques (command "_text" "bg" pti "5" "100" txt) (princ) ) Après avoir coché dans la boîte de dialogue GetLayers, Comment insérer le nom des calques cochés sous forme de texte (ou label) à partir du point d'insertion sous forme de deux colonnes les uns à la suite des autres ? Comment utliliser la commande foreach ? Merci par avance de votre aide. John.
  15. chris_mtp

    Noms de calques

    Oui l'entête du lisp peut paraître bizarre. En effet, il ne marche pas. Je veux tout simplement en sélectionnant dans la boite de dialogue insérer sous forme de texte le noms des calques présents dans un plan. Avant je rentrer les noms des calques à la main et si il y en a 80 ou 100 calques, je les rentre un à un aprés les avoir exporter sous excel d'où mon idée de réaliser ce petit lisp. Merci pour ton aide. John
  16. Bonjour à tous et BONNE ANNEE 2009 Est il possible à partir du lisp ci-dessous en utilisant la fonction Getlayers que gile a programmé d'insérer à la suite sous forme de texte et dans 2 colonnes le noms des calques d'un dessin ? J'ai essayé moi même mais deux choses, Comment définir le nombre de textes et par conséquent de calques à insérer sous forme de texte ? Comment définir un point d'insertion pour que les noms des calques s'insérent les uns à la suite des autres ? (defun c:gel_fen () (foreach l (getlayers "Textes" nil) (setq ptb (getpoint "\nSpécifiez le point d'insertion: ")) (command "-reseau" l) ) (princ) ) ;;=========================================================;; ;; GETLAYERS (gile) 03/11/07 ;; Retourne la liste des calques cochés dans la boite de dialogue ;; ;; arguments ;; titre : le titre de la boite de dialogue ou nil (defaut = Choisir les calques) ;; lst : la liste des calques à pré-cochés ou nil (defun getlayers (titre lst / toggle_column tmp file lay layers len dcl_id) (defun toggle_column (lst) (apply 'strcat (mapcar (function (lambda (x) (strcat ":toggle{key=" (vl-prin1-to-string x) ";label=" (vl-prin1-to-string x) ";}" ) ) ) lst ) ) ) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (while (setq lay (tblnext "LAYER" (not lay))) (setq layers (cons (cdr (assoc 2 lay)) layers)) ) (setq layers (vl-sort layers '<) len (length layers) ) (write-line (strcat "GetLayers:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir les calques\"") ) ";:boxed_row{:column{" (cond ((< len 12) (toggle_column layers)) ((< len 24) (strcat (toggle_column (sublist layers 0 (/ len 2))) "}:column{" (toggle_column (sublist layers (/ len 2) nil)) ) ) (T (strcat (toggle_column (sublist layers 0 (/ len 3))) "}:column{" (toggle_column (sublist layers (/ len 3) (/ len 3))) "}:column{" (toggle_column (sublist layers (* (/ len 3) 2) nil)) ) ) ) "}}spacer;ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "GetLayers" dcl_id)) (exit) ) (foreach n lst (set_tile n "1") ) (action_tile "accept" "(setq lst nil) (foreach n layers (if (= (get_tile n) \"1\") (setq lst (cons n lst)))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) lst ) Merci par avance de votre aide. John
  17. chris_mtp

    Hauteur objets

    Merci Gile pour ces infos. Ca marche.
  18. chris_mtp

    Hauteur objets

    J'ai oublié de joindre le code (defun c:HARBRE (/ ptb pth pti dz txt txta) (setvar "CLAYER" "TEXTE") (setvar "TEXTSIZE" 5) (setvar "TEXTSTYLE" "Standard") (setq ptb (getpoint "\nSpécifiez le point bas de l'arbre: ")) (if (null ptb) (setq ptb (getvar "lastpoint")) ) (setq pth (getpoint ptb "\nSpécifiez le point haut de l'arbre: ")) (setq pti (getpoint ptb "\nSpécifiez le point d'insertion du texte: ")) (setq dz (- (caddr pth) (caddr ptb))) (setq txt (strcat "\nHarbre = " (rtos dz 2 2)"m env.")) (setq txta (strcat "\nZarbre = " (rtos (caddr ptb) 2 2)"m env.")) (command "_text" pti "5" "100" txt) (command "_text" [surligneur] (+ car pti 5)[/surligneur] "5" "100" txta) [surligneur] (command "_pline" ptb pti 0,0 nil)[/surligneur] (prin1) ) En surligné les lignes qui me posent problème. Le premier :pouvoir décaler le texte en haut en spécifiant les coordonnées du point d'insertion du texte txta de +6 en y par rapport à pti Le second : continuer la polyligne à partir de pti de 63m vers la droite (j'ai mesuré la distance).
  19. chris_mtp

    Hauteur objets

    J'ai trouvé pour les variables d'netré de la fonction. Mon texte s'insére bien sur le point d'insertion souhaité mais maintenant j'ai le problème de trouver le bon justifier. Puis d'autre part, trouver le moyen de placer le second texte décaler par rapport à l'ordre. Le texte txt avec pour point d'insertion pti et le second avec pti+6 dans le sens des y.
  20. chris_mtp

    Hauteur objets

    (command "_leader" ptb pti "" "" "txt") De même avec la commande leader ca na marche pas; L'aide Edituer de Lisp est bien mais elle comprend aussi la programmation VBA du coup c'est difficile pour trouver un exemple de code en lisp. Ce je voudrais en fait c'est insérer une polyligne sous mon texte qui démarre de mon arbre et pouvoir ajouter du texte audessus comme le Zsol de l'arbre par exemple. Merci par avance.
  21. chris_mtp

    Hauteur objets

    C'est bon je commence à comprendre un petit peu mieux le lisp mais j'ai deux questions. 1-Comment faire pour insérer une série de texte aligner les uns en bas des autres sous forme de colonne ? 2-Comment tracer une polyligne entre deux points prédéfini ? J'ai essayé d'insérer un espace, ca marche pas. J'ai essayé de définir le point d'insertion du texte mais je ne connais pas l'ordre d'entrer des paramètres de la commande _text (defun c:HARBRE (/ ptb pth pti dz dz1 txt txt1) (setvar "CLAYER" "TEXTE") (setvar "TEXTSIZE" 5) (setvar "TEXTSTYLE" "Standard") (setq ptb (getpoint "\nSpécifiez le point bas de l'arbre: ")) (if (null ptb) (setq ptb (getvar "lastpoint")) ) (setq pth (getpoint ptb "\nSpécifiez le point haut de l'arbre: ")) (setq pti (getpoint ptb "\nSpécifiez le point d'insertion du texte: ")) (setq dz (- (caddr pth) (caddr ptb))) (setq dz1 ((caddr ptb))) (setq txt (strcat "\nHarbre = " (rtos dz 2 2)"m")) (setq txt1 (strcat "\nZarbre = " (rtos dz1 2 2)"m")) (command "_text" txt,txt1,pti) (prin1) ) Merci par avance.
  22. chris_mtp

    Hauteur objets

    J'ai essayé de programmer mon premier lisp mais rien compris. Pourquoi ai je l'erreur suivante erreur: structure incorrecte de la liste en entrée Je n'ai pourtant que 3 varirables dans mon lisp (defun c:HARBRE ( / ptb pth dz) (setvar "CLAYER" "TEXTE") (setvar "LUPREC" 2) (initget 8) (setq ptb (getpoint "\nSpécifiez le point bas de l'arbre: ")) (if (null ptb) (setq ptb (getvar "lastpoint"))) (cond (ptb (initget 41) (setq pth (getpoint ptb "\nSpécifiez le point haut de l'arbre: ")) (setq dz (caddr pth) - (caddr ptb)) (princ (strcat "\nHauteur arbre = : " (dz))) (prin1) ) Autre chose : Etant débutant en lisp, pour l'instant j'essaye d'afficher la différence de hauteur. Pour l'insertion du texte, je ne trouve pas la commande. Merci d'avance de votre aide. John
  23. chris_mtp

    UN RECTANGLE ???????

    Avec une fmult, je pense que tu as une vrai poly fermé non ? de plus, en utilisant les touches F8 et F3 tu peux t'en sortir. Tu peux y ajouter un cadre autour si ca te fais plaisir mais ........
  24. As tu essayé le lisp IXl de patrick qui je pense répond à tes attentes et en plus est très simple d'utilisation ?
  25. Bonjour à tous et à toutes. Joyeux Noël. Je suis confronté de plusieurs fois à répéter la même manip plusieurs fois selon le nombre d'arbres ou de poteau que je compte dans mon dessin. En efft, je dois écrire pour chaque arbre la hauteur de celui ci avec comme principe de mesurer la distance en sélectionnant le bloc point topo du bas de l'arbre et puis du haut et enfin avec un style de police Standard de taille 1, écrire la hauteur correspondante. Quelqu'un aurait il une idée pour juste en sélectionnant les deux blocs points de l'arbre écrire la hauteur sous le forme "Hauteur arbre =xx.xxm env." avec xx.xx correspondant à la dénivelée entre les z insertions des deux blocs points topo ? Merci par avance de votre aide et encore Joyeuses Fêtes. John
×
×
  • 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é