Aller au contenu

Bhoo

Membres
  • Compteur de contenus

    1
  • Inscription

  • Dernière visite

Visiteurs récents du profil

Le bloc de visiteurs récents est désactivé et il n’est pas visible pour les autres utilisateurs.

Bhoo's Achievements

Newbie

Newbie (1/14)

  • Reacting Well Rare
  • Conversation Starter Rare

Recent Badges

0

Réputation sur la communauté

  1. Bonjour à toute et à tous, je suis débutant encore dans la création du lis et je souhaiterais créer un LISP permettant d'extraire les données présentes dans une polyligne. Pour expliquer le but, c'est que je travaille dans une boîte d'exécution et nous recevons des DCE misérable et pouvons exploitable. Donc nous sommes contraints de recommencer le travail. Pour cela je voudrais en désignant une polyligne fermée autour d'un local par exemple extrait les noms et attributs de tous les blocs présents dans la polyligne mais également le texte présent dans le Xref ou bloc de bloc dans xref ou juste les texte présent dans l'aire de la polyligne. Le tout regrouper dans un tableau autocad pour plus tard faire une extraction vers excel. Voici mon code sur lequel je suis partis mais rien ne fonctionne. Merci infiniment de votre attention et de votre aide en avance. Le code : (defun C:ANALYSER () (setq pline (car (entsel "\nSélectionnez la polyligne fermée : "))) (if (not (null pline)) (progn (setq data '()) ; Initialisation de la liste de données (setq detectorCount 0) ; Initialisation du compteur de détecteurs ; Récupération des sommets de la polyligne (setq vertices (vlax-get-property (vlax-ename->vla-object pline) 'Coordinates)) ; Fonction pour vérifier si un point est à l'intérieur d'une polyligne fermée (defun is-point-inside-polyline (pt vertices) (setq oddNodes 0) (setq j (length vertices) i 0) (while (< i (length vertices)) (setq vi (nth i vertices)) (setq vj (nth j vertices)) (if (and (< (cadr pt) (cadr vj)) (or (and (<= (cadr vi) (cadr pt)) (< (cadr pt) (cadr vj))) (and (<= (cadr vj) (cadr pt)) (< (cadr pt) (cadr vi))))) (if (< (car pt) (+ (/ (- (car vj) (car vi)) (- (cadr vj) (cadr vi))) (car vi))) (setq oddNodes (1+ oddNodes)) ) ) (setq j i) (setq i (1+ i)) ) (/= 0 (% oddNodes 2)) ) ; Boucle à travers tous les blocs dans le dessin (setq ss (ssget "X" '((0 . "INSERT")))) (setq i 0) (while (< i (sslength ss)) (setq block (ssname ss i)) (setq insertion-point (cdr (assoc 10 (entget block)))) ; Vérification si le point d'insertion est à l'intérieur de la polyligne (if (is-point-inside-polyline insertion-point vertices) (progn ; Incrémentation du compteur de détecteurs (setq detectorCount (1+ detectorCount)) ; Récupération des attributs du bloc (setq attlist '()) (setq attents (entget block)) (foreach x attents (if (= (car x) 1) ; Code 1 représente le texte de l'attribut (setq attlist (cons (cdr x) attlist)))) ; Ajout des données du bloc à la liste (setq data (cons (list (cdr (assoc 2 (tblsearch "BLOCK" (cdr (assoc -2 attents))))) ; Nom du bloc insertion-point ; Point d'insertion du bloc attlist) ; Liste des attributs du bloc data)) )) (setq i (1+ i)) ) ; Affichage des données récupérées (setq table (vla-add acadDoc '(-4 . 1) (vlax-3D-point 0 0 0) 1 (1+ detectorCount) 3)) (vla-put-name table "ANALYSE") (vla-put-columns table 3) ; Remplissage du tableau avec les données récupérées (setq row 1) (foreach item data (vla-setText table row 0 (car item)) ; Nom du bloc (vla-setText table row 1 (rtos (vlax-safearray->list (vlax-variant-value (cadr item))) 2 2)) ; Point d'insertion du bloc (vla-setText table row 2 (apply 'strcat (caddr item))) ; Attributs du bloc (setq row (1+ row)) ) (prompt "\nAnalyse terminée. Tableau créé avec les données.") ) (prompt "\nAucune polyligne sélectionnée.") ) (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é