Nicky
Membres-
Compteur de contenus
30 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Nicky
-
résolu Changer le calque de courbes de niveau selon leurs altitudes
Nicky a répondu à un(e) sujet de Nicky dans LISP et Visual LISP
Salut BonusCad, Oui j'ai vu ta réponse sur Cadtutor et je t'en remercie. Je n'ai pas encore eu le temps de tester ta routine mais je le ferai dès que possible. A vrai dire, je cherchais à savoir si ma routine était corrigeable et si oui d'ou venait l'erreur. Merci en tout cas -
résolu Changer le calque de courbes de niveau selon leurs altitudes
Nicky a répondu à un(e) sujet de Nicky dans LISP et Visual LISP
Merci Olivier, C'est exactement ca! Merci infinement. -
résolu Changer le calque de courbes de niveau selon leurs altitudes
Nicky a répondu à un(e) sujet de Nicky dans LISP et Visual LISP
Bonjour Olivier, effectivement, voici un dwg qui pose problème avec les pas de 1, 5 et 25. Pour information, il s'agit d'un fichier en mètres converti en feet avec la commande suivante. (defun c:SCFTM () (command "insunits" 6) (command "_units" 2 3 1 1 0 "N") (setq selec (ssget "_X")) (command "-dwgunits" 2 2 4 "yes" "no" "yes" "no") ;;(command "_.scale" selec "" '(0 0 0) 1000) (command "_.zoom" "e") ;; (command "_units" 2 3 1 1 0 "N") (command "insunits" 2) ) Bien que les courbes de niveau soit a la bonne altitude (a 4 décimales près), je me demande si le problème n'aurait pas quelque chose a voir avec la valeur de l'arrondi de l'élévation des polylignes (courbes de niveau)..? Merci, Crooked Mile export mensura test.dwg -
résolu Changer le calque de courbes de niveau selon leurs altitudes
Nicky a posté un sujet dans LISP et Visual LISP
Bonjour a toutes et tous, J'ai un petit problème avec le code ci dessous : La routine permet en choisissant un multiple d'altitude (0.5/1/2/5/10/25/50/100 mètres) de placer dans un (nouveau) calque les courbes de niveau (situées dans un calque originel) répondant au critère. Cependant, depuis peu, certaine courbe ne se place pas dans le nouveau calque alors que le critère est respecté (les altitudes affichées dans les propriétés sont juste). Il y a peut être une erreur dans le code, ou une variable a modifier (précision ou arrondi proche par exemple..) ? Merci, (defun c:MAJCL ( ;/ elev ss i el ) (vl-load-com) (setq Valer (getvar "luprec")) (setvar "luprec" 0) (initget 1 "0.5 1 2 5 10 25 50 100") (setq elev (getkword "\nSelect String for filter [0.5/1/2/5/10/25/50/100]: " ) ) (setq LayerCL (car (entsel "\nClick on a layer with contour lines to modify : " ) ) ) (setq EntLay (entget LayerCL)) (setq LAY (cdr (assoc 8 EntLay))) (setq nomcalc (strcat "_NB-MajorLine_" elev)) (initget 1 "Blue Green GRey Pink Red White Yellow Other") (setq ColorCalc (getkword "\nSelect a color for the layer [Blue/Green/GRey/Pink/Red/White/Yellow/Other]: " ) ) (cond ((= ColorCalc "Blue") (setq Color 141) ) ((= ColorCalc "Green") (setq Color 91) ) ((= ColorCalc "GRey") (setq Color 253) ) ((= ColorCalc "Pink") (setq Color 211) ) ((= ColorCalc "Red") (setq Color 241) ) ((= ColorCalc "White") (setq Color 7) ) ((= ColorCalc "Yellow") (setq Color 51) ) ((= ColorCalc "Other") (setq Color 121) ) ) (if (not (tblsearch "LAYER" nomcalc)) (entmake (list (cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord") (cons 2 nomcalc) (cons 70 0) (cons 62 Color) (cons 370 -3) (cons 6 "Continuous") ) ) ) (if (setq ss (ssget "_X" (list (cons 0 "LWPOLYLINE") (cons 8 LAY)) ) ) (repeat (setq i (sslength ss)) (setq el (cdr (assoc 38 (entget (setq e (ssname ss (setq i (1- i)))))) ) ) (if (equal (distof (rtos (rem el (distof elev)) 2 2)) 0.0 1e-6) ; at elevation that is a multiple of elev? (vla-put-Layer (vlax-ename->vla-object e) nomcalc) ;(command "_.chprop" e "" "_layer" nomcalc "") ) ; if ) ; repeat ) ; if (setvar "luprec" Valer) (princ) ) -
Bonjour a toutes et tous, J'ai un petit problème avec le code ci dessous : La routine permet en choisissant un multiple d'altitude (0.5/1/2/5/10/25/50/100 mètres) de placer dans un (nouveau) calque les courbes de niveau (situées dans un calque originel) répondant au critère. Cependant, depuis peu, certaine courbe ne se place pas dans le nouveau calque alors que le critère est respecté (les altitudes affichées dans les propriétés sont juste). Il y a peut être une erreur dans le code, ou une variable a modifier (précision ou arrondi proche par exemple..) ? Merci, (defun c:MAJCL ( ;/ elev ss i el ) (vl-load-com) (setq Valer (getvar "luprec")) (setvar "luprec" 0) (initget 1 "0.5 1 2 5 10 25 50 100") (setq elev (getkword "\nSelect String for filter [0.5/1/2/5/10/25/50/100]: " ) ) (setq LayerCL (car (entsel "\nClick on a layer with contour lines to modify : " ) ) ) (setq EntLay (entget LayerCL)) (setq LAY (cdr (assoc 8 EntLay))) (setq nomcalc (strcat "_NB-MajorLine_" elev)) (initget 1 "Blue Green GRey Pink Red White Yellow Other") (setq ColorCalc (getkword "\nSelect a color for the layer [Blue/Green/GRey/Pink/Red/White/Yellow/Other]: " ) ) (cond ((= ColorCalc "Blue") (setq Color 141) ) ((= ColorCalc "Green") (setq Color 91) ) ((= ColorCalc "GRey") (setq Color 253) ) ((= ColorCalc "Pink") (setq Color 211) ) ((= ColorCalc "Red") (setq Color 241) ) ((= ColorCalc "White") (setq Color 7) ) ((= ColorCalc "Yellow") (setq Color 51) ) ((= ColorCalc "Other") (setq Color 121) ) ) (if (not (tblsearch "LAYER" nomcalc)) (entmake (list (cons 0 "LAYER") (cons 100 "AcDbSymbolTableRecord") (cons 100 "AcDbLayerTableRecord") (cons 2 nomcalc) (cons 70 0) (cons 62 Color) (cons 370 -3) (cons 6 "Continuous") ) ) ) (if (setq ss (ssget "_X" (list (cons 0 "LWPOLYLINE") (cons 8 LAY)) ) ) (repeat (setq i (sslength ss)) (setq el (cdr (assoc 38 (entget (setq e (ssname ss (setq i (1- i)))))) ) ) (if (equal (distof (rtos (rem el (distof elev)) 2 2)) 0.0 1e-6) ; at elevation that is a multiple of elev? (vla-put-Layer (vlax-ename->vla-object e) nomcalc) ;(command "_.chprop" e "" "_layer" nomcalc "") ) ; if ) ; repeat ) ; if (setvar "luprec" Valer) (princ) )
-
Remplacer une zone LiDAR dans global mapper
Nicky a répondu à un(e) sujet de Nicky dans SIG internet
Salut Vincent, Merci pour ton retour. Oui je pensais aussi faire ca mais je n'ai pas la commande sur Global mapper. Je vais regarder ca sur CloudCompare. Merci -
Bonjour a toutes et tous, Je sais que le forum n'est pas spécialisé en SIG mais je jette une bouteille a la mer. J'ai un fichier LiDAR datant de 2018 qui couvre un grande aire (station de ski). De nouveau relevé ponctuel ont été réalisé au drone et j'aimerai mettre a jour mon fichier topo dans Global Mapper. Cependant, je ne sais pas quel process, ni quelle commande utilisé pour "remplacer" l'ancien LiDAR par le nouveau ? Quelqu'un a-t-il une idée ? Merci d'avance,
-
Smartmap - un vieux mais puissant programme
Nicky a répondu à un(e) sujet de Nicky dans Routines LISP
Rebonjour Didier 🙂 Et bien il y a beaucoup de .LSP et malheureusement un fichier VLX! -
Merci de vos réponses a tous les deux @didier et @lili2006. En réalité, ma question était plutôt de savoir si il y avait une erreur dans la façon de créer le mnt du cote du logiciel ou si cela venait du fichier (courbes de niveau) ou de ma façon de procéder... J'ai comparé le fichier mnt covadis (je ne pensais pas pouvoir l'ouvrir avec un simple AutoCAD) et effectivement, il y a les memes erreurs, voir plus importantes. J'ai donc ma réponse, pas étonnant qu'il y est des incohérences. Juste pour information, en voyant ces erreurs, je n'ai pas utilisé ce fichier et est attendu d'obtenir le fichier de points. Mais je n'aime pas trop attendre les données 🙂
-
Ok, merci. Pas de triangles horizontaux alors ?
-
Bonjour a tous, Après avoir passé plusieurs années à essayer de faire tourner des anciens programmes développés par Alejandro Gutierrez, j'abandonne. Alejandro était un génie et il a contribué au développement d’applications pour AutoCAD dans les années 90. Les nombreuses routines comprises dans cette centaine de fichier, étaient incroyablement efficaces a l'époque, et l'entreprise dans laquelle je suis maintenant partenaire, Alpentech Inc. était toujours en avance sur tout le monde grâce au savoir-faire d’Alejandro et ses creations. Pour vous donner des exemples, l'un de ces programmes permet de dessiner des profiles en long et en travers, de les éditer et de calculer les aires et volumes de déblai/remblai. Oui, sur AutoCAD! Pour ces calculs il utilisait notamment Surfer et Excel. Mais le programme le plus puissant, appelé "Smartmap", permettait de créer une carte de pertinence des choix de terrains, en particulier pour la création de piste de ski, en fonction de plusieurs paramètre tel que l'altitude, l'orientation, les ombres, le vent... Pour information, les programmes tourner sur AutoCAD 2005. Malheureusement, je suis incapable d'utiliser la plupart de ces programmes, et manque de temps et de connaissances (surtout) pour arriver a les faire tourner, ou les modifier/adapter à nos besoins aujourd'hui... Alors si quelqu'un est intéressé par le déchiffrage de ces programmes, suivi éventuellement d'un éclaircissement voir un exposé (compte tenu du nombre de routines...), n'hésitez pas à me contacter par courriel à l'adresse nicolas@alpentech.net Merci pour votre lecture et bonne journée les Lispeur! Nicolas
-
Bonjour Messieurs, Merci de vos réponse et de votre intérêt pour el sujet. Ci-joint le fichier dwg. Merci. Grizzly P-Lot widening(1).dwg
-
Bonjour à tous, Je deviens fou avec Mensura. Lors de la création d'un MNT à partir de courbes de niveau 2D (je n'ai pas de fichier de points pour modéliser le terrain), Mensura ne suis pas parfaitement les courbes de niveaux originales et créé des "raccourcis" ce qui forme des triangles horizontaux que je ne parviens pas a supprimer. Meme en retriangulant et en eliminant les triangles horizontaux, certains persistent! Je joins une image pour explicatif, peut être que cela vous parlera.. Je ne comprends pas d'où viens le problème est s'il y a une solution. Merci,
-
AutoCAD VBA DirListBox, FileListBox et DriveListBox
Nicky a répondu à un(e) sujet de Nicky dans Routines VBA
Salut @didier, Oui c'est tout a fait cela 👍 -
Bonjour a tous, Je reviens sur ce sujet concernant une routine de carto AutoCAD qui n'a pas été résolu et qui me taraude encore... Il semblerait que le problème vienne de la perte des contrôle OCX 32 bits depuis le passage à VBA 7 et les plates-formes 32/64bits. Lorsque je lance la routine, une DirListBox, une FileListBox et une DriveListBox devrait s'afficher (voir ci-dessous a gauche), mais j'obtient la fenêtre ci-dessous a droite : Je ne peux donc pas sélectionner mon fichier pour l'import de ce fameux fichier .GDR... Avez vous une idée de la marche a suivre pour faire apparaitre ces commandes ? ou les remplacer par un bouton peut être ? Merci d'avance pour vos eclairs de genie. Nicky
-
Compteur copie dans la ligne de commande
Nicky a répondu à un(e) sujet de Nicky dans LISP et Visual LISP
Bonjour VDH-Bruno, Tout d'abord merci pour ces explications et merci pour le code, j'ai compris la méthode. Et donc oui en effet, en rajoutant la boucle "écriture, pause, suppression...", ça ralenti le traitement. A quoi correspond la valeur "100000" de la fonction repeat - (pause pour voir la modif) ? Je pense que ce programme peut être utile parfois mais pas toujours en effet. Lorsque j’exécute le programme sur une trentaine de courbes de niveau assez lourdes (plus de 1000 vertex), le programme rame un peu et donne envie de le quitter... Merci encore Nicky -
Bonjour a tous, J’espère que vous pourrez m'aider sur ce code qui concerne la réalisation d'un compteur placé dans la ligne de commande. Soit un terrain représenté par des courbes de niveau (polylignes vertes) et une polyligne bleue qui coupe ces courbes de niveau. Je cherche a réaliser un compteur qui compte le nombre de courbe de niveau coupées par cette polyligne, puis copiées et placées dans un nouveau calque. La boucle s’incrémente a chaque intersection de la polyligne bleue avec les courbes de niveaux (polylignes vertes). Voici un extrait de mon code (setq CNcoupees (ssget "_F" (list pt1 pt2) (list (cons 0 "LWPOLYLINE,POLYLINE") (cons 8 LAY) ) ) ) (repeat (setq in (sslength CNcoupees)) (redraw (ssname CNcoupees (setq in (1- in))) 3) ) (setq n 0) (setq nombreCN (sslength CNcoupees)) (while (< n nombreCN) (progn (setq poly1 (ssnamex CNcoupees n) ptspoly1 (assoc 4 poly1) pol (ssname CNcoupees n) obj (vlax-ename->vla-object pol) vlelev (vla-get-elevation obj) listalt (append listalt (list vlelev)) lilispt (list '0 '0 (nth n listalt)) ptlistpt (cons lilispt ptlistpt) ) (command "._copytolayer" ent "" calqueAXE "0,0,0" lilispt) (princ) ) (setq n (+ n 1)) (princ (strcat "\rCréation de la polyligne : " (itoa n) " sur " (itoa nombreCN) ) ) ) Mais voila ce qui s'affiche actuellement dans ma ligne de commande : Je souhaiterais ne pas voir apparaître la première ligne "1 object(s) copied and placed on layer "NB_Axe-coupe-construction"." mais seulement mon code "Création de la polyligne : 1 sur 91" et que le 1 passe a 2, puis a 3, puis a 4... sans aller a la ligne a chaque polyligne crée.. Possible ? Merci d'avance
-
Super ! Merci Olivier, c'est une très bonne idée et ça tourne maintenant ! Merci. Nicolas
-
Salut la communauté! Je cherche à utiliser une routine permettant de réaliser une coupe de terrain (intersection entre une ligne et des courbes de niveau) afin de visualiser le profil du terrain. Je pense que je ne suis pas trop loin du compte, il y a de nombreuses petites erreurs, mais je me heurte a une problématique majeure : ma liste de point n'est pas dans le bon ordre et lorsque que je trace le profil les points ne s’enchaîne pas comme il faut, je précise: Si l'axe de ma coupe (ligne) intersecte 10 courbes de niveau différentes, le profil est bien traceMais l'axe de ma coupe intersecte 2 fois (ou plus) la même courbes de niveau, les points sont classer dans le désordre. L'exemple ci-dessous explicite le problème rencontre lorsque les courbes de niveau sont couper plusieurs fois... Du coup, je ne sais pas qu'elle méthode serait la mieux pour corriger cette erreur de tracé : Y q t il une erreur dans la récupération des points aux intersections §Faut il simplement reclasser l'ordre de la liste des points (dans le bon sens de l'axe) ? Je vous joins le fichier LISP. Le fichier est bidouillé (composé de création perso et de copier coller de routines existantes), ça risque de faire mal aux yeux des puristes... Je m'en excuse. Coupe sur CN Merci d'avance pour vos réponses et aides! Nicolas
-
Salut la communauté! Je travaille sur le logiciel Mensura de mon associé mais il ne possède pas le module projet linéaire... Je n'ai que la base : DAO - Terrain (M.N.T.) - Courbes de niveaux - Projet Plates-Formes - Rendu 3D Paysager. Mon interrogation concerne la réalisation de Profil en Long et Travers. Pour réaliser et exporter mes Profils je passe donc par le module Projet Plates-Formes avec le menu déroulant Profils >> Profil Vertical (ou Profil en travers). Je souhaiterais donc savoir s'il y a une possibilité de créer (et enregistrer) un Profil en Long et un Profil en Travers TYPE, OU alors de modifier leurs valeurs par défaut, afin de ne pas devoir ajuster les valeurs a chaque fois que je créer un Profil en Long (modification du rapport d’échelle X/Z, nombre de décimale, champs automatiques, grille verticale et horizontale...) J’espère que vous comprendrez ma demande et que vous pourrez y répondre. Merci d'avance !
-
Récupérer coordonnées d'un sommet
Nicky a répondu à un(e) sujet de Nicky dans Pour aller plus loin en LISP
Super! Merci a vous deux, c'est très clair maintenant. -
Récupérer coordonnées d'un sommet
Nicky a répondu à un(e) sujet de Nicky dans Pour aller plus loin en LISP
Salut Dider, Non non pas tout a fait. ici le15 représente la taille du texte! En fait, le nombre d'insertion (ou le nombre d’entité texte insérée) ne compte pas vraiment ici puisque je veux, a n'importe quel moment, pouvoir annuler cette insertion. Par exemple, lorsque j’insère la 6eme entité "texte" et que l'insertion ne me plait pas (mauvais emplacement ou mauvais angle d'alignement par exemple), je souhaiterais annuler cette insertion (par un cnt-z ou Undo) et ensuite de pouvoir reprendre la commande pour d'autre insertion... Je sais pas si c'est plus clair ? -
Récupérer coordonnées d'un sommet
Nicky a répondu à un(e) sujet de Nicky dans Pour aller plus loin en LISP
Magnifique !!! Merci. Les fonctions Autolisp m'arrachent déjà les cheveux, alors les Vlisp... Elles dépassent de loin mes capacités et mon niveau de programmation. J'aimerai maintenant, et pour finir, "boucler" ce programme avec la possibilité de d'annuler la dernière insertion de texte (undo, cnt-z ?) : Sélection entité (lwpolyligne en l’occurrence) ;Command texte ;>> Possibilité d'annuler cette boucle par "u"/cnt-z ?? En gros comme la seconde partie de la commande TRIM, pendant la sélection des objets a ajuster La boucle ne me pose pas de problème, mais l'ajout du retour en arrière oui... Une idée ? il faut peut être un getkwork ? Code : (defun c:alti (/ sel ent pt par pt1 pt2 elev ang angdeg txt ptins) (while (setq sel (entsel)) ;; récupérer le nom d'entité (ENAME) de l'entité sélectionnée (setq ent (car sel)) ;; controler que l'entité sélectionnée est bien une polyligne (= (cdr (assoc 0 (entget ent))) "LWPOLYLINE") ;; récupérer le point cliqué (coordonnées SCU courant) (setq pt (cadr sel)) (setq ptins (list (car pt) (cadr pt))) ;; traduire le point en coordonnées SCG (setq pt (trans pt 1 0)) ;; obtenir le point le plus proche sur la polyligne (setq pt (vlax-curve-getClosestPointToProjection ent pt (trans '(0 0 1) 2 0 T) ) ) ;; obtenir le paramètre de la polyligne au point cliqué (setq par (vlax-curve-getParamAtPoint ent pt)) ;; obtenir le point sur le sommet précédent (point au paramètre entier inférieur) (setq pt1 (vlax-curve-getPointAtParam ent (fix par))) ;; obtenir le point sur le sommet suivant (point au paramètre entier supérieur) (setq pt2 (vlax-curve-getPointAtParam ent (1+ (fix par)))) ;; recuperation de l'elevation (setq elev (atoi (rtos (caddr pt) 2 0))) ;; recuperation de l'angle pt1>pt2 (setq ang (angle pt1 pt2)) ;; transformation de l'angle en degré (setq angdeg (* (/ ang pi) 180)) ;; si l'angle est compris entre 90 et 270, additionner 180 degré (if (or (and (> angdeg 90) (< angdeg 270)) ) (setq angdeg (+ angdeg 180)) ) ;; hauteur du texte - simplifié.. (setq txt 15) (command "_text" "m" ptins txt angdeg elev) (princ) ) ;;end while ) ;;end defun -
Bonjour, Je suis a la recherche d'un moyen permettant de récupérer les coordonnées du vertext précédant ou suivant le point de "click" de sélection de la polyligne. Je ne sais pas si c'est très clair mais j'aimerai, après un getpoint sur une polyligne (+ ssget pour sélectionner celle-ci), récupérer le sommet précédant ou suivant ce clique.. Savez vous s'il y a un moyen d'y parvenir ? (Pour info le but de ma recherche est de calculer l'angle entre le getpoint et le sommet précédent/suivant...) Voici une partie du code: (setvar "osmode" 2) (while (setq ipt (getpoint "\Sélectionner un point sur la polyligne :\n")) (setq ipt (osnap ipt "_mid")) (setq ipt1 (list (+ (car ipt) 1) (- (cadr ipt) 1))) (setq ipt2 (list (- (car ipt) 1) (+ (cadr ipt) 1))) (setq ss (ssget "_C" ipt1 ipt2 '((0 . "*POLYLINE"))))) Merci d'avance,
-
Ok ok merci. J'ai du mal a comprendre pourquoi il n'y a pas de compatibilité avec les versions les plus récente d'AutoCAD. Parce j'ai essayé avec AutoCAD 2008 et ça roule bien... Bref, merci pour les infos en tout cas, je vais essayer de fouiner encore un peu !
