cad01441 Posté(e) le 11 octobre 2013 Posté(e) le 11 octobre 2013 Bonjour à tous, J'ai besoin d'aide, j'ai trois calques, le premier (calque1) contient des textes multiligne, le deuxième (calque2) des textes, et le troisième (calque3) des polylignes.Il y a un seul MTEXT (calque1) mais beaucoup de textes (calque2) par polyligne (calque3), les polylignes désignent quel textes (calque2) appartiennent à quel texte multiligne (calque1).J'aimerais si possible, un tableau Excel comme ceci par exemple:Calque1 Calque2T1 152T1 365T1 36T1 78C2 954C2 321C2 21 Merci d'avance.
cad01441 Posté(e) le 13 octobre 2013 Auteur Posté(e) le 13 octobre 2013 Bonjour, J'ai trouvé une routine LISP de (gile) nommé c:AiresParcelles dans ce sujet, j'ai essayé de la modifier mais je m'y connais très peu en LISP, le résultat est ceci: ;;; gc:GetItem (gile) ;;; Retourne le vla-object de l'item s'il est présent dans la collection ;;; ;;; Arguments ;;; col : la collection (vla-object) ;;; name : le nom de l'objet (string) ou son indice (entier) ;;; ;;; Retour : le vla-object ou nil (defun gc:GetItem (col name / obj) (vl-catch-all-apply (function (lambda () (setq obj (vla-item col name)))) ) obj ) (defun c:AiresParcelles_mod (/ *error* acdoc filename ss n file pa plst num num2 lay) (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "Erreur: " msg)) ) (and file (close file)) (princ) ) (vl-load-com) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) layers (vla-get-Layers acdoc) ) (if (setq lay (gc:GetItem layers "nonconforme")) (if (setq ss (ssget "_X" '((8 . "nonconforme")))) (alert "Il reste des objets sur le calque\"nonconforme\"") (vla-delete lay) ) (if (and (setq filename (getfiled "AiresParcelles" (getvar "DWGPREFIX") "xls" 1)) (princ "\nSélectionnez les polylignes (ou valider pour toutes).") (or (ssget '((0 . "LWPOLYLINE") (8 . "Calque3"))) (ssget "_X" '((0 . "LWPOLYLINE") (8 . "Calque3"))) ) ) (progn (setq file (open filename "w")) (write-line "Calque1\tCalque2" file) (vlax-for pl (setq ss (vla-get-ActiveSelectionSet acdoc)) (setq pa (fix (vlax-curve-getendParam pl)) plst nil ) (while (setq pt (vlax-curve-getPointAtParam pl pa)) (setq pa (1- pa) plst (cons (trans pt 0 1) plst) ) ) (setq num (ssget "_WP" plst '((0 . "MTEXT") (8 . "Calque1"))) num2 (ssget "_WP" plst '((0 . "TEXT") (8 . "Calque2"))) ) (if (or (not num) (not num2)) (progn (or lay (setq lay (vla-add layers "nonconforme"))) (vla-put-Color lay 30) (vla-put-layer pl "nonconforme") ) (write-line (strcat (vla-get-TextString (vlax-ename->vla-object (ssname num 0))) "\t" (vla-get-TextString (vlax-ename->vla-object (ssname num2 0))) ) file ) ) ) (close file) (vla-delete ss) (and lay (alert "Parcelle(s) non conforme(s)")) ) ) ) (princ) ) ça marche pour la colonne de Calque1, mais ça renvois que un seul des textes de Calque2 qui correspondent au MTEXT de Calque1.Exemple: T1 152 C2 954 M3 11 est ce que c'est réparable avec repeat ou autres commandes ? si oui, comment? Merci d'avance pour votre aide.
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