-
Compteur de contenus
406 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par chris_mtp
-
Bonjour, Je souhaiterai modifier le fameux lisp de Gile Instopo pour l'adapter à mes besoins. Je vous explique. J'ai un fichier texte de points du type N X Y Z Code Att1 à insérer dans Autocad sous forme de blocs comprenant 4 attributs à savoir le numéro du point, le Z, le code et la valeur de l'attribut. Je ne vois pas dans le lisp de Gile comment sont lues les valeurs de chaque attribut et ce qui en détermine la position dans la liste crée après chaque ligne de texte lu à partir du fichier initial. La modif serait de pouvoir dire par exemple le 1er élément de la chaine de caractères correspond au numéro qui doit s'inscrire dans l'attribut MATRICULE du bloc. le 3eme élément de la chaine de caractères correspond au Z qui doit s'inscrire dans l'attribut ALTITUDE du bloc. le 4eme élément de la chaine de caractères correspond au Code qui doit s'inscrire dans l'attribut Code du bloc. le 5eme ..... et ainsi de suite pour chaque attribut qui constitue le bloc. Mon fichier est toujours formaté de la même manière et il n(y a pas de chaine vide ou d'attribut manquant. Merci par avance de votre aide. John. John.
-
Merci Gile pour ta réponse. Non en fait je voulais forcé la couleur des entités des calques qui ont pour préfixe ORG. Mais la seconde fonction me sera utile aussi pour une autre application. Je ne savais pas qu'on pouvait combiner plusieurs requêtes à la fois dans la fonction if. J'apprend petit à petit. Merci encore pour ton aide. John.
-
Bonjour, J'ai un plan avec certains calques qui ont un préfixe du type ORG et d'autre avec un préfixe du type URG. Je voudrais mettre en couleur 8 les objets des calques qui ont le préfixe ORG. J'ai donc essayé d'adapter le code selon mes besoins mais ca ne marceh pas et sérieux je ne vois pas d'ou vient le problème avec la fonction ssget. (defun c:color8 (/ lay name ss1) ;; premier calque de la table (collection) (setq lay (tblnext "LAYER" T)) ;; on parcourt la table des calque (while lay (setq name (cdr (assoc 2 lay))) ;; si le préfixe correspond, on le change (if (wcmatch name "ORG_*") (setq ss1 (ssget "X" (list (cons 8 lay)) ) ) (command "changer" ss "" "pr" "co" "8" "") ) ;; on passe au claque suivant (setq lay (tblnext "LAYER")) ) (princ) ) Merci par avance de votre aide. John.
-
Bonjour à tous, Personne en lisant le code vba ne peut me dire comment doit être formaté mes fichiers textes pour calculer les paramètres de ma transformation d'Helmert ? Merci par avance de votre aide. John.
-
Bonjour Gile, L'exemple que je t'ai donné indique juste qu'un même point peut avoir deux coordonnées différentes dans deux systèmes différents. Les paramètres d'une transformation d'Helmert sont du type une translation en x de l'ordre de 202705m environ à arrondir à 5 decimales une translation en y de l'ordre de 7321561m environ à arrondir à 5 decimales une rotation de l'ordre de -0.393 degres un facteur d'échelle du type 0.999995 C'est une transformation en 2D en fait. Dans le code vba, ces données sont calculés respectivement par les variables P, Q B et A. Tu penses qu'on peut adapter le code vba en lisp ou bien conserver le code vba mais en lui faisant appel en lisp ? Merci de ton aide. John.
-
Bonjour Une autre question simple, Est il possible d'intégrer les paramètres d'une transformation d'Helmert dans une matrice de transformation via la fonction vla-TransformBy puis d'appliquer cette transformation à l'ensemble d'un dessin AutoCAD en sélectionnant toutes les entités ? Je me pose la question car j'ai trouvé sur le net un code vba qui permet de calculer les paramètres d'Helmert à partir de deux fichiers textes de semis de points dans deux systèmes de coordonnées différents au format N X Y Z. Ne connaissant rien au vba, je pensais qu'en l'adaptant un peu, ca doit pouvoir le faire Non ? Le code se trouve sur le lien http://georezo.net/forum/viewtopic.php?id=45969 Je remercie par avance l'auteur de ce code qui est Christophe V Merci par avance de votre aide. John.
-
Pour la commande MSDOS c'est bon j'ai pu lancer la commande de conversion de coordonnées à partir d'un lisp avec un bat, le problème venait en fait de mon fichier en lecture seule et d'un accès refusé sous VIsta. Reste à trouver la solution pour déplacer le dessin d'un système de coordonnées A vers un autre système B. Merci par avance de votre aide. John.
-
Sur les attributs, il y a un bug. Je n'ai pas modifié de place les attributs de mes blocs et le code me les a mis quand même mis en modifications ceci à cause de la commande ATTSYNC non mis à jour.
-
Bonjour à tous, J'ai remarqué une anomalie. Le code permet de voir si des entités ont changé de calques mais pas de couleur J'ai modifié volontairement la couleur d'une polyligne mais toujours dans le même calque et le lisp ne l'a pas vu. Mais c'est à mon sens qu'un petit cas. John.
-
A Patrick_35, Salut j'ai tout essayé pour la commande MS-DOs mais rien à faire, si je double-clique sur le bat pour executer la commande DOS sous windows, ca marche. Si fais appel au bat avec une commande lisp d'AutoCAD, ca ne marche pas. Si je fais la ligne de commande de Bonuscad, non plus. Une idée ou bien je dois me taper la commande DOS à la main en arrêtant le lisp durant le traitement DOS. Merci par avance de ton aide. John
-
Merci Gile En topographie, on distingue plusieurs systèmes de coordonnées et pour être simple clair et bref, un même point peut avoir plusieurs coordonnées exprimé dans différents systèmes. Exemple simple, un point M dans le système A aura pour coordonnées X=1000 e Y=2000 Dans le sysème B, ce point M aura pour coordonnées X=42536.236 et Y=7586.325 C'est juste un exemple. J'ai déjà fait un lisp qui extrait les coordonnées de chaque entité type point, bloc, polylignes 2D et 3D d'un dessin Autocad puis la partie qui convertit le listing de points du système A et B. Les deux listings ont le même nombre de points et sont du type N X Y Z mais à chaque point des coordonnées différentes comme décrit précédemment. Exemple : Fichier dans le système A 1 1000 2000 0 2 1500 2300 0 Fichier dans le système B (converti en dos) 1 42536.236 7586.325 0 2 43835.628 7851.412 0 Le premier listing dans le système est extrait directement d'AutoCAD dans le SCG et le second est issu d'une transformation d'un autre programme appelé CircéBatch qui est un utilitaire pour les géomètres. Merci par avance de ton aide. John.
-
Bonjour Gile Si je ne peux pas utiliser les fonctions mxm et trp qui ne marchent que sur des matrices carrés, je vais devoir trouver une autre solution car alors mon calcul d'Helmert par les moindres carrés est inutile. Le principe du Lisp que je veux faire est le suivant . J'ai un dessin Autocad dans un système avec des blocs, des polylignes 2d et 3d, des textes et ..... Je veux convertir ce dessin d'un ssytème de coordonnées A vers un autre système B. Pour cela, je fais un listing de mes points dans le système A. Je converti ensuite ce listing de points de coordonnées A en un listing de points de coordonnées B. via un utilitaire Batch sous dos. Je calcule ensuite les paramètres de la transformation d'Helmert à partir des deux listings de points et j'applique la transfo à mon dessin. Si le calcul matriciel ne marche pas, il faut dans ce cas que je trouve une solution. Je pensais déplacer directement chaque entité du système A vers le système B qu'avec des points, des blocs, des polylignes 2D et 3D mais je bloque sur la manip. Si vous avez d'autres idées ou quoi, merci de votre aide. John.
-
Bonjour, J'ai essayé les deux méthodes. Les deux marchent bien mais comme mes lignes de commandes sont prédéfinies je vais faire plusieurs bat qui se lanceront selon le choix en entrée. Par contre, après des tests, j'ai le retour application Win32 non valide alors qu'avant je n'avais cette erreur de Windows. Je suis sous Vista. Peut être çà ? et mes lignes de code sont les mêmes. Si vous avez une idée. Et bseb67, si tu peux voir mes questions sur les matrices. Merci encore de votre aide. John.
-
Un fichier bat permet de lancer une commande dos ? et comment le créer ? A partir d'un bloc notes ? Et comment le lancer d'un startapp ou sh Merci par avance de votre aide. John.
-
Bonjour, J'ai essayé la ligne de code de Bonuscad Je n'ai pas d'erreur ou d'anomalie mais je ne trouve pas le fichier de sortie _FIN dans le dossier et même sur le disque dur D'où deux possiblités, il faut soit bloquer Autocad un moment pour éviter les problèmes de conflit avec MS DOS et les ActiveX soit executer la commande MSDOS indépendamment d'AutoCAD en l'ouvrant soi même Je ne vois que çà de plus que si on tape _.shell dans Autocad, la fenêtre MSDOS ne s'affiche pas et reste caché Si vous avez des idées Merci par avance John.
-
Bonjour Bred, J'ai le retour nil en entrant ce code dans la barre de commande AutoCAD. Ma ligne de commande complète à entrer sous DOS est du style "C:\CirceBatchDos\CirceBatch.exe" -init "Circe.ini" -mode 1 -type 2 -sys1 859 -sys2 860 -alt 2 019 -typcoor1 3 130 -typcoor2 3 120 -f1 1 "C:\TMP\LEVER_INI.txt" -f2 1 "C:\TMP\LEVER_FIN.txt" donc avec des paramètres de transformations de Circe. Merci par avance de votre aide. John
-
Pour le DOS même sur Internet ya rien apparemment et le pire c"est que sans ca mon lisp ne peut pas aboutir. John.
-
C'est vrai j'oublié Gile Merci.
-
Bonjour Patrick_35 En fait, je dois lancer une application du type "C:\CirceBatchDos\CirceBatch.exe" -init "Circe.ini" à lancer sous MS-DOs pour pouvoir créer mes deux fichiers txt et en extraire les infos utiles pour créer ensuite mes matrices et donc ma transformation d'Helmert. J'ai jeté un oeil sur les sujets mais rien ne correspond apparemment à ce que je cherche. La seule solution que je vois est le vlisp pour lancer MS-DOs puis copier -coller moi-même ma ligne de commande. Autrement je ne vois pas ..... Merci de ton aide. John.
-
Encore trois petites dernières question et je pense qu'après je pourrais un test sur un exemple. 1-Pour connaitre le nombre de lignes d'une mattrice, un sslength me donne l'info non ? Exemple Matrice MA de n lignes et m colonnes le sslength de MA me donnera n 2-Peut on combiner les matrices pour en sortir une valeur réelle de type mq0 ? 3-Le signe négative devant une matrice permet il d'effectuer les opérations de somme ? Voilà ce que j'ai pu faire avec les infos de Bseb67 Les matrices MA et MK sont concues avec la fonction traitement par ligne (setq MX '((a) (b) (p) (q))) matrice des inconnues (setq MP (Imat (sslength MK))) matrice des poids (setq MN '((mxm (mxm (trp MA) MP) MA))) matrice N des équations normales (setq MN1 '((InverseMatrix MN))) Inverse de la matrice N (setq NK '((mxm (mxm (trp MA) MP) MK))) Matrice nk (setq MDX '((mxm MN1 NK))) Matrice des appoints (setq MV '((m+m (mxm MA MDX) (- MK)))) Matrice des résidus (setq MY2 '((mxm (mxm (trp MV) MP) MV))) (setq MQ0 (sqrt (/ MY2 (- (sslength MA) 4)))) Ecart moyen quadratique (setq MY1 '(- (mxm (mxm (trp MV) MP) MV))) (setq MY3 '((mxm (mxm (trp MA) MP) MV))) Les fonctions mxm, trp et m+m sont de Gile d'un autre post. John.
-
Merci pour tes réponses bseb67. Les fonctions lisp marchent bien mais j'ai trois questions : 1-En Lisp, on peut bien faire des matrices a n lignes et m colonnes et non que des matrices carrés type 4*4 ? 2- Quel est le nom de la matrice de sortie ? 3- Si le fichier texte lu avec traitement_ligne comprend des lignes avec d'autres du type N X Y Z PoidsX PoidsY ...... La liste de la matrice est constitué seulement des infos utiles ou bien doit on avoir un fichier absolument du type N X Y Z ? Je n'ai pas trouvé d'exemples pour tester ce cas là. Par contre, Gile dans une autre discussion donne des infos pour les matrices transpose inverse ... mais je ne vois pas le nom des matrices qu'il utilise ou bien qu'on peut intégrer dans les fonctions qu'ils proposent. Il faut aussi que je résous le probleme de lancer des commandes DOS avec du lisp. Je ne sais pas si c'est possible. Je ne me suis pas encore trop penché de ce côté là étant concentré sur ces fameuses matrices. MErci encore pour votre aide. John.
-
Bonjour, Merci pour vos réponses. J'ai pu faire un petit test en insérant des points nodal en lisant les coordonnées à partir d'un fichier texte mais le souci vient des numéros. Si on passe point n°9 au n°10, cela décale le nombre de colonnes. En modifiant un bout de code, je suis arrivé à cela un petit test (defun c:lire_txt (/ fic enrg atr x y z pt) (setq fic (open "C:/TMP/TEST.txt" "r")) (while (setq enrg (read-line fic)) (setq atr (substr enrg 1 2)) (setq x (atof(substr enrg 3 15))) (setq y (atof(substr enrg 16 28))) (setq z (atof(substr enrg 29 37))) (setq pt (list x y z)) (command "_point" pt)) (close fic) (prin1) ) Par contre, je ne sais pas comment utiliser la fonction de bseb67 pour réaliser une matrice du type ligne 1: x1 y1 1 0 ligne 2: y1 -x1 0 1 ... ligne n: xi yi 1 0 ligne n+1: yi -xi 0 1 avec i = n/2 avec un fichier texte initial du type 1 x1 y1 z1 2 x2 y2 z2 ... n xn yn. Le séparateur dans le fichier texte est une tabulation. Merci par avance de votre aide. John
-
Tu n'as pas d'exemple de la fonction read-line Le but serait en fait de créer une matrice lisp en lisant un fichier de coordonnées x y Merci de ton aide. John.
-
Bonjour à tous, Je ne sais pas si c'est possible mais peut-on lancer des commandes MS DOS avec un lisp pour convertir un fichier de points NXYZ d'un système à un autre avec CirceBatch puis de calculer à partir de ces deux fichiers (celui de départ dans le système A) et celui d'arrivée dans le système B) les paramètres d'une transformation d'Helmert ? Cette transfo se calcule par un calcul matriciel de moindres carrés à partir d'un semis de points connus dans deux systèmes différents mais je bloque sur une question. Comment lire des données avec un lisp dans un fichier texte puis en extraire les données pour écrire une matrice ? Merci par avance de votre aide. John.
-
J'ai pu m'en sortir en faisant une sélection de tous les blocs concernés par ssget puis de les traiter avec la fonction de Gile. Merci de vos réponses. John.
