kant_ein
Membres-
Compteur de contenus
20 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par kant_ein
-
Elévation d'un bloc en fonction du point topo superposé
kant_ein a répondu à un(e) sujet de kant_ein dans AutoCAD 2019
Simple, rapide et efficace ! Il faut vraiment que j'arrive à trouver du temps pour creuser COVADIS... Merci Olivier. -
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
-
Longueurs cumulées des différents types d'entité linéaire par calque
kant_ein a répondu à un(e) sujet de kant_ein dans LISP et Visual LISP
Ç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 -
Longueurs cumulées des différents types d'entité linéaire par calque
kant_ein a répondu à un(e) sujet de kant_ein dans LISP et Visual LISP
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). -
Longueurs cumulées des différents types d'entité linéaire par calque
kant_ein a répondu à un(e) sujet de kant_ein dans LISP et Visual LISP
: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. -
Longueurs cumulées des différents types d'entité linéaire par calque
kant_ein a répondu à un(e) sujet de kant_ein dans LISP et Visual LISP
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 -
Longueurs cumulées des différents types d'entité linéaire par calque
kant_ein a répondu à un(e) sujet de kant_ein dans LISP et Visual LISP
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). -
Longueurs cumulées des différents types d'entité linéaire par calque
kant_ein a répondu à un(e) sujet de kant_ein dans LISP et Visual LISP
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. -
Longueurs cumulées des différents types d'entité linéaire par calque
kant_ein a posté un sujet dans LISP et Visual LISP
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) ) -
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 !
-
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]
-
(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
-
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".
-
Non, le calque est déverrouillé...
-
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) )
-
Remplacer plusieurs objets identiques par autant de blocs
kant_ein a répondu à un(e) sujet de kant_ein dans AutoCAD 2010
Bonjour, C'est parfait ! Cela répond exactement à mes besoins. Merci beaucoup. -
Remplacer plusieurs objets identiques par autant de blocs
kant_ein a répondu à un(e) sujet de kant_ein dans AutoCAD 2010
Bonjour, Ce lisp répond parfaitement à mes besoins. Enfin... à un détail près : le point d'insertion du bloc. Celui-ci est défini sur le premier sommet de la polyligne. Idéalement, il faudrait qu'il soit défini sur le centroïde de la polyligne. J'ai trouvé ici un lisp qui convertit les polylignes fermées en région, crée un point au niveau du centroïde puis supprime la région. Je pensais combiner les 2 mais le lisp pt-cen refuse de sélectionner mes polylignes... Le problème semble se situer dans les lignes de codes suivantes mais je ne sais pas quoi modifier pour que cela fonctionne. ;; Sélection à l'écran (filtre les lwpolylignes fermées) (vla-SelectOnScreen SelSet (vlax-SafeArray-fill (vlax-make-SafeArray vlax-vbInteger '(0 . 1) ) '(0 70) ) (vlax-SafeArray-fill (vlax-make-SafeArray vlax-vbVariant '(0 . 1) ) (list "LWPOLYLINE" 1) ) ) Edit : pourquoi ce lien pointe sur la page d'accueil du site ? Les crochets des balises ont volontairement été remplacés par des accolades pour que l'adresse soit visible. [Edité le 22/6/2011 par kant_ein] [Edité le 22/6/2011 par kant_ein] -
Remplacer plusieurs objets identiques par autant de blocs
kant_ein a répondu à un(e) sujet de kant_ein dans AutoCAD 2010
Merci pour tout. J'essaie de décrypter ça et je le testerai demain au taf. Comme dirait l'autre : yapuka ! Je ferai un suivi de ce post. -
Remplacer plusieurs objets identiques par autant de blocs
kant_ein a répondu à un(e) sujet de kant_ein dans AutoCAD 2010
Bonjour, Je m'orientais effectivement vers un lisp mais je n'ai pas encore eu le loisir de me plonger dans ce langage... Est-ce faisable en VBA ? J'ai beaucoup utilisé ce langage sous Excel pour traiter de (très) grandes quantités de données. Un échantillon de dessin n'apporterait pas grand-chose. Pour rentrer dans les détails, j'ai près de 600 "carrés" représentant des regards d'assainissement. Je souhaite transformer ces polylignes en bloc. La sélection filtrée des polylignes est simple. Par contre, la syntaxe pour faire une boucle sélectionnant chaque polyligne l'une après l'autre pour en faire un bloc m'est totalement inconnue... A votre bon coeur, m'sieurs dames ! -
Remplacer plusieurs objets identiques par autant de blocs
kant_ein a posté un sujet dans AutoCAD 2010
Bonjour, Malgré de nombreuses recherches ici et ailleurs, je ne trouve toujours pas de solution à mon problème. Sans doute (certainement) pourrez-vous m'aider ! Je souhaite remplacer de multiples objets identiques par autant de blocs. En fait, j'ai récupéré un dessin dans lequel certains éléments sont représentés par des polylignes fermées toutes de caractéristiques identiques au lieu d'être représentés par autant de blocs d'une seule et même définition. Je vois bien la manipulation qui pourrait être faite mais je ne maîtrise pas la programmation AutoCad... Voilà comment je vois les choses : - sélection de toutes les polylignes concernées (critères : calque et aire) - conversion itérative de chacune de ces polylignes en bloc (toto-i avec i=0 à nb de polylignes sélectionnées) Ensuite il me suffira d'utiliser le lisp rbloc de Patrick35 pour n'avoir plus qu'une seule définition de bloc. Merci d'avance.
