Aller au contenu

bonuscad

Membres
  • Compteur de contenus

    5 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    56

Tout ce qui a été posté par bonuscad

  1. C'est la bonne réponse, mais tu peux décomposer aussi ta polyligne pour revenir à ces éléments individuels. Voici par un exemple basique fictif un extrait pour transférer un axe composé d'une droite, d'un arc puis d'une droite. Commande: PISCOM Mode de construction des éléments: [Reinit/CHarge/CReation/Effacement/Fin] <CReation>: Mode Création de [POInt/DIStance/DROite/CERcle/LIAison/SORtir]<DROite>: Droite avec points [Existants]/<RETURN pour selection ligne>: Choisissez une ligne : POI PT1 124.7656 194.0227 POI PT2 145.8121 212.6672 Inversion du sens de parcours [Oui/Non]? <Non>: DRO DR1 PT1 PT2 Mode Création de [POInt/DIStance/DROite/CERcle/LIAison/SORtir]<DROite>: CER Cercle avec points et distances [Existants]/<RETURN pour selection cercle>: Choisissez un arc ou un cercle : POI PT3 166.1164 189.7470 Inversion du sens de parcours [Oui/Non]? <Non>: O DIS LG1 -30.6203 CER CR1 PT3 LG1 Mode Création de [POInt/DIStance/DROite/CERcle/LIAison/SORtir]<CERcle>: DRO Droite avec points [Existants]/<RETURN pour selection ligne>: Choisissez une ligne : POI PT4 173.3676 219.4963 POI PT5 203.0122 212.2706 Inversion du sens de parcours [Oui/Non]? <Non>: DRO DR2 PT4 PT5 Mode Création de [POInt/DIStance/DROite/CERcle/LIAison/SORtir]<DROite>: SOR Mode de construction des éléments: [Reinit/CHarge/CReation/Effacement/Fin] <CReation>: F Ecriture du fichier de commande POI PT1 124.7656 194.0227 POI PT2 145.8121 212.6672 POI PT3 166.1164 189.7470 POI PT4 173.3676 219.4963 POI PT5 203.0122 212.2706 DIS LG1 -30.6203 DRO DR1 PT1 PT2 DRO DR2 PT4 PT5 CER CR1 PT3 LG1
  2. Bonjour, Avec une version pleine tu dois pouvoir utiliser les XDATA. Ça demande la programmation en lisp, mais ça peut être très efficace. Voir par exemple ce SUJET.
  3. Bonjour, Je ne vais pas répondre directement à ton besoin, mais te proposer une autre solution que j'utilise. Avec les routines suivantes je peut attacher des images géo-référencées sans me soucier de trouver le nom exact. Il suffit que je survole la zone (dans le système géo-référencé) et il m'affiche le nom de l'image concernée, je n'ai plus qu'a cliquer pour attacher l'image correspondante. Je l'ai fait pour le SCAN25 et la BD-ORTHO. Bien sur il faudra adapter les chemins réseau et les préfixes des images (celle fournies de fonctionnent que pour mon département) Si tu as besoin de plus éclaircissement...? (defun trunc_scan (xr / ia) (setq ia (itoa (fix (/ xr 10000.0)))) (strcat (cond ((< (strlen ia) 3) "0") ((< (strlen ia) 2) "00") (T "") ) (strcat ia "0") ) ) (defun c:SCAN25 ( / ent_text dxf_ent key img_name folder) ; (setvar "LIMCHECK" 0) ; (setvar "LIMMIN" '(760000.0 6345000.0)) ; (setvar "LIMMAX" '(855000.0 6485000.0)) (setq ent_text (entmakex (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 1 "") (cons 10 (trans (getvar "VIEWCTR") 0 1)) (cons 40 (/ (getvar "VIEWSIZE") 75.0)); (cons 50 (- 0 (getvar "VIEWTWIST"))) (cons 62 250) (cons 71 7) (cons 72 5) (cons 90 1) (cons 63 255) (cons 45 1.5) ) ) dxf_ent (entget ent_text) ) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (setq img_name (strcat "SC25_TOUR_" (trunc_scan (caadr key)) "_" (itoa (+ (atoi (trunc_scan (cadadr key))) 10)) "_L93.tif") dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent) dxf_ent (subst (cons 1 (strcat "{\\fArial;" img_name "}" )) (assoc 1 dxf_ent) dxf_ent) dxf_ent (subst (cons 40 (/ (getvar "VIEWSIZE") 75.0)) (assoc 40 dxf_ent) dxf_ent) ) (entmod dxf_ent) ) ) ) (cond ((eq (car key) 3) (entdel ent_text) (setq folder "K:\\4-SCAN\\1-SCAN25\\SC25_TOUR_TIF_LAMB93_DEP07\\") (if (findfile (strcat folder img_name)) (progn (princ (strcat "\nCharge l'image: " (strcat folder img_name))) (setvar "FILEDIA" 0) (setvar "CMDECHO" 0) (command "_MAPIINSERT" (strcat folder img_name) "_no") (sssetfirst nil (ssget "_L")) (ai_draworder "_back") (setvar "FILEDIA" 1) (setvar "CMDECHO" 1) ) (princ (strcat "\nL'image " img_name " est introuvable!")) ) ) ) (prin1) ) (defun trunc_ortho (xr / ia) (setq ia (itoa (fix (/ xr 10000.0)))) (strcat (cond ((< (strlen ia) 3) "0") ((< (strlen ia) 2) "00") (T "") ) (if (> (- (fix (/ xr 1000)) (* 10 (fix (/ xr 10000)))) 4) (strcat ia "5") (strcat ia "0") ) ) ) (defun c:BD_ORTHO ( / );(ent_text dxf_ent key img_name folder) ; (setvar "LIMCHECK" 0) ; (setvar "LIMMIN" '(760000.0 6345000.0)) ; (setvar "LIMMAX" '(855000.0 6485000.0)) (setq ent_text (entmakex (list (cons 0 "MTEXT") (cons 100 "AcDbEntity") (cons 100 "AcDbMText") (cons 1 "") (cons 10 (trans (getvar "VIEWCTR") 0 1)) (cons 40 (/ (getvar "VIEWSIZE") 75.0)); (cons 50 (- 0 (getvar "VIEWTWIST"))) (cons 62 250) (cons 71 7) (cons 72 5) (cons 90 1) (cons 63 255) (cons 45 1.5) ) ) dxf_ent (entget ent_text) ) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (setq img_name (strcat "07-2014-" (trunc_ortho (caadr key)) "-" (itoa (+ (atoi (trunc_ortho (cadadr key))) 5)) "-LA93-0M50.ecw") dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent) dxf_ent (subst (cons 1 (strcat "{\\fArial;" img_name "}" )) (assoc 1 dxf_ent) dxf_ent) dxf_ent (subst (cons 40 (/ (getvar "VIEWSIZE") 75.0)) (assoc 40 dxf_ent) dxf_ent) ) (entmod dxf_ent) ) ) ) (cond ((eq (car key) 3) (entdel ent_text) (setq folder "K:\\1-BDORTHO\\ORTHO-2014\\BDO_RVB_0M50_ECW_LAMB93_D07-2014\\") (if (findfile (strcat folder img_name)) (progn (princ (strcat "\nCharge l'image: " (strcat folder img_name))) (setvar "FILEDIA" 0) (setvar "CMDECHO" 0) (command "_MAPIINSERT" (strcat folder img_name) "_no") (sssetfirst nil (ssget "_L")) (ai_draworder "_back") (setvar "FILEDIA" 1) (setvar "CMDECHO" 1) ) (princ (strcat "\nL'image " img_name " est introuvable!")) ) ) ) (prin1) )
  4. Bonjour, Je ne pensais pas à devoir ressortir des lisps datant d'une dizaine d'années; qui ne me servent désormais plus du tout. Je ne fais plus de projet routier et piste n'est plus utilisé, Covadis (Autopiste) a pris la place. D'ailleurs ce logiciel n'est plus disponible à la vente et la dernière version doit poser des problèmes pour être utilisé sur du matériel de nos jour et les OS actuellement utilisé. (port parallèle absent pour brancher le dongle, logiciel en 32 bit développé en Fortran) Bref plus grand monde doit l'utiliser... Je vais donc te fournir un lisp4piste.zip de fonction que j'utilisais à l'époque, je ne pourrais plus (et ne voudrais plus) me pencher sur la correction ou l'amélioration de ceux-ci. Donc à prendre tel quel! Un petit descriptif (de souvenir) des fonctions jointes: clothoide : pour dessiner sous autocad une clothoide entre une droite et un cercle (pas d'ove: entre cercle et cercle). idclo : pour identifier sous autocad les paramètres d'une clothoide dessiné avec la fonction précédente. piscom : pour créer sous autocad un fichier de commande pour piste avec des eléments d'axe en plan dessiné sous autocad pour recréer cet axe sous piste en relisant ce fichier de commande créé. trf2dwg : procédure pour importé un fichier TRF depuis piste vers Autocad. gere-trf : outil pour exploité le TRF importé sous autocad et visualiser les profil en travers et profil en long (ce dernier est inachevé me semble t-il de souvenir) interpol : permet sous autocad de faire une interpolation avec des point 3d de la topo afin de faire une coupe (profil en travers) précise. C'est une interpolation manuel/semi-automatique assistée. semfic : sert entre autre à mettre les points interpolés avec la fonction ci-dessus dans un fichier qui pourront ainsi être relus dans piste pour recréer les coupes avec la fonction reprise de TN. coupe_tn : ne sert pas du tout pour piste, mais reprend la philosophie des profils de gere-trf sans passer par le logiciel piste. , Voilà pour la description rapide, tu aura peut être du mal a te familiariser avec ces routines. Elles sont dans l'état de l'époque et n'ont jamais évoluées depuis. Bon courage!
  5. bonuscad

    Changement calque bloc "U"

    Copie-colle en ligne de commande et selectionne ton bloc dynamique (vla-get-effectivename (vlax-ename->vla-object (car (entsel)))) Mais en même temps, dans la palette de propriété tu as aussi le nom effectif du bloc??
  6. Bonjour, J'ai tenté ceci sans avoir testé en profondeur (donc certainement améliorable) (defun C:Offset4Scheme ( / obj ent vla-ent pt_sel param deriv alpha dis_offset where_pt v1 v2 det_or e_last obj_vlax AcDoc Space) (while (not (setq obj (entsel "\nSélectionner l'objet à décaler: ")))) (setq ent (car obj) vla-ent (vlax-ename->vla-object ent)) (cond ((member (vlax-get-property vla-ent 'ObjectName) '("AcDbPolyline" "AcDb2dPolyline") ) (setq pt_sel (vlax-curve-getClosestPointTo vla-ent (trans (cadr obj) 1 0)) param (vlax-curve-getparamatpoint vla-ent pt_sel) deriv (vlax-curve-getfirstderiv vla-ent param) alpha (atan (cadr deriv) (car deriv)) pt1_start (vlax-curve-getStartPoint vla-ent) pt1_end (vlax-curve-getEndPoint vla-ent) par (vlax-curve-getParamAtPoint vla-ent pt1_end) ) (redraw ent 3) (initget "Par _Through") (setvar "OFFSETDIST" (if (not (setq dis_offset (getdist (strcat "\nSpécifiez la distance de décalage ou [Par] <" (if (< (getvar "OFFSETDIST") 0) "Par" (rtos (getvar "OFFSETDIST"))) ">: ")))) (progn (if (< (getvar "OFFSETDIST") 0) (setq dis_offset "Through")) (getvar "OFFSETDIST")) (if (eq dis_offset "Through") -1 dis_offset) ) ) (if (< (getvar "OFFSETDIST") 0) (princ "\nAttribuez une valeur à \"Par le point\": ") (princ "\nSpécifiez un point sur le côté à décaler: ") ) (initget 9) (setq where_pt (getpoint)) (if (< (getvar "OFFSETDIST") 0) (setvar "OFFSETDIST" (distance (vlax-curve-getClosestPointToProjection vla-ent (trans where_pt 1 0) (mapcar '- (trans (getvar "VIEWDIR") 1 0) (trans '(0 0 0) 1 0)) T ) (list (car (trans where_pt 1 0)) (cadr (trans where_pt 1 0))) ) ) ) (redraw ent 4) (setq alpha (atan (cadr deriv) (car deriv))) (setq v1 (mapcar '- (polar pt_sel alpha 1.0) pt_sel) v2 (mapcar '- (trans where_pt 1 0) pt_sel) ) (setq det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2))) (cond ((> det_or 0.0) (setvar "OFFSETDIST" (- (abs (getvar "OFFSETDIST"))))) ((< det_or 0.0) (setvar "OFFSETDIST" (abs (getvar "OFFSETDIST")))) ) (setq e_last ent) (if (and e_last (vl-catch-all-error-p (vl-catch-all-apply 'vla-Offset (list (vlax-ename->vla-object e_last) (getvar "OFFSETDIST") ) ) ) ) (progn (setq e_last nil) (princ "\nL'objet ne peut pas être décalé.")) (progn (setq e_last (entlast) obj_vlax (vlax-ename->vla-object e_last) AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) l_pt (cons (car pt1_start) (cons (cadr pt1_start) (cddr (reverse (cons (cadr pt1_end) (cons (car pt1_end) (cddr (reverse (vlax-get obj_vlax 'Coordinates))))))))) ) (if (eq (vla-get-ObjectName obj_vlax) "AcDbPolyline") (vlax-invoke Space 'AddLightWeightPolyline l_pt) (vlax-invoke Space 'AddPolyline l_pt) ) (entdel e_last) ) ) ) (T (princ "\nL'objet ne peut pas être décalé.")) ) (princ) )
  7. bonuscad

    FUN / Devinette

    Moi aussi, j'ai pris de l'avance sur ma retraite !
  8. Par hasard, l'insertion n'aurait pas été faite en vue de dessous par mégarde?
  9. Bonjour, 1ère question: Tes polylignes sont de quelle nature? Polyligne2D, Polyligne3D ou Polyligne2D optimisée (LWPOLYLINE) Celles ci comportent elles des segments d'arc? 2ème question: Travaille tu en 2D dans le SCG / SCU (parallèle au SCG) ou dans des SCU en 3D. Suivants les réponses cela peut simplifier les procédures...
  10. On peut s'affranchir d'un formatage, donc conserver son OS installé. Il faut démarrer Windows en mode réparation pour ensuite accéder à la console de commande où on lancera l'utilitaire: BOOTREC /FixMBR Et là l'activation de licence d'AutoCAD sera demandé lors de l'installation. J'ai du y recourir lors de mise à jour importante de windows 10 (version build) ou celui-ci doit tripatouiller dans le MBR car Autocad ne reconnaissait plus la licence et impossible de l'activer!!!, merci Microsoft! NB: L'install était sur un SSD, je ne sais pas si ça vient de là: MBR géré différemment?
  11. bonuscad

    Macro

    Mateo, Voici un script à lancer DANS ton fichier DXF. Il va traiter tout ton dessin sans intervention. Bien sur ce script sera à adapter selon chaque dessin, ou alors calculer les coordonnées de déplacement en diesel à l'aide des variables EXTMIM et EXTMAX. Ici dans l'exemple je l'ai fais en dur (avec excel ça peut ce faire rapidement) mon_script.zip
  12. bonuscad

    Macro

    Dans la deuxième macro, tu ne dois pas ré-utiliser qselect ?!? Sans pouvoir tester, se serait plutôt: ^C^C_move;_previous;\\ Autrement pour pouvoir monter un script, un retour des commandes _.-LAYER ? ; Et de ce que retourne les variables EXTMIN EXTMAX
  13. bonuscad

    Macro

    Bonjour, _QSELECT est effectivement un problème dans les macros car cette commande ne rend pas la main à la macro et celle ci ne peut se terminer. Il te faut peut être procéder différemment pour pouvoir profiter des filtres de qselect. En tout premier lieu il te faudrait utiliser "qselect" normalement. En deuxième étape lancer ta macro en l'ayant adaptée. (changer la pause de sélection par l'option "_previous") Ainsi tes objet filtrés précédemment seront sélectionnés. Ça oblige de scinder ta macro en 2 actions, mais c'est la seule façon qui pourra aboutir à ce que tu désire faire. Cette méthode va empêcher la répétition sur tout le dessin. Pour la répétition, peut être s'orienter encore sur une autre façon. Utiliser la propriété des Calques Verrouillés, ainsi tu pourrait faire une sélection sur "Tout" et malgré que tous les objets soient sélectionnés, seul ceux qui sont sur le calque "Déverrouillé" subiraient la modification désiré. Mais ici ce ne serait plus une macro, mais plutôt un script à utiliser pour automatiser sur le dessin complet.
  14. Je partage l'avis de La Lozère. Sous LT la commande INSERM (insertion multiple est l'idéale pour un calepinage) En plus on peut se contenter d'un seul bloc (par exemple "dalle") de référence unique qui serait un carré de 1x1. Lors de l'insertion multiple on donne les dimension des dalles désirées. Par exemple si le plan est en mètre, pour des dalles de 1200x600 on donnera 1.2 en x et 0.6 en y Un nombre fictif de rangées et de colonnes (On pourra y revenir par la suite...) La distance entre rangées (ici dans l'exemple on reprendrait 0.6) La distance entre colonnes (ici dans l'exemple 1.2) On obtient alors un objet unique que si l'on sélectionne, on pourra facilement agir sur le nombre de rangées et de colonnes à travers la palette de propriété pour couvrir entièrement notre plafond. Y a plus qu'a faire la multiplication des nombres de rangées par celui des colonnes pour avoir le quantitatif...
  15. Une idée comme ça! As tu vérifier le paramètrage de ton anti-virus? Certain (suivant la configuration) ont tendance à surveiller en permanence l'activité d'Autocad, cela peut ralentir considérablement les temps de réponse... Je ne me rappele plus ce qu'il faut exclure pour avoir des temps de réponse fluide!
  16. bonuscad

    faire un break

    Bonjour, Regarde cette discussion, le bout de code peut être un bon départ pour avoir les intersections...
  17. bonuscad

    Mode administrateur

    Bonjour, L'administration où je travaille a déployé AutocadMap 3D 2014 (avec Covadis). Tous les postes DAO sont identiques et ont été "maquettés". Je sais qu'ils ont du débrider quelques permissions (à leur grand regret) pour que cela fonctionne correctement. Je crois que ça concerne l’accès aux dossier "ProgramData" et "Programmes" où ils ont du donné l'accès à l'utilisateur. Pour les impressions aussi, ils ont été obligé de nous donner un accès direct (par IP) sans passer par un serveur d'impression qui log les travaux, pour qu'il n'y ait pas de problèmes. Je dois reconnaitre que l'utilisation d'Autocad ne me pose pas de problème, mais par exemple, je ne peux pas installer un plugin proposé sur le site d'AutoDesk. Les lisps ou des dll, eux ne me posent pas de problèmes, je peux les charger. Personnaliser son environnement et aussi possible. Donc avec une gestion fine des droits, je dirais qu'il est possible d'utiliser Autocad sans être administrateur. NB: Pour Autocad MAp (ce qui est mon cas), il a fallu lancé au moins une fois l'application en administrateur pour qu'Autocad Map se paramètre correctement pour les connexions aux données. Voici le retour que je peux faire, je ne pourrais être plus précis (vu que je ne suis pas administrateur)
  18. bonuscad

    Rotation texte et mtext

    Bonjour, Voici comment je peux expliquer la chose... Je vais partir des codes DXF Pour un texte tu auras outre le point d'insertion (dxf 10): (50 . 1.5708) (11 0.0 0.0 0.0) Pour un mtexte tu auras ceci: (11 2.83277e-016 1.0 0.0) (50 . 0.0) qu'on peut assimiler à -> (11 0.0 1.0 0.0) (50 . 0.0) Pour un MTEXT le code 11 est un vecteur (un peu comme le code d'extrusion 210) qu'on peut comprendre comme scu objet, alors que pour un TEXT le code 11 est un point d'alignement. (voir l'aide DXF) Donc pour avoir l'angle dans le SCG, il faut faire la transformation vectorielle en s'aidant du code 11. J'espère avoir été compréhensible?
  19. bonuscad

    Pyrale du buis

    Bonsoir, Je pense ne pas être le seul, c'est impossible! Lors de déplacement nocturne en automobile, j'ai circulé dans la vallée du Rhône aux alentour de Montélimar. Sur plusieurs troncon de route, j'ai été pris dans des nuées de papillons de nuit: la pyrale du buis. Impressionnant, on croirait circuler lors d'une averse de neige. Le pare-brise devient imaculé et le lave-glace n'est d'aucun secours. Il faut espèrer un hiver rigoureux, car à mon avis aucunes mesures ne pourra venir à bout de cette espèce invasive, ou alors la disparition pure et simple du buis quand ils seront complétement dévorés et en souhaitant qu'ils ne se retournent vers d'autres espèces végétales par défaut. J'en ai même chez moi, c'est la première année, bien qu'ils soient très nombreux ce n'est pas encore une invasion à vivre cloitré. Ils sont jolis, mais en surnombre on les apprécie guère...
  20. Effectivement, je l'ai déjà remarqué. Pour des polylignes cela fonctionne bien, on retrouve facilement l'index de position par rapport aux sommets. Par contre pour une ligne ce n'est plus un index mais une longueur de position. Et pour une spline, et bien j'en sais rien c'est resté très obscur pour moi... jamais arrivé à identifier à quoi cela pouvait correspondre. C'est bien la seule fonction vlax-curve qui donne un retour différent de cette valeur paramètre suivant l'objet traité.
  21. Bonjour, Essayes ceci (vérifier que le résultat est bien attendu) (defun string-subst (nam_obj new_string old_string / value_string nbs tmp_nbs) (setq value_string (vlax-get nam_obj 'TextString) nbs 0) (while nbs (if (setq nbs (vl-string-search old_string value_string (setq tmp_nbs nbs))) (setq value_string (vl-string-subst new_string old_string value_string tmp_nbs) nbs (1+ nbs) ) ) ) (vlax-put nam_obj 'TextString value_string) ) (defun vl-position-multi (el l / n l_id l_n) (setq n 0 l_id (mapcar '(lambda (x) (equal x el)) l) ) (repeat (length l_id) (if (car l_id) (setq l_n (cons n l_n))) (setq n (1+ n) l_id (cdr l_id)) ) (reverse l_n) ) (defun c:test ( / doc sel val_text l_val l_new-val indx) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object)) l_val nil l_new-val nil) (ssget "_X" (list '(0 . "MULTILEADER") (cons 410 (getvar "ctab")))) (vlax-for el (setq sel (vla-get-activeselectionset doc)) (cond ((setq val_text (vla-get-TextString el)) (cond ((eq (type (read val_text)) 'REAL) (setq l_val (cons val_text l_val) l_new-val (list (rtos (+ 0.04 (read val_text)) 2 2)) ) ) (T (setq indx (vl-position-multi 61 (vl-string->list val_text))) (foreach n indx (setq l_val (cons (substr val_text (+ 2 n) 6) l_val) l_new-val (cons (rtos (+ 0.04 (read (substr val_text (+ 2 n) 6))) 2 2) l_new-val) ) ) ) ) ) ) (if (and l_val l_new-val) (repeat (setq nb (length l_val)) (string-subst el (car l_new-val) (car l_val)) (setq l_new-val (cdr l_new-val) l_val (cdr l_val)) ) ) ) (prin1) )
  22. Je pense qu'il y a mieux pour faire des imports de points même sans Covadis. L’intérêt ici est surtout pour MAP. Voici par exemple un autre exemple tiré de data.gouv.fr, il concerne les bornes de rechargement pour les véhicules électriques sur la France entière. Je vous cache pas que j'ai eu besoin de retoucher le CSV téléchargé: *convertir le séparateur de "," à ,";" (ils ont la bonne idée d'utiliser la virgule dans leur cellules) *supprimer les retour de ligne présent dans certaines cellules... *supprimer la colonne sans intitulé (ou alors rajouter un intitulé) Le résultat sera dans un système de projection "WGS84", système à attribuer au dessin si l'on veut le reprojeter dans un autre système. Voici l'extrait de l'import complet (notez bien que la latitude est le Y et la longitude le X) avec le fichier joint pour obtenir les textes et les Données d'Objets. NB:Autocad peut afficher qu'il ne répons pas, mais laissez faire (Ne tuez pas la tâche), pour moi une trentaine de secondes ont suffit pour faire l'import et qu'Autocad reprenne la main normalement. IRVE-201605.zip
  23. Bonjour, Je vais partager une routine lisp que j'ai conçue pour l'import de points à partir d'un fichier CSV. Je poste ici, car c'est plutôt destiné à Autocad Map, peut être que ça peut fonctionner sous une version classique... (pas testé) Celle ci permet de générer les points géolocalisés avec: - Soit constitution automatique des Données d'objet pour les points - Soit écritures automatique de données sous formes de texte. - Soit les deux formes (Textes et OD) - Soit Aucun; juste les points... Je vous joins un fichier CSV tiré depuis Data.gouv.fr pour tester la routine et voir ainsi la structure souhaitée du fichier CSV. Pour un bon import il est souhaitable d'avoir une première ligne d'intitulé et au minimum les données X et Y en nombres réels. L'agencement de l'ordre des colonnes de données dans le fichier CSV n'a pas d'importance, il suffit de répondre correctement au question posées par la routine (Caractère, Entier, Réel , X, Y) Voilà, si ça peut faire le bonheur d'utilisateurs! Le code (defun translate_str (word / nw_str) (foreach el (mapcar '(lambda (str) (vl-string->list str)) word) (setq nw_str (cons (subst 95 32 el) nw_str))) (reverse (mapcar '(lambda (str) (vl-list->string str)) nw_str)) ) (defun c:readCSV ( / input f_open key l_read make_value flag lay_nam ht_txt n i l_od table_def x_data y_data new_pt data_str name_lay e_last field_od typ_od od_data ) (setq input (getfiled "Sélectionner un fichier CSV" "" "csv" 2) f_open (open input "r") key nil ) (while (setq l_read (read-line f_open)) (if (not key) (progn (if (not (tblsearch "LAYER" (vl-filename-base input))) (entmake (list (cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord") (cons 2 (vl-filename-base input)) (cons 70 0) (cons 62 1) (cons 370 -3) (cons 6 "Continuous") ) ) ) (print l_read) (initget "Oui Non") (if (eq (getkword "\nConstituer intitulé de calques ou OD avec la 1ère ligne? [Oui/Non] <N>: ") "Oui") (progn (initget "OD Texte Deux Aucun") (setq make_value (getkword "\nInscrire les valeurs en tant que [OD/Texte/Deux/Aucun]? <Deux>: ") flag T) (if (not make_value) (setq make_value "Deux")) (while (/= (substr l_read 1 (vl-string-position 59 l_read)) "") (setq lay_nam (cons (substr l_read 1 (vl-string-position 59 l_read)) lay_nam)) (if (not (tblsearch "LAYER" (substr l_read 1 (vl-string-position 59 l_read)))) (if (or (eq make_value "Deux") (eq make_value "Texte")) (entmake (list (cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord") (cons 2 (substr l_read 1 (vl-string-position 59 l_read))) (cons 70 0) (cons 62 7) (cons 370 -3) (cons 6 "Continuous") ) ) ) ) (if (vl-string-position 59 l_read) (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read)))) (setq l_read "") ) ) (setq l_read (read-line f_open) ht_txt (getdist (getvar "VIEWCTR") (strcat "\nHauteur du texte <" (rtos (getvar "TEXTSIZE") 2) ">")) lay_nam (reverse lay_nam) ) (if ht_txt (setvar "TEXTSIZE" ht_txt)) ) (setq flag nil) ) ) ) (setq n 0 i 0) (while (vl-string-position 59 l_read) (if (not (zerop n)) (setq l_read (substr l_read (+ 2 (vl-string-position 59 l_read))))) (set (read (strcat "data_" (itoa (setq n (1+ n))))) (substr l_read 1 (vl-string-position 59 l_read))) ) (if (not key) (progn (repeat n (princ (strcat "\"" (strcat "data_" (itoa (setq i (1+ i))) " = " (eval (read (strcat "data_" (itoa i))))))) (initget 1 "Entier Reel Chaine") (setq key (getkword "\nLa donnée est un [Entier/Reel/Chaine]?: ")) (cond ((eq key "Entier") (set (read (strcat "typ_" (itoa i))) (cons 'INT 0)) (setq l_od (cons "Integer" l_od)) ) ((eq key "Reel") (initget "X Y Autre") (setq key (getkword "\nValeur de la donnée [X/Y/Autre]? <Autre>: ")) (cond ((eq key "X") (set (read (strcat "typ_" (itoa i))) (cons 'REAL 1))) ((eq key "Y") (set (read (strcat "typ_" (itoa i))) (cons 'REAL 2))) (T (set (read (strcat "typ_" (itoa i))) (cons 'REAL 0))) ) (setq l_od (cons "Real" l_od)) ) ((eq key "Chaine") (set (read (strcat "typ_" (itoa i))) (cons 'STR 0)) (setq l_od (cons "Character" l_od)) ) ) ) (setq l_od (reverse l_od) table_def (car (translate_str (list (vl-filename-base input)))) ) (if (and flag (not (member table_def (ade_odtablelist)))) (ade_oddefinetab (list (cons "Tablename" table_def) '("TableDesc" . "") (append '("Columns") (mapcar '(lambda (x y) (list (cons "ColName" x) '("ColDesc" . "") (cons "ColType" y) (cond ((eq y "Character") (cons "DefaultVal" "")) ((eq y "Integer") (cons "DefaultVal" 0)) ((eq y "Real") (cons "DefaultVal" 0.0)) ) ) ) (translate_str lay_nam) l_od ) ) ) ) ) ) ) (setq i 0) (repeat n (cond ((eq (car (eval (read (strcat "typ_" (itoa (setq i (1+ i))))))) 'REAL) (cond ((eq (cdr (eval (read (strcat "typ_" (itoa i))))) 1) (setq x_data (atof (eval (read (strcat "data_" (itoa i)))))) ) ((eq (cdr (eval (read (strcat "typ_" (itoa i))))) 2) (setq y_data (atof (eval (read (strcat "data_" (itoa i)))))) ) ) ) ) ) (cond ((and x_data y_data) (setq new_pt (list x_data y_data) i 0 name_lay lay_nam) (entmake (list '(0 . "POINT") '(100 . "AcDbEntity") (cons 8 (vl-filename-base input)) (cons 10 new_pt) '(210 0.0 0.0 1.0) '(50 . 0.0) ) ) (setq e_last (entlast) field_od (translate_str lay_nam) typ_od l_od) (repeat n (setq data_str (eval (read (strcat "data_" (itoa (setq i (1+ i))))))) (if data_str (progn (setq od_data (cond ((eq (car typ_od) "Character") data_str) ((eq (car typ_od) "Integer") (atoi (if (eq data_str "") "0" data_str))) ((eq (car typ_od) "Real") (atof (if (eq data_str "") "0.0" data_str))) ) ) (if (and flag (or (eq make_value "Deux") (eq make_value "OD"))) (progn (ade_odaddrecord e_last table_def) (ade_odsetfield e_last table_def (car field_od) 0 od_data ) ) ) (if (or (eq make_value "Deux") (eq make_value "Texte")) (progn (entmake (list '(0 . "TEXT") '(100 . "AcDbEntity") (cons 8 (car name_lay)) (cons 10 new_pt) (cons 40 (getvar "TEXTSIZE")) (cons 1 data_str) '(50 . 0.0) '(41 . 1.0) '(51 . 0.0) '(7 . "Standard") '(71 . 0) '(72 . 0) '(11 0.0 0.0 0.0) '(210 0.0 0.0 1.0) '(100 . "AcDbText") '(73 . 0) ) ) ) ) (setq new_pt (polar new_pt (* 1.5 pi) (* 1.5 (getvar "TEXTSIZE"))) name_lay (cdr name_lay) typ_od (cdr typ_od) field_od (cdr field_od) ) ) (setq name_lay (cdr name_lay) typ_od (cdr typ_od) field_od (cdr field_od) ) ) ) ) ) ) (close f_open) (setq i 0) (repeat n (set (read (strcat "typ_" (itoa (setq i (1+ i))))) nil) (set (read (strcat "data_" (itoa i))) nil) ) (prin1) ) Supports_Cartoradio.zip
  24. bonuscad

    Nouvelle police de texte

    Bien d'accord, mais ces problèmes tendent a s'estomper avec l'évolution des versions. Même si je tenais ce discours auparavant, je dois reconnaitre que j'utilise de plus en plus les TTF, les SHX sont trop pauvres en style. En fait j'ai tendance à garder le SHX pour les textes techniques, cotations, valeurs d'attribut, textes très nombreux (le shx est moins lourd que le ttf en regénération).... mais pour les textes de présentations ou mise en évidence de caractéristiques, je me tourne vers le TTF. Le problème des polices exotiques demeure dans le sens de leur conception: respectent-elle, par exemple la notation unicode de caractères spéciaux? et qu'elles réclament à utiliser un "E-Transmit" pour un partage propre.
  25. Il n'y a aucune polices TTF ou SHX installées par défaut qui permette ce que tu désire. Pour ce, il te faut installer une police, par exemple de ce genre (Attention au éventuel droit d'auteur!) Avec une telle police, tu auras directement le rendu désiré pour une découpe sans évidement des lettres creuses. Si "txtexp" fonctionne, mais demande quelques retouche, tu as aussi la solution (similaire à sauvwmf): Rajouter le périphérique de tracage DXB. Faire une sortie traceur de ton texte. Dans un nouveau dessin, utiliser la commande "CHARGDXB" pour réimporter ta sortie. A ce stade tu auras ton texte prêt à utiliser sans retouche. Nota: Que ce soit avec txtexp ou chargdxb rien ne t'empêche de retravailler tes lettres manuellement (si tu ne trouve aucune police qui ne te satisfasse). Ce n'est plus du texte mais un contour constitué de lignes que tu peux modifier à ta guise.
×
×
  • 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é