Aller au contenu

fabcad

Membres
  • Compteur de contenus

    877
  • Inscription

  • Dernière visite

  • Jours gagnés

    8

Tout ce qui a été posté par fabcad

  1. Merci bseb67, Oui j'ai vu l'erreur et j'ai changé mon exemple avec une valeur de chaine qui contient deux apostrophes. Tu dis de boucler mais sur quoi caractere par caractère ou bien mot par mot, je ne vois pas ou tu veux en venir. :) A+
  2. Bonjour, Ecoutant les conseils avisés de (Gile), je voudrais éviter l'utilisation de fonctions externes aux langages LISP et Visual LISP. C'est le cas de dos_strreplace de doslib qui permet de remplacer un caractère d'une chaine de caractères par un autre caractère ou par une autre chaine de caractères, j'ai cherché un équivalent Visual LISP mais avec vl-string-translate et vl-string-subst je ne vois pas mon texte modifié en entier mais seulement la portion. exemple avec dos_strreplace : (setq index_voie "Rue de l'Eglise d'Artois") (setq index_voie (dos_strreplace index_texte "'" "' ")) --> retourne "Rue de l' Eglise d' Artois" Merci pour vos réponses, Fabrice [Edité le 20/10/2009 par fabcad]
  3. Bonjour, Essaie de mettre les variables cmddia et filedia à 1 dans un premier temps. Si cela fonctionne, il faut lire le pdf du topquiz des galères AutoCAD fait par REBCAO visible sur cadxp. A+
  4. Bonjour, Merci pour vos remarques, voici le code : Il serait simplifiable en visual LISP, mais il fonctionne ! Bonne journée, ;;; SOUS-ROUTINE ;;;------------------------------------------------------------------------ (defun traitement_du_js (js distance_de_decalage sens_deplacement / nbr obj_acad pti pti-numero) (setvar "cmdecho" 0) (setq m:err *error* *error* decale-numeros-err) ;recuperation des variables (setq var-accrobj (getvar "osmode")) (setq var-cmddia (getvar "cmddia")) (setq var-cmdecho (getvar "cmdecho")) (setvar "osmode" 0) (setvar "cmddia" 0) (setvar "cmdecho" 0) (setq nbr (sslength js)) (setq i 0) (while (<= i (- nbr 1)) ;affectation à la variable obj_acad l'objet texte en cours (setq obj_acad (ssname js i)) ;(setq obj_acad (car (entsel))) (setq liste_dxf_obj_acad (entget obj_acad)) (if (= (cdr (assoc 0 (entget obj_acad))) "TEXT") (setq pti (cdr (assoc 11 (entget obj_acad)))) (setq pti (cdr (assoc 10 (entget obj_acad)))) );fin if ;(setq pti (cdr (assoc 10 (entget obj_acad)))) (setq angle_obj_acad (cdr (assoc 50 (entget obj_acad)))) (if (equal sens_deplacement "Haut") (setq angle_deplacement (+ angle_obj_acad (/ PI 2))) (setq angle_deplacement (- angle_obj_acad (/ PI 2))) );fin if angle de deplacement (setq new_pti (polar pti angle_deplacement distance_de_decalage)) (if (= (cdr (assoc 0 (entget obj_acad))) "TEXT") (setq liste_dxf_obj_acad (subst (cons 11 new_pti) (assoc 11 liste_dxf_obj_acad) liste_dxf_obj_acad)) (setq liste_dxf_obj_acad (subst (cons 10 new_pti) (assoc 10 liste_dxf_obj_acad) liste_dxf_obj_acad)) );fin if (entmod liste_dxf_obj_acad) (setq i (+ i 1)) ); fin while ;retour a la normale des variables utilisées (setvar "cmddia" var-cmddia) (setvar "osmode" var-accrobj) (setvar "cmdecho" var-cmdecho) (setq *error* m:err m:err nil) (princ) nil ); fin defun ;;;------------------------------------------------------------------------ ; FONCTION PRINCIPALE (defun c:deplacer_adresses () (vl-load-com) (setvar "cmdecho" 0) (setq distance_de_decalage (getdist "\n Distance du déplacement : ")) (initget "Haut Bas") (setq sens_deplacement (getkword "\n Sens du déplacement [Haut/Bas] ")) (setq js (ssget)) (traitement_du_js js distance_de_decalage sens_deplacement) (setq js nil) (prompt "\n---COPYRIGHT 15/10/09 Par Fabrice DEMIEL---") nil );fin c:centroides ;;;------------------------------------------------------------------------ (prompt "\npour lancer Tapez : deplacer_adresses ")
  5. Merci Bred, Mais je ne souhaites pas que les numéros de voies prennent un autre angle ou une autre position. Merci quand même, Fabcad
  6. Bonjour, J'ai souvent à déplacer des adresses de voies de la chaussée vers leurs parcelles respectives. Pour cela, je déplace tous ces objets un par un (en les orientant suivant la chaussée et en leur attribuant une justification). Voici ma proposition littérale : - Pour chaque collection d'objets texte ou mtexte, - Demander la distance de décalage (avec maintien de la valeur par défaut. - Demander en dessus ou en dessous comme option. - Puis déplacement en partant de leur point d'insertion. Merci pour vos réponses, Fabcad
  7. Bonjour mimine, Ton attribut de bloc doit être de type multi-lignes. et donc en devenant un "mtexte" tu peux lui ajouter un arrière plan. A+
  8. Merci pour vos réponses, je vais pouvoir pour cette sous-routine me passer effectivement des fonctions Doslib. A+ Fabrice
  9. J'ai a traiter des noms de voies et de séparer chaque terme du nom de voie dans des catégories. J'ai fini mon programme mais il me reste cette petite conversion de prénoms composés : jean-rené-charles ou JEAN-RENÉ-CHARLES en Jean-René-Charles Merci mais dos_strtokens permet de séparer les mots et aussi créer en même temps une liste. exemple la chaine de caractères jean-rené-charles traitée par (dos_strtokens "jean-rené-charles" "-" T) donne une liste ("jean' "rené" "charles") qui permet ensuite avec length de compter le nombre de mots. Si vous avez trouvé la meme chose en Visual LISP, je suis preneur. Par contre, je reste en attente pour la question posée, Merci, a+[Edité le 7/10/2009 par fabcad] [Edité le 7/10/2009 par fabcad]
  10. Bonjour voici une sous-routine qui fonctionne mais je ne trouve pas élégant mon : (setq prenom_a_modifier (substr chaine_temporaire 2)) afin d'enlever mon trait d'union qui se trouve en 1ere positon de mon prénom composé concaténé dans cet exemple : "jean-rené-charles" devient "-Jean-René-Charles" Merci pour vos idées, Fabcad ;;; Fonction permettant de changer la casse d'un prénom en vérifiant l'existence d'un prénom composé (defun casse_prenom (/ pos) (setq prenom_a_modifier "jean-rené-charles") (setq pos (vl-string-search "-" prenom_a_modifier)) (if pos (progn ;; Séparation en plusieurs mots du prenom en cours (setq liste_prenoms (dos_strtokens prenom_a_modifier "-" T)) ;; Comptage du nombre de mots dans la liste créee par dos_strtokens (setq nombre_mots (length liste_prenoms)) (setq liste_retournee (mapcar '(lambda (x) (strcat (strcase (substr x 1 1)) (strcase (substr x 2) T) ) ) liste_prenoms ) ;_ fin mapcar ) ;_ fin setq liste_retournee (setq i 0) (setq chaine_temporaire "") (while (<= i (- nombre_mots 1)) (setq prenom_a_modifier (nth i liste_retournee)) (setq chaine_temporaire (strcat chaine_temporaire "-" prenom_a_modifier) ) (setq i (+ i 1)) ) ;_ fin while [b] ;; ICI afin d'enlever le trait d'union qui se trouve en tete de la chaine_temporaire [/b] (setq prenom_a_modifier (substr chaine_temporaire 2)) ) ;_ fin progn de la 1ere condition ;; sinon (setq prenom_a_modifier (strcat (strcase (substr prenom_a_modifier 1 1)) (strcase (substr prenom_a_modifier 2) T) ) ) ) ;_ fin if pos (princ) prenom_a_modifier ) ;_ fin defun casse_prenom [Edité le 7/10/2009 par fabcad][Edité le 7/10/2009 par fabcad]
  11. Bonjour Claudia, As-tu AutoCAD MAP ? Car avec ce logiciel SIG, c'est un jeu d'enfant de connecter une "base de données" Excel avec les annotations AutoCAD MAP (blocs avec attributs mis a jour automatique). Sinon avec AutoCAD, il faut passer par du lisp (voir les routines de Patrick35). A+ Fabrice
  12. Ne pas oublier de mettre un progn si plusieurs traitements dans les conditions.
  13. Ben ca alors, Le PLT est le résultat d'une impression dans un des premiers formats électroniques d'AutoCAD. PLT comme Plot (ting). Avec MS-DOS on pouvait envoyer ces fichiers vers l'imprimante. Ca ne me rajeunit pas ! A+
  14. Hello clerwood, Un script est je pense la meilleure solution : point x1,y1,z1 point x2,y2,z2 point xn,yn,xn a enregistrer dans un fichier bloc-notes avec extension scr et le lancer dans autocad avec la commande script.
  15. Bonjour, Getpoint ne te donnera qu'un triplet de coordonnées x,y,z. par contre getangle ou getorient retournent un angle en radian, il faudra le convertir avec angtos ou angtof. A+ [Edité le 2/10/2009 par fabcad]
  16. Bonjour, Le gestionnaire d'affichage revient toujours en calques par groupe et non en Ordre des dessins à l'ouverture du dwg dans AutoDESK MAP, c'est embêtant car si on lance juste une impression il faut toujours penser a regarder le volet taches.
  17. Bonjour Defrai, Je pense qu'il faudrait passer par les expressions diesel afin d'utiliser la fonction substr qui tronconne la valeur chaine du texte. variable : DWGNAME donne "35208-IMPRESSION-MAP-RURAUX.dwg" donc avec 4 textes : $(substr,$(getvar, dwgname),1,5) donne 35208 $(substr,$(getvar, dwgname),7,10) donne IMPRESSION $(substr,$(getvar, dwgname),18,3) donne MAP $(substr,$(getvar, dwgname),22,6) donne RURAUX J'ai teste avec un acvar sur nom de fichier dans la catégorie documents mais il perd la notion de mise à jour. A+ J'ai appris les expressions diesel dans les champs merci :-) Fabcad [Edité le 29/9/2009 par fabcad]
  18. Bonjour, Sur MAP 2009 il est impossible de se passer de la palette propriétés pour visualiser les données d'objets,il serait plus facile de les modifier ou consulter avec la palette de propriétés rapides en choisissant les champs à apparaitre. a+
  19. Comment sont liés les données d'objets avec les entités AutoCAD MAP ? En créant un entget sur trois objets polylignes, je me suis aperçu qu'il y avait une différence dans l'entête de la liste DXF lorsque les objets possèdent des données d'objets. Ca ressemble aux données etndues (xdatas). Est-ce que l'xdata est le clé entre la donnée d'objet et l'entité AutoCAD ? Car je souhaiterais développer un gestionnaire d'affichage des données d'objets. Merci pour les informations, Fabcad
  20. Alors tu m'epates Gile, Merci beaucoup, je ne voyais pas du tout comment faire cette opération de controle, A+
  21. Merci Gile ca fonctionne, Juste pour : si mot_a_verifier ne fait partie d'aucune des listes alors catégorie = non_defini comment faire l'otherwise ? (cond ((vl-position mot_a_verifier LISTE_PRENOMS) (setq categorie "prenom"));fin member dans LISTE_PRENOMS ((vl-position mot_a_verifier LISTE_TYPE) (setq categorie "type_voie"));fin member dans LISTE_TYPE ((vl-position mot_a_verifier LISTE_ARTICLE) (setq categorie "article"));fin member dans LISTE_ARTICLE ((vl-position mot_a_verifier LISTE_TITRE) (setq categorie "titre"));fin member dans LISTE_TITRE ((vl-position mot_a_verifier LISTE_PARTICULE) (setq categorie "particule"));fin member dans LISTE_PARTICULE ((vl-position mot_a_verifier LISTE_TEXTE) (setq categorie "texte"));fin member dans LISTE_TEXTE "Otherwise" );fin cond (alert categorie) );fin defun verification_mot
  22. Bonjour, Je me suis remis au LISP et j'ai un souci dans une sous-routine de vérification de mot pour faire sortir son appartenance à une catégorie : voici le début de ma sous-routine : (defun verification_mot (mot_a_verifier /) (setq LISTE_PRENOMS (list "Adam" "Adolphe" "Adrien" "Alain" "Albert" "Alexandre" ...) (setq LISTE_TYPE (list "Allée" "Avenue" "Bosquets" "Boulevard" "Canal" "Carre" "Carrefour" ...) (setq LISTE_ARTICLE (list "d'" "de" "de" "de" "l'" "de" "la" "des" "du" "l'" "la")) (setq LISTE_TITRE (list "Abbé" "Amiral" "Capitaine" "Cardinal" "Chanoine" "Colonel" "Commandant" ...) (setq LISTE_PARTICULE (list "D'" "De" "De" "L'" "De" "La" "Des" "Du" "L'" "La" "Le")) (setq LISTE_TEXTE "et") [i] catégorie à retourner dans la fonction "Maitre"[/i] );fin defun verification_mot - Comment faire pour que le texte à vérifier soit comparé aux éléments de chaque liste et retourne une catégorie si l'existence est vérifiée ? si mot_a_verifier fait partie de la liste des prénoms alors catégorie = prenom si mot_a_verifier fait partie de la liste des Types de voies alors catégorie = type_voie si mot_a_verifier fait partie de la liste des Articles alors catégorie = article si mot_a_verifier fait partie de la liste des Titres alors catégorie = titre si mot_a_verifier fait partie de la liste des Particules alors catégorie = particule si mot_a_verifier fait partie de la liste des Textes alors catégorie = texte si mot_a_verifier ne fait partie d'aucune des listes alors catégorie = non_defini Merci pour vos réponses, Fabcad,[Edité le 17/9/2009 par fabcad]
  23. Bonjour, Cela fonctionne aussi pour les textes ou mtextes, A+
  24. Bonjour kclement, Voici une fonction que j'avais trouvé et modifiée, à Tester pour voir les compatibilités v2009 et 2010 : ;;; viewsIO.lsp ;;; ;;; Export and import views ;;; ;;; c:ExportViews ;;; c:ImportViews ;;; c:-ExportViews ;;; c:-ImportViews ;;; ;;; By Jimmy Bergmark ;;; Copyright (C) 1997-2006 JTB World, All Rights Reserved ;;; Website: www.jtbworld.com ;;; E-mail: info@jtbworld.com ;;; ;;; 2000-06-27 ;;; ;;; Tested on AutoCAD 2000 ;;; To do: support for views with saved ucs (defun c:ExportViews (/ fn) (if (setq fn (getfiled "Export views to" (strcat (vl-filename-base (getvar "dwgname")) ".txt") "txt" 1 ) ) (ExportViews fn) ) (princ) ) (defun c:ImportViews (/ fn) (if (setq fn (getfiled "Import views to" (strcat (vl-filename-base (getvar "dwgname")) ".txt") "txt" 8 ) ) (ImportViews fn) ) (princ) ) (defun c:-ExportViews (/ fn x) (setq fn (strcat (vl-filename-base (getvar "dwgname")) ".txt")) (if (setq fn (findfile (if (= "" (setq nn (getstring T (strcat "Enter filename <" fn ">: " ) ) ) ) fn nn ) ) ) (progn (initget "Yes No") (setq x (getkword "\nFile exists. Overwrite? [Yes/No] : ")) (if (= x "Yes") (ExportViews fn) ) ) (princ "\nFile not found.") ) (princ) ) (defun c:-ImportViews (/ fn) (setq fn (strcat (vl-filename-base (getvar "dwgname")) ".txt")) (if (setq fn (findfile (if (= "" (setq nn (getstring T (strcat "Enter filename <" fn ">: " ) ) ) ) fn nn ) ) ) (ImportViews fn) (princ "\nFile not found.") ) (princ) ) (defun ExportViews (fn / e tl f ed) (while (setq e (tblnext "VIEW" (null e))) (setq tl (cons (cdr (assoc 2 e)) tl)) ) (setq f (open fn "w")) (if f (progn (princ "Following views exported:\n") (foreach view tl (setq ed (entget (tblobjname "view" view))) (foreach n '(-1 102 360 102 330 5) (setq ed (vl-remove-if-not '(lambda (x) (/= (car x) n)) ed)) ) (prin1 ed f) (princ "\n" f) (prin1 view) (terpri) ) (close f) ) ) ) (defun ImportViews (fn / tl f) (setq f (open fn "r")) (if f (progn (princ "Following views imported:\n") (while (setq tl (read-line f)) (setq tl (read tl)) (entmake tl) (print (cdr (assoc 2 tl))) ) (close f) ) ) ) ;;;------------------------------------------------------------------------ (prompt "\n Pour lancer Tapez : ExportViews ou ImportViews") (princ) [Edité le 15/9/2009 par fabcad]
  25. fabcad

    urgent : fichier shp

    Bonjour a tous, Pour les SHP, tu peux regarder dans le monde Open Source : GVSIG QGIS etc. Fabcad
×
×
  • 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é