lecrabe Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 Bonjour Malgre mes recherches sur le Web, le vieux Decapode n'a pas trouve son bonheur ! *** 1 *** Text inside 2DPlines *** ---> Selection courante 1) Poser une question : Texte Unique (UN SEUL) , Zero Texte (AUCUN) , Textes multiples (N Textes) A propos on ne s'occupe que de textes simples (TEXT) - On ne traite pas les Multi-textes ! 2) Selection AutoCAD classique On ne retient que les Polylignes (legeres ou lourdes) 2D closes/fermees 3) En sortie, on dispose dans la selection courante, des polylignes (suivant la reponse a la 1ere question) avec : - UN SEUL texte inside (A l'interieur)- ZERO texte inside (A l'interieur)- N textes inside (A l'interieur) On se base sur le point d'insertion du texte simple : aucune importance si le texte deborde a l'exterieur ** 2 *** ONE Text inside 2DPlines et fichier CSV *** ---> Selection courante Soit un fichier CSV tres simple, contenant N lignes avec UN SEUL texte par ligne Par exemple un Numero : 123 , A0123 , AB789 , etc Soit une selection AutoCAD classique de N Polylignes (legeres ou lourdes) 2D closes/fermeesOn suppose que TOUTES ces PLines ont UN SEUL texte a l'interieur !? Le resultat sera une selection de toutes les Polylignes pour lesquelles le texte (On suppose qu'il est UNIQUE et present) a l'interieur est present exactement dans le fichier CSV ... On a fait les tests necessaires grace a la routine precedente ... Donc je pense qu'il faut lire d'abord TOUT le fichier CSV, le monter dans une liste et apres pour chaque Pline et SON texte a l'interieur, faire le texte d'egalite eten consequence garder ou pas l'identifiant de la Pline pour creer A LA fin un jeu de selection ... Merci d'avance de votre aide, Bye, lecrabe Autodesk Expert Elite Team
DenisHen Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 Salut au Décapode. Je ne sais pas si ça peut t'aider, mais j'ai un Lisp de (gile) modifié par BonusCAD qui crée un jeu de sélection avec tous les objets contenus ou capturés, dans la vue courante, par l'objet sélectionné (cercle, ellipse, polyligne fermée). Ça ne fait pas ce que tu veux, mais je pense que ça peut servir de base... En espérant que ça te serve. Denis...SupCommuneVide_BonusCad.zip Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Patrick_35 Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 Salut à tous Mon crabe aux pinces d'or, j'ai beau lire ton CDC et je ne comprends pas. L'age ou la fin de semaine ?Si tu pouvais nous illustrer ta demande par un dessin / schéma / grafcet. Sur ce, je vais finir mon muscadet. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Raph_38 Posté(e) le 10 juin 2016 Posté(e) le 10 juin 2016 oh merde ... ça y est, j'ai mal a la tête Raph. Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !
lecrabe Posté(e) le 11 juin 2016 Auteur Posté(e) le 11 juin 2016 Hello Patrick C'est bien la 1ere fois que l'on me dit que mon CDC/CCTP est incomprehensible !! Je vais essayer de re-expliquer la 2eme routine demandee La plus "importante" pour moi La 1ere routine serait utilisee pour verifier le DWG AVANT d'utiliser la 2eme ... ** 2 *** ONE Text inside 2DPlines et fichier CSV *** ---> Selection courante Soit un fichier CSV tres simple, contenant N lignes avec UN SEUL texte par lignePar exemple un Numero : 123 , A0123 , AB789 , etc Soit une selection AutoCAD classique de N Polylignes (legeres ou lourdes) 2D closes/fermeesOn suppose que TOUTES ces PLines ont UN SEUL texte a l'interieur !? Le resultat sera une selection de toutes les Polylignes pour lesquelles le texte (On suppose qu'il est UNIQUE et present) a l'interieur est present exactement dans le fichier CSV ... On a fait les tests necessaires grace a la routine precedente ... Donc je pense qu'il faut lire d'abord TOUT le fichier CSV, le monter dans une listeet apres pour chaque Pline et SON texte a l'interieur, faire le texte d'egalite eten consequence garder ou pas l'identifiant de la Pline pour creer A LA fin un jeu de selection ... 1) Soit un DWG avec des Polylignes 2D (Legeres ou Lourdes) Closes/Fermees2) En principe toutes les Polylignes ont UN SEUL texte simple dessine a l'interieurCe texte simple est un IDENTIFIANT pour la Polyligne (No/Code de Piece dans un batiment, No/Code Parcelle dans un Cadastre, etc) - Si ZERO Texte alors la PLine ne sera jamais retenue !- Si 2/3/4 Textes alors la PLine ne sera jamais retenue ! C'est pourquoi j'ai besoin de la 1ere routine pour VERIFIER le DWG AVANT !Mais ce n'est pas la priorite No 1 !! ... Attention il peut y avoir plusieurs fois le meme Identifiant ... ... MAIS dans des PLines differentes ... 3) J'ai "a cote" un fichier texte CSV de N lignes ultra-simple ...Chaque ligne contient un texte (ensemble de lettres , chiffres , - , _ )qui correspond "peut etre" a UN ou N textes dans les Polylignes !? Donc la 2eme routine doit : - Demander le fichier CSV - Lire le fichier CSV et stocker dans une liste TOUTES les lignes d'Identifiants - Demander une selection AutoCAD classique DONT on ne retient QUE :Les Polylignes 2D (legeres/lourdes) closes/fermees ET les Textes simples- Parcourir TOUTES les PLines concernees, detecter un texte a l'interieur (Utilisation sans doute du Special_Selection de Gilles et de son option SSOF sur la PLine)- Comparer le texte trouve a l'interieur par rapport a la liste CSV- Si EGALITE (avec un quelconque element de la liste) alors on "garde" la PLineDes qu'on trouve une egalite, on arrete de parcourir la liste !- Si NON-EGALITE alors on "jette" la PLine Et on boucle sur la selection ... PLine suivante ... A la sortie, je desire simplement un jeu de selection des N Polylignes dont le texte a l'interieur correspond a n'importe quel texte de la liste CSV ! Eventuellement qq petits compteurs seraient sympas ! ... du genre ... - xxxx lignes dans le fichier CSV- yyyy PLines analysees- zzzz PLines "retenues" et donc dans le jeu de selection courant A votre bon coeur, Merci d'avance, Le crabe Autodesk Expert Elite Team
Olivier Eckmann Posté(e) le 12 juin 2016 Posté(e) le 12 juin 2016 Hello, Tu peux essayer ça qui doit fonctionner. (defun C:POLYTXT ( / sChoix JEU JEU_POLY JEU_POLY_OK I J oEnt oPoly lsPts iNbText ptLst ) (initget 1 "Aucun Un Plusieurs") (setq sChoix (getkword "\nAucun/Un/Plusieurs ")) (if (setq JEU (ssget (list (cons 0 "*POLYLINE,TEXT")))) (progn (setq I 0 JEU_POLY (ssadd)) (repeat (sslength JEU) (setq oEnt (ssname JEU I)) (setq I (1+ I)) (if (= "TEXT" (cdr (assoc 0 (entget oEnt)))) (setq lsPts (append lsPts (list (GetTextPosition oEnt)))) (if (= 1 (logand 1 (cdr (assoc 70 (entget oEnt))))) (ssadd oEnt JEU_POLY) ) ) ) (setq JEU nil I 0 JEU_POLY_OK (ssadd)) (repeat (sslength JEU_POLY) (setq oPoly (ssname JEU_POLY I)) (setq I (1+ I)) (setq J 0 iNbText 0 ptLst (GetCoordinates oPoly)) (repeat (length lsPts) (if (In_Figure (nth J lsPts) ptLst) (setq iNbText (1+ iNbText)) ) (setq J (1+ J)) ) (cond ((and (= 0 iNbText) (= sChoix "Aucun")) (ssadd oPoly JEU_POLY_OK)) ((and (= 1 iNbText) (= sChoix "Un")) (ssadd oPoly JEU_POLY_OK)) ((and (> iNbText 1) (= sChoix "Plusieurs")) (ssadd oPoly JEU_POLY_OK)) ) ) (sssetfirst nil JEU_POLY_OK) ) ) ) (defun C:POLYCSV ( / sFileName JEU JEU_POLY JEU_POLY_OK I J oEnt lsText lsPts) (if (and (setq sFileName (getfiled "sélectionner un fichier CSV" (getvar "DWGPREFIX") "CSV" 0)) (setq JEU (ssget (list (cons 0 "*POLYLINE,TEXT")))) ) (progn (setq f (open sFileName "r")) (while (setq sLine (read-line f)) (setq lsText (append lsText (list sLine))) ) (close f) (setq I 0 JEU_POLY (ssadd)) (repeat (sslength JEU) (setq oEnt (ssname JEU I)) (setq I (1+ I)) (if (= "TEXT" (cdr (assoc 0 (entget oEnt)))) (if (member (cdr (assoc 1 (entget oEnt))) lsText) (setq lsPts (append lsPts (list (GetTextPosition oEnt)))) ) (if (= 1 (logand 1 (cdr (assoc 70 (entget oEnt))))) (ssadd oEnt JEU_POLY) ) ) ) (setq JEU nil I 0 JEU_POLY_OK (ssadd)) (repeat (sslength JEU_POLY) (setq oPoly (ssname JEU_POLY I)) (setq I (1+ I)) (setq J 0 iNbText 0 ptLst (GetCoordinates oPoly)) (repeat (length lsPts) (if (In_Figure (nth J lsPts) ptLst) (setq iNbText (1+ iNbText)) ) (setq J (1+ J)) ) (if (= 1 iNbText) (ssadd oPoly JEU_POLY_OK) ) ) (sssetfirst nil JEU_POLY_OK) ) ) ) (defun GetTextPosition (oText / PT) (if (and oText (= "TEXT" (cdr (assoc 0 (entget oText)))) ) (progn (if (and (= 0 (cdr (assoc 72 (entget oText)))) (= 0 (cdr (assoc 73 (entget oText))))) (setq PT (cdr (assoc 10 (entget oText)))) (setq PT (cdr (assoc 11 (entget oText)))) ) ) ) PT ) ; == EN ;* The algorithm is taken on http://algolist.manual.ru/maths/geom/belong/poly2d.php ;* On the basis of vk_IsPointInside ;* Posted http://www.arcada.com.ua/forum/viewtopic.php?p=12322 ;* Boundary - the list normalized [i.e. only or (X Y) or (X Y Z)] points ;* Point - chek point ;* Boundary - list of boundary point (defun In_Figure (Point Boundary / FarPoint Check) ;_????????? Boundary ?? ??????? car ? last ???? ? ?? ?? ????? ;_The same point checks Boundary on a condition car and last (if (not (equal (car Boundary)(last Boundary) 1e-6)) (setq Boundary (append Boundary (list(car Boundary))))) (setq FarPoint (cons (+ (apply 'max (mapcar 'car Boundary)) 1.0) (cdr Point) ) ;_ end of cons ) ;_ end of setq (or (not (zerop (rem (length (vl-remove nil (mapcar (function (lambda (p1 p2) (inters Point FarPoint p1 p2)) ) ;_ end of function Boundary (cdr Boundary) ) ;_ end of mapcar ) ;_ end of vl-remove ) ;_ end of length 2 ) ;_ end of rem ) ;_ end of zerop ) ;_ end of not (vl-some (function (lambda (x) x)) (mapcar (function (lambda (p1 p2) (or Check (if (equal (+ (distance Point p1) (distance Point p2) ) ;_ end of + (distance p1 p2) 1e-3) ;_ end of equal (setq Check T) nil) ) ) ;_ end of lambda ) ;_ end of function Boundary (cdr Boundary) ) ;_ end of mapcar ) ;_ end of vl-some ) ;_ end of or ) (defun GetCoordinates (oPoly / ptLst) (if (and oPoly (setq oPolyLst (entget oPoly))) (progn ; poly allégée (if (= "LWPOLYLINE" (cdr (assoc 0 oPolyLst))) (setq ptLst (mapcar 'cdr (vl-remove-if-not '(lambda(x)(= 10 (car x))) (entget oPoly)) ) ) ;poly ancienne (progn (setq oVtx oPoly) (while (/= "SEQEND" (cdr (assoc 0 (entget (setq oVtx (entnext oVtx)))))) (setq ptLst (append ptLst (list (cdr (assoc 10 (entget oVtx)))))) ) ) ) ) ) ptLst ) Olivier
lecrabe Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 Hello Olivier 1) SUPER & MERCI ! ... La routine POLYCSV semble BIEN fonctionner ... 2) En fait on peut resoudre ce probleme avec des fonctionnalites de AutoCAD MAPavancees et specifiques donc un peu compliquees (Sources de donnees, Gabarits de liens, etc) ! Sans parler du fait qu'il faut utiliser l'ODBC de Windowset que ces Drivers Windows ODBC sont un peu "recalcitrants"en fonction du Niveau d'Excel et/ou de Access DEJA installe(s) sur votre PC !!et de la version de Windows utilisee : 32 ou 64 bits, Win XP, Win Seven, Win 8.0/8.1, Win 10 ... 3) En plus la routine POLYCSV fonctionne sur AutoCAD, ACAD MAP, ACAD Archi, etc ... 4) J'ai l'impression que tu avais "deja sous la main" la routine ou presque equivalent !? 5) RAPPEL: Si qq'un est capable de developper ma 1ere routine demandee pour verifier les DWGs avant de faire tourner POLYCSV, SVP je suis toujours preneur ... MERCI, Bye, lecrabe Autodesk Expert Elite Team
Olivier Eckmann Posté(e) le 13 juin 2016 Posté(e) le 13 juin 2016 Salut Patrice, J'ai modifié le code pour ajouter la fonction POLYTXT Olivier
lecrabe Posté(e) le 13 juin 2016 Auteur Posté(e) le 13 juin 2016 Hello Olivier 1) MERCI BEAUCOUP ! 2) Je teste des que possible ... 3) Avais tu deja des routines semblables ? Respects Maitre Olivier, Bye, lecrabe Autodesk Expert Elite Team
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