Aller au contenu

kant_ein

Membres
  • Compteur de contenus

    20
  • Inscription

  • Dernière visite

Contact Methods

  • Website URL
    http://

kant_ein's Achievements

Newbie

Newbie (1/14)

0

Réputation sur la communauté

  1. Simple, rapide et efficace ! Il faut vraiment que j'arrive à trouver du temps pour creuser COVADIS... Merci Olivier.
  2. Bonjour, Malgré mes recherches, je ne trouve pas de solution à mon problème en dépit de pistes prometteuses comme les lisp ALTZ ou BLOC_ALT. Je dispose d'un levé topo avec des points topo "propres" (coordonnées et attributs MAT, ALT, COD correctement renseignés). À certains de ces points sont superposés des blocs représentant des émergences de réseaux humides. Le problème c'est que le Z de ces blocs est à 0. Je souhaiterais donc les "élever" au Z des points topo correspondants. Les lisp cités précédemment ne permettent "que" d'élever le bloc comportant l'attribut d'altitude au bon Z. L'équivalent de ce que propose COVADIS pour l'édition des points topo. Je tourne sous AutoCAD Map 3D et je dispose de COVADIS. Merci d'avance
  3. Ça fonctionne !!! Et grâce à toi c'est bien parti pour que Noël tombe le 25 de chaque mois cette année ! Mille mercis
  4. Bonjour, Après avoir testé sur 2 fichiers différents, le résultat du lisp est concis... Le dessin ne contient pas de Polyligne 3d Le lisp fait sans doute le job mais le résultat affiché (prompt et txt) concerne uniquement le dernier type d'entité linéaire traité. On dirait que les instructions d'écriture des résultats n'interviennent qu'à la toute fin du lisp au lieu d'intervenir à chaque itération de type d'entité linéaire (du moins c'est comme ça que j'interprète le problème avec ma vision plus Python que Lisp).
  5. :blink: Je savais en postant ici que j'aurais de l'aide. De là à imaginer un lisp tout neuf entièrement réalisé suivant mes contraintes et en moins d'une demie journée... Gilles, un immense merci ! Je ne pourrais tester ça que demain mais je ne doute pas un instant que ça fasse le job.
  6. Je m'aperçois que dans mon exemple les calques sont sortis dans l'ordre alphabétique. Un hasard ? Ils n'ont pas été créés dans cet ordre. [Edit] Un coup du hasard ! Un nouveau test m'a donné ça : Le dessin contient : 6 LWPOLYLINE beta 12 alpha 8 delta 11 layer_a 18 layer_b 11 layer_c 12 Longueur totale dans le dessin = 54
  7. La 2ème proposition (cumul de la longueur des entités par calque). L'intérêt de cette routine pour moi est d'évaluer rapidement le linéaire des différents réseaux dans un fichier de récolement (malheureusement pas forcément conforme au gabarit défini par notre structure).
  8. Je souhaiterais obtenir quelque-chose comme ça : Le dessin contient : 3 LINE layer_a 10.00 layer_b 5.00 layer_c 3.00 Longueur totale dans le dessin = 18.00 Le dessin ne contient pas de POLYLINE. Le dessin contient : 3 LWPOLYLINE layer_a 8.00 layer_b 6.00 layer_c 9.00 Longueur totale dans le dessin = 23.00 Pour le moment, les longueurs obtenues par layer pour les LWPOLYLINE correspondent au cumul des longueurs de LINE et LWPOLYLINE alors que la longueur totale est bonne : Le dessin contient : 3 LINE layer_a 10 layer_b 5 layer_c 3 Longueur totale dans le dessin = 18 Le dessin ne contient pas de POLYLINE. Le dessin contient : 3 LWPOLYLINE layer_a 18 layer_b 11 layer_c 12 Longueur totale dans le dessin = 23 Merci de ton intérêt pour mon problème.
  9. Bonjour, Comme indiqué dans le titre, je cherche à obtenir les longueurs cumulées des différents types d'entité linéaire par calque. J'ai trouvé un lisp proposé par (gile) dans ce topic et j'ai tenté de le modifier pour obtenir ce que je veux mais je bloque sur 2 points (guère surprenant vu mon niveau en lisp...). Je souhaiterais que le lisp me donne les longueurs pour les LINE, POLYLINE et LWPOLYLINE. J'ai donc bêtement copier/coller tout le bloc if en changeant le type d'entité. Le décompte d'entités fonctionne mais les longueurs se cumulent lors du passage au type d'entité suivant. En gros, si dans un calque la longueur cumulée de LINE est égale à 2 et la longueur cumulée de LWPOLYLINE est égale à 5, le lisp me sort bien 2 pour les LINE mais 7 pour les LWPOLYLINE. Je ne sais ni quelle variable remettre à 0 ni comment... Je souhaiterais également que les résultats soient triés en suivant l'ordre alphabétique des calques. J'ai essayé de bidouiller avec un vl-sort mais lisp et bidouille ne vont pas bien ensemble ! D'avance un grand merci à celles et ceux qui se pencheront sur mon problème. Demande subsidiaire : si les résultats pouvaient en plus être enregistrés dans un fichier txt au nom du dwg et dans le même répertoire que celui-ci, ce serait Noël le 25 de chaque mois ! Voici le code en question : (defun C:xL_by_layer (/ ss tot nb n long obj lst lay l_lay) (vl-load-com) (if (setq ss (ssget "_X" '((0 . "LINE")))) (progn (setq nb (sslength ss) n 0 tot 0.0) (princ (strcat "\n\nLe dessin contient : " (itoa nb) " LINE") ) (repeat nb (setq obj (vlax-ename->vla-object (ssname ss n)) long (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) tot (+ tot long) lay (vla-get-Layer obj) ) (strcat "\nP" (itoa (setq n (1+ n))) " = " (rtos long) "\tCalque : " lay ) (if (setq l_lay (assoc lay lst)) (setq lst (subst (cons lay (+ long (cdr l_lay))) l_lay lst)) (setq lst (cons (cons lay long) lst)) ) ) (mapcar '(lambda (x) (princ (strcat "\n" (car x) "\t" (rtos (cdr x)) ) ) ) lst ) (princ (strcat "\nLongueur totale dans le dessin = " (rtos tot))) (textscr) ) (princ "\n\nLe dessin ne contient pas de LINE.") ) (if (setq ss (ssget "_X" '((0 . "POLYLINE")))) (progn (setq nb (sslength ss) n 0 tot 0.0) (princ (strcat "\n\nLe dessin contient : " (itoa nb) " POLYLINE") ) (repeat nb (setq obj (vlax-ename->vla-object (ssname ss n)) long (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) tot (+ tot long) lay (vla-get-Layer obj) ) (strcat "\nP" (itoa (setq n (1+ n))) " = " (rtos long) "\tCalque : " lay ) (if (setq l_lay (assoc lay lst)) (setq lst (subst (cons lay (+ long (cdr l_lay))) l_lay lst)) (setq lst (cons (cons lay long) lst)) ) ) (mapcar '(lambda (x) (princ (strcat "\n" (car x) "\t" (rtos (cdr x)) ) ) ) lst ) (princ (strcat "\nLongueur totale dans le dessin = " (rtos tot))) (textscr) ) (princ "\n\nLe dessin ne contient pas de POLYLINE.") ) (if (setq ss (ssget "_X" '((0 . "LWPOLYLINE")))) (progn (setq nb (sslength ss) n 0 tot 0.0) (princ (strcat "\n\nLe dessin contient : " (itoa nb) " LWPOLYLINE") ) (repeat nb (setq obj (vlax-ename->vla-object (ssname ss n)) long (vlax-curve-getDistAtParam obj (vlax-curve-getEndParam obj) ) tot (+ tot long) lay (vla-get-Layer obj) ) (strcat "\nP" (itoa (setq n (1+ n))) " = " (rtos long) "\tCalque : " lay ) (if (setq l_lay (assoc lay lst)) (setq lst (subst (cons lay (+ long (cdr l_lay))) l_lay lst)) (setq lst (cons (cons lay long) lst)) ) ) (mapcar '(lambda (x) (princ (strcat "\n" (car x) "\t" (rtos (cdr x)) ) ) ) lst ) (princ (strcat "\nLongueur totale dans le dessin = " (rtos tot))) (textscr) ) (princ "\n\nLe dessin ne contient pas de LWPOLYLINE.") ) (princ) )
  10. Bonjour, Je recherche, en vain pour le moment, une solution pour calculer automatiquement des valeurs d'attribut dans un bloc. Mon bloc symbolise un regard et doit comporter 3 attributs : l'altimétrie du regard (TN), la profondeur du regard (Prof) et l'altimétrie du fond de regard (Radier). Je souhaiterais pouvoir saisir le TN et la profondeur et que le radier soit automatiquement calculé (Radier = TN - Prof). Ce bloc fera partie d'un fichier de gabarit utilisé pour importer/exporter des données entre ArcGIS et AutoCAD. Donc il me paraît difficile d'utiliser un lisp. Il faudrait que la solution n'utilise que les outils natifs d'AutoCAD. Pour le moment, ce qui s'approche le plus de la solution est l'utilisation des paramètres de bloc dynamique. Le calcul se fait bien et les attributs affichent les valeurs (si nécéssaire, un REGEN permet d'actualiser les valeurs) mais : -1- lors de l'ouverture du fichier dwg sous ArcGIS, les blocs apparaissent comme blocs anonymes (*Ux) puisqu'on utilise les propriétés dynamiques... Du coup, c'est inexploitable dans ArcGIS ! -2- lors de l'export d'ArcGIS, les valeurs d'attributs sont OK pour chaque bloc (Bloc:Assa_Regard_1 sur la capture Propr_bloc) mais celles des paramètres restent aux valeurs par défaut (Personnalisé sur la capture Propr_bloc)... Si quelqu'un a une idée à soumettre pour réussir ça... Merci d'avance pour votre aide !
  11. Bonjour à tous, lili : à chaque fois que je change de système de projection, MAP me renvoie un message d'erreur concernant les hachures ("impossible de convertir le datum"). Du coup, toutes les entités ponctuelles ou linéaires sont correctement reprojetées alors que les hachures (et parfois certains blocs) sont reprojetées avec un décalage (ou simplement ignorées par la requête...). Si tu as une procédure qui fonctionne sans erreur, je suis preneur. [HS] Lors d'un changement de projection, qu'est-ce qui peut générer le message "eDuplicateRecordName" (dwg sans table de données) ? [/HS]
  12. (gile) : ta réponse s'est intercalée entre celle de didier et la mienne. Du coup, je ne l'ai vu que ce matin... Je n'ai pas testé le 2nd lisp car tu l'annonçais comme "un défi pour le fun". Je pensais donc que le 1er était opérationnel. ## EDIT ## Je viens de tester le 2nd lisp. La création des contours fonctionne mais... les polylignes sont toutes décomposées en segments simples. Je m'aperçois que je n'ai pas précisé ma version d'AutoCAD... AutoCAD Map 3D 2010
  13. Ce sont bien des hachures. Un _hatchedit classique me permet d'obtenir le contour. Mais avec plus d'une centaine de zones à traiter, ce sera fastidieux de le faire "à la main".
  14. Non, le calque est déverrouillé...
  15. Bonjour à tous, Je dois actualiser un fichier de zonage dans lequel les zones sont représentées par des hachures sans contour. Vu que ce fichier est Lambert Z1, je dois au préalable le reprojeter en RGF93. C'est là que les ennuis commencent. Comme à chaque fois avec les hachures, il est "impossible de convertir le datum"... Du coup, mes hachures ne se reprojettent pas comme il faut. D'où mon idée de reprojeter uniquement le contour de ces hachures et de les recréer ensuite. Vu que j'ai un nombre non négligeable de zones, j'ai recherché un lisp qui pourrait automatiser la création des contours. Dans ce sujet, j'ai trouvé le lisp ci-dessous proposé par (gile) mais il ne fonctionne pas... Pour être plus précis, après l'invite de sélection des hachures, il ne se passe rien. J'ai essayé avec l'ensemble des hachures, avec seulement 2 hachures puis une seule et... rien ! Quelqu'un verrait-il le pourquoi du comment ? (defun c:hbound (/ ss echo n ent elast lay) (princ "\nSélectionnez les hachures (Entrée, Espace ou clic droit pour toutes") (if (or (setq ss (ssget '((0 . "HATCH")))) (setq ss (ssget "_X" '((0 . "HATCH")))) ) (progn (setq echo (getvar 'cmdecho) n -1 ) (setvar 'cmdecho 0) (while (setq ent (ssname ss (setq n (1+ n)))) (setq elast (entlast) lay (assoc 8 (entget ent)) ) (if (= 0 (cdr (assoc 97 (entget ent)))) (vl-catch-all-apply '(lambda () (command "_.hatchedit" ent "_boundary" "_polyline" "_yes") ) ) ) (while (setq elast (entnext elast)) ((lambda (l) (entmod (subst lay (assoc 8 l) l)) ) (entget elast) ) ) ) (setvar 'cmdecho echo) ) ) (princ) )
×
×
  • 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é