Aller au contenu

DenisHen

Membres
  • Compteur de contenus

    4 029
  • Inscription

  • Dernière visite

  • Jours gagnés

    21

Tout ce qui a été posté par DenisHen

  1. Salut. Je t'ai écris ce bout de code vite fait qui devrait fonctionné (car il fonctionne chez moi sur AutoCAD MAP 2018), la commande est : DHImportPTTopo (defun c:DHImportPTTopo () (setq Separateur ";") ;caractère de séparation des données (setq HautCode 0.6) ;hauteur du texte Code = 0.6 (setq HautAlti 1) ;hauteur du texte Altitude = 1 (setq HautMatri 0.8) ;hauteur du texte Matricule = 0.8 (setq CalqXY "TOPO_PT_XY") ;Nom du calque pour les points en 2D (juste X et Y) (setq CalqXYZ "TOPO_PT_XYZ") ;Nom du calque pour les points en 3D (X, Y et Z) (setq CalqMatri "TOPO_PT_MATRI") ;Nom du calque pour les matricules (setq CalqAlti "TOPO_PT_ALTI") ;Nom du calque pour les altitudes (setq CalqCode "TOPO_PT_CODE") ;Nom du calque pour les codes (if (not (tblsearch "layer" CalqXY)) (command "-calque" "n" CalqXY "") ) ;_ Fin de if (if (not (tblsearch "layer" CalqXYZ)) (command "-calque" "n" CalqXYZ "") ) ;_ Fin de if (if (not (tblsearch "layer" CalqMatri)) (command "-calque" "n" CalqMatri "") ) ;_ Fin de if (if (not (tblsearch "layer" CalqAlti)) (command "-calque" "n" CalqAlti "") ) ;_ Fin de if (if (not (tblsearch "layer" CalqCode)) (command "-calque" "n" CalqCode "") ) ;_ Fin de if (if (not (tblsearch "style" "Matricule")) (command "-style" "Matricule" "Simplex.shx" "0" 0.8 "0" "Non" "Non" "Non") ) ;_ Fin de if (if (not (tblsearch "style" "Altitude")) (command "-style" "Altitude" "Simplex.shx" "0" 1 "0" "Non" "Non" "Non") ) ;_ Fin de if (if (not (tblsearch "style" "Code")) (command "-style" "Code" "Simplex.shx" "0" 0.6 "0" "Non" "Non" "Non") ) ;_ Fin de if (setq Fichier (getfiled "Sélectionner un fichier point" "" "*;*" 0)) (if (/= (findfile Fichier) "") (progn (princ "\nImportation des points Topo *************************") (setq File (open Fichier "r")) (while (setq Lign (read-line File)) (setq LignList (str2lst Lign Separateur)) (setvar "Clayer" CalqXY) (command "point" (strcat (nth 1 LignList) "," (nth 2 LignList)) "") (setvar "Clayer" CalqXYZ) (command "point" (strcat (nth 1 LignList) "," (nth 2 LignList) "," (nth 3 LignList) "")) ;_ Fin de command (setvar "Clayer" CalqMatri) (command "_.-TEXT" "S" "Matricule" "J" "D" (strcat (nth 1 LignList) "," (nth 2 LignList)) HautMatri 100 (nth 0 LignList)) ;_ Fin de command (setvar "Clayer" CalqAlti) (command "_.-TEXT" "S" "Altitude" "J" "BG" (strcat (nth 1 LignList) "," (nth 2 LignList)) HautAlti 100 (rtos (atof (nth 3 LignList)))) ;_ Fin de command (setvar "Clayer" CalqCode) (command "_.-TEXT" "S" "Code" "J" "HG" (strcat (nth 1 LignList) "," (nth 2 LignList)) HautCode 100 (nth 4 LignList)) ;_ Fin de command ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de defun ;; STR2LST (de (gile)) ;; Transforme un chaine avec séparateur en liste de chaines ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") ;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep)) ;_ Fin de cons (list str) ) ;_ Fin de if ) ;_ Fin de defun Tu peux copier/coller la totalité du code dans un fichier avec l’extension LSP et tu le charge. Le code fini par une erreur, mais tous les points sont bien importés... Les premières lignes servent à paramétrer les données : Separateur est le caractère séparateur entre guillemets. HautCode sera la hauteur de texte contenant le code (sans guillemets). HautMatri et HautAlti seront pour le matricule et l'altitude. Et CalqXY sera le nom du calque contenant les points en 2D (entre guillemets), CalqXYZ en 3D (avec le Z). CalqMatri contiendra les matricules, CalqAlti et CalqCode pour les Altitudes et les Codes. Par contre, je ne sais pas si ça fonctionnera sur Mensura... Le fichier DCL est inutile. N'hésite pas si tu as des problèmes et tiens-moi au courant...
  2. Salut. Effectivement, ma routine déconne... Désolé. Je tente de regarder ça au plus tôt...
  3. Salut Christian. Très intéressant, j'ai demandé à ma direction si je pouvais les télécharger...
  4. Tu peux me l'envoyer par MP ?
  5. Merci du retour. Je ne vois pas où ça peut déconner... Tu as bien sélectionner le bon séparateur ? Si non, tu peux toujours m'envoyer ton fichier points et je t'enverrais le dwg avec l'import...
  6. Salut. Je doute que ce soit "facile" de modifier le programme de (gile). Mais j'ai ça (commande : "DHPtTopo" pour configurer et importer les points) qui pourrais t'aider. La structure de ton fichier doit être : Matricule X Y Z Code. Attention, placer le .LSP et le .DCL dans un répertoire connu d'AutoCAD et charger le .LSP avec "appload". Pourrais-tu me faire un retour si ça fonctionne, je ne l'ai testé qu'une seule fois... Denis...
  7. Salut. Peut-être en créant un style de ligne, comme celui-là par exemple : *GlisDrt,____ ____ ____ ____ A,0.5,["]",Simplex,r=90,s=0.1,y=-0.05],1 *GlisGau,____ ____ ____ ____ A,0.5,["]",Simplex,r=270,s=0.1,y=0.05],1 Il te faudra créer, avant de charger le style de ligne, un style de texte "Simplex" avec la police "Simplex.shx"
  8. Salut, et merci pour l'info...
  9. Salut Christian. Merci pour ces liens... J'ai même vu qu'il avait des paragraphes dédiés à REBCAO... Félicitations, c'est toi que fais ces tutos ?
  10. DenisHen

    ScanDXF Beta

    Salut. Peut-être que l'ordre des présentations est celui de leur création...
  11. Je suis d'accord avec vous deux... Je fais de plus en plus des code depuis une page blanche, mais je m'inspire toujours d'autres codes, surtout de CadXP.com... Pour faire simple, le copier/coller n'est pas une méthode d'apprentissage... Mais ce site est une mine d'or... Et il est très actif...
  12. Salut à tous... Bien sûr que je VEUX apprendre, mais je vais me permettre une petite comparaison culinaire. Chez moi, ma femmes fait d'excellents plats "complexes" avec livre de cuisine sous le coude et tout et tout, et c'est délicieux... Par contre, quand je cuisine, j'adapte ce qui reste dans le frigo et, avec quelques autres ingrédients, j'improvise un plat, qui lui aussi est délicieux... En programmation, je fais pareil, j'adapte différents codes pour en faire un nouveau... Ce qui in fine veux dire que je ne ferais jamais de grande cuisine, mais je mangerais tout de même de bons plats, tant qu'il y aura des restes bien sûr... Oui, c'est la variable i qui n'était pas initialisée. Tout ce que j'ai fais, c'est comprendre le code d'un autre... Merci encore pour vos aides/remarques... Amicalement. Denis... Cela dit, je reste entièrement d'accord avec toi didier, taper le code en entier est bien plus efficace dans l'apprentissage que copier/coller des bouts de codes...
  13. Ça y est, j'ai réussi, je n'avais pas initialisé i, voici donc le code : (defun c:TestBlkArbre (/ i ss) (setq i 0) (if (setq ss (ssget "_A" (list (cons 0 "INSERT") (cons 2 "FARBRE")))) (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) ) ;_ Fin de setq (setq elst (subst (cons 2 "VegArbFeuil1") (assoc 2 elst) elst)) (entmod elst) ) ;_ Fin de while ) ;_ Fin de if (princ) )
  14. Salut lecrabe, et merci pour cette info...
  15. Salut et merci pour ton aide. Utiliser ton code serait utiliser Grosse Berta pour écraser une mouche... Je n'ai besoin de remplacer qu'un bloc par un autre, sans attributs, sans bloc à l'intérieur du bloc... C'est pour cette raison que je dois utiliser mon code, je suis sûr que mes quelques lignes suffisent... Il doit contenir une petite erreur, mais il devrait fonctionner... Si je n'y arrive pas (ce qui serait dommage), j'utiliserais RBloc... Tant pis... Encore merci pour ton aide...
  16. Salut Matt666, et merci de m'aider. Le truc, c'est que j'ai "copié" (didier va aimer) ce bout de code ailleurs, mais je n'arrive pas à l'adapter à mes besoins...
  17. Bonjour à tous. Aujourd'hui, je cherche à remplacer un bloc (FARBRE) par un autre (VegArbFeuil1), j'ai donc écris une petite routine qui, bien sûr, ne fonctionne pas : (defun c:TestBlkArbre () (if (setq ss (ssget "_X" (list (cons 0 "INSERT") (cons 2 "FARBRE")))) (while (setq ent (ssname ss i)) (setq i (1+ i) elst (entget ent) ) ;_ Fin de setq (setq elst (subst (cons 2 "VegArbFeuil1") (assoc 2 elst) elst)) ; (entmod elst) ) ;_ Fin de while ) ;_ Fin de if ) Je connais RBloc mais j'aimerais l'éviter, pour intégrer ce bout de code dans une autre routine. Si quelqu'un a une astuce, un conseil... Je suis preneur...
  18. Titanesque ce chantier...! Merci du partage...
  19. Tu as tout dans la formidable "Introduction_a_AutoLISP.pdf" de Maître (gile), page 37.
  20. Salut. Je pense que ça, ce serait mieux, mais c'est à tester : (command "_.text" pause 100 Texte) Et tu n'auras plus besoin du (setq pt(getpoint)) Attention, ton style de texte doit avoir une hauteur de définie.
  21. Je te conseille fortement d'utiliser l'éditeur d'AutoCAD pour les lisp, avec la commande "_vlide". Tu trouveras plein de renseignement ICI. Tu a décomposé mon code, il ne sert plus à rien maintenant, c'était pour le (if... Parce que si Texte n'est pas "vide", j'ai eu une erreur avec (setq Texte (strcat Texte "\n" Txt_Matri)). Je n'ai pas compris pourquoi... Peut-être qu'une variable vaut nil si elle n'est pas prédéfinie ??? Mais tu peut le remplacer par (setq Texte "Liste des points"). Voici le code que tu as modifié : (setq ss (ssget)) (setq Texte "" i 0 ) ;_ Fin de setq (While (setq ssObj (ssname ss i)) (setq i (1+ i)) (setq Matri (getpropertyvalue ssObj "MAT")) (setq Texte (strcat Texte "\n" Matri)) ) ;_ Fin de While (princ Texte) (princ)
  22. Re, encore... Voici ce que tu cherches à faire, la liste est dans Texte : ;;; **************************************** ;;; récupère les matricules du bloc TCPOINT ;;; et les concatene dans "Texte" ;;; pour farfar974123 de CadXP.com ;;; **************************************** (defun c:RecupMatLst (/ ss Texte Obj i Txt_Matri Coord) (princ "\nDéveloppé par Denis H. (vers.1.0)") (setq Texte "") (if (setq ss (ssget "_X" '((0 . "INSERT") (8 . "TCPOINT")))) (progn (setq i 0) (while (setq ssObj (ssname ss i)) (setq i (1+ i)) (setq Txt_Matri (getpropertyvalue ssObj "MAT")) (setq Texte (strcat Texte "\n" Txt_Matri)) ;_ Fin de cond ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if (princ Texte) (princ) ) ;_ Fin de defun Tiens nous au courant si c'est bien ce que tu souhaitais... Denis...
  23. Re. Je ne comprend pas tellement ton but, mais bon, ce bout de code peut t'intéresser : (setq Obj (car (entsel "Clique l'entité :"))) (setq Txt_Matri (getpropertyvalue Obj "MAT")) (setq Coord (cdr (assoc 10 (entget Obj)))) (command "_.text" "j" "mc" Coord 0.15 100 (rtos (atof Txt_Matri) 2 0)) Tu cliques le bloc et ça écrit le matricule au point d'insertion du bloc, tu n'as plus qu'à faire un ssget et un while qui encadrera ce code. J'ai laisser le command pour mieux comprendre le code. N'hésite pas à revenir vers nous.
  24. Salut. Petite question : si tu passes par une sélection "multiple" avec un ssget, comment connaitre le point d'insertion des textes, représentant les matricules si j'ai bien compris ? En gros, veux-tu que tous ces matricules se place à l'endroit de l'attribut ou plutôt à l'insertion du bloc, qui devrait être le point topo ?
  25. Désolé pour le retard. Sur le PC de ma collègue, AutoCAD nous a signalé que cette commande ne fonctionnerait pas, mais après un redémarrage, c'était Ok... Petite question : est-ce que ça fonctionnait avant ?
×
×
  • 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é