MickA37 Posté(e) le 25 octobre 2007 Partager Posté(e) le 25 octobre 2007 Bonjour, j'ai un fichier DXF contenant des courbes de niveaux sans indications d'altitude. Je souhaite trouver un moyen d'accélérer l'attribution de l'altitude à chaque courbe. Pour l'instant, je met manuellement chaque courbe dans un nouveau calque... Je recherche qqchose qui pourrait (dans un flanc bien sûr sans variation de signe de la pente !), en indiquant l'altitude de départ et l'équidistance, attribuer à chaque courbe la bonne altitude... Qqun aurait-il une solution à me proposer ? merci d'avance !!!! Ci dessous, une copie d'écran d'un jeu vidéo qui permet de créer un environnement virtuel.L'altitude de chaque courbe est obtenue très facilement en indiquant l'altitude de la plus haute (ou la plus basse) et ensuite en faisant glisser la souris il incrémente automatiquement l'altitude...http://stapsmicka.free.fr/compe/ex.jpg C'est ce que je recherche à faire, mais malheureusement, il travaille sur un format général (CNV) et pas moyen de le faire travailler sur mon DXF..... Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 25 octobre 2007 Partager Posté(e) le 25 octobre 2007 Salut, Un petit LISP vite fait, pas testé en profondeur (équidistance positive = montée, équidistance négative = descente) (defun c:courb-niv (/ crb equ alt p1 p2 sslst pt) (and (setq crb (car (entsel "\nSélectionnez une courbe de niveau: "))) (setq equ (getdist "\nEquidistance des courbes: ")) (setq alt (getreal "\nAltitude de départ: ")) (setq p1 (getpoint "\nPremier point: ")) (setq p2 (getpoint p1 "\nSecond point: ")) (setq sslst (ssget "_F" (list p1 p2) (list (assoc 0 (entget crb)) (assoc 8 (entget crb)) ) ) ) (setq sslst (ssnamex sslst)) (mapcar '(lambda (x) (setq pt (cadr (cadddr x)) pt (list (car pt) (cadr pt) (cadddr (assoc 10 (entget crb)))) ) (entmake (list '(0 . "TEXT") (cons 10 pt) (cons 40 (getvar "TEXTSIZE")) (cons 7 (getvar "TEXTSTYLE")) (cons 1 (rtos alt 2 1)) ) ) (setq alt (+ alt equ)) ) sslst ) ) (princ) ) [Edité le 26/10/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 26 octobre 2007 Partager Posté(e) le 26 octobre 2007 Re, Le LISP ci-dessus ne fait qu'jouter un texte indiquant l'altitude sue chaque courbe de niveau. S'il faut aussi mettre la courbe (et le texte) à son altitude (3d), c'est plutôt ça : (defun c:courb-niv (/ crb equ alt p1 p2 sslst acdoc pt) (vl-load-com) (if (and (setq crb (car (entsel "\nSélectionnez une courbe de niveau: "))) (setq equ (getdist "\nEquidistance des courbes: ")) (setq alt (getreal "\nAltitude de départ: ")) (setq p1 (getpoint "\nPremier point: ")) (setq p2 (getpoint p1 "\nSecond point: ")) (setq sslst (ssget "_F" (list p1 p2) (list (assoc 0 (entget crb)) (assoc 8 (entget crb)) ) ) ) (setq sslst (ssnamex sslst)) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object))) ) (progn (vla-StartUndoMark acdoc) (mapcar '(lambda (x) (vla-Move (vlax-ename->vla-object (cadr x)) (vlax-3d-point '(0 0 0)) (vlax-3d-point (list 0 0 alt)) ) (setq pt (cadr (cadddr x)) pt (list (car pt) (cadr pt) alt) ) (vla-addText (vla-get-ModelSpace acdoc) (rtos alt 2 1) (vlax-3d-point pt) (getvar "TEXTSIZE") ) (setq alt (+ alt equ)) ) sslst ) (vla-endUndoMark acdoc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
MickA37 Posté(e) le 26 octobre 2007 Auteur Partager Posté(e) le 26 octobre 2007 Merci, j'essayerai cela ce w-e !!!! Par contre je n'ai pas besoin d'enregistrer l'affichage de la valeur, mais pour la vérification, c'est en effet plus pratique qu'elle y soit ! Merci !!!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
thierry.garré Posté(e) le 26 octobre 2007 Partager Posté(e) le 26 octobre 2007 Bravo, bonne idée et bel outils.... Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap Lien vers le commentaire Partager sur d’autres sites More sharing options...
MickA37 Posté(e) le 26 octobre 2007 Auteur Partager Posté(e) le 26 octobre 2007 Pas eu le temps de recharger ma version d'autocad aujourd'hui, et je pars une semaine sans internet... Je vous donnerai des nouvelles en rentrant ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 26 octobre 2007 Partager Posté(e) le 26 octobre 2007 J'ai un peu amélioré l'histoire : - L'insertion de l'altitude sur chaque courbe est optionnelle, elle se fait sur le calque "Altitudes_C-N" (le calque est créé s'il n'existe pas). - Le trajet de sélection des courbes peut être spécifié par plus de 2 points. - Les textes sont biens placés à l'intersection des courbes de niveau et du trajet de sélection quelque soit la vue courante. (defun c:courb-niv (/ txt equ alt crb pt plst sslst acdoc vec scl) (vl-load-com) (or *texte-altitude* (setq *texte-altitude* "Oui")) (initget "Oui Non") (if (setq txt (getkword (strcat "\nAjouter les altitudes [Oui/Non] ? *texte-altitude* ">: " ) ) ) (setq *texte-altitude* txt) (setq txt *texte-altitude*) ) (or *equidistance* (setq *equidistance* "10.0")) (if (setq equ (getdist (strcat "\nEquidistance des courbes : ") ) ) (setq *equidistance* (rtos equ)) (setq equ (atof *equidistance*)) ) (initget 1) (setq alt (getreal "\nAltitude de départ: ")) (initget 1) (setq crb (car (entsel "\nSélectionnez une courbe de niveau: "))) (initget 1) (setq pt (getpoint "\nPremier point: ") plst (cons pt plst) ) (while (setq pt (getpoint pt "\nPoint suivant: ")) (setq plst (cons pt plst)) (redraw) (grvecs (apply 'append (mapcar '(lambda (x1 x2) (list -255 x1 x2)) (reverse (cdr (reverse plst))) (cdr plst) ) ) ) ) (redraw) (setq sslst (ssget "_F" (reverse plst) (list (assoc 0 (entget crb)) (assoc 8 (entget crb)) ) ) ) (if sslst (progn (setq sslst (ssnamex sslst) acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) ) (vla-StartUndoMark acdoc) (mapcar '(lambda (x) (vla-Move (vlax-ename->vla-object (cadr x)) (vlax-3d-point '(0 0 0)) (vlax-3d-point (list 0 0 alt)) ) (if (= txt "Oui") (progn (setq pt (cadr (cadddr x))) (if (setq vec (caddr (cadddr x))) (setq scl (/ (- (caddr pt)) (caddr vec)) pt (list (+ (car pt) (* (car vec) scl)) (+ (cadr pt) (* (cadr vec) scl)) alt ) ) (setq pt (list (car pt) (cadr pt) alt)) ) (vla-add (vla-get-Layers acdoc) "Altitudes_C-N") (vla-put-Layer (vla-addText (vla-get-ModelSpace acdoc) (rtos alt 2 1) (vlax-3d-point pt) (getvar "TEXTSIZE") ) "Altitudes_C-N" ) ) ) (setq alt (+ alt equ)) ) sslst ) (vla-endUndoMark acdoc) ) ) (princ) ) [Edité le 27/10/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant