kermitos Posté(e) le 27 juin 2008 Posté(e) le 27 juin 2008 Bonjour, un menbre du site m'a fourni le lisp suivant pour quantifié le nombre de lignes sur mon dessin.suivant les différentes doc trouvés je n'arive pas détaillé la composition ( joint)un peti coup de pouce !!! merci d'avance defun c:lh [surligneur] (/ ACDOC L N SEL)[/surligneur](setq AcDoc ( [surligneur] vla-get-activedocument [/surligneur]( [surligneur] vlax-get-acad-object[/surligneur]))sel ( ssget '((0 . "LINE"))) [surligneur] n 0 l 0[/surligneur]) ( [surligneur] vlax-for e[/surligneur] ( [surligneur] vla-get-activeselectionset AcDoc[/surligneur])( [surligneur] if (equal (cadr (vlax-get e 'StartPoint))( [surligneur] cadr (vlax-get e 'EndPoint[/surligneur]))) (setq n (1+ n)[/surligneur]l (+ (vla-get-Length e) l))))(alert (strcat "Nombre de Ligne Horizontale : " (rtos n)"\nLongueur Totale : " (rtos l)))(princ)) Avant de savoir courir if faut savoir marcher
Bred Posté(e) le 27 juin 2008 Posté(e) le 27 juin 2008 Salut,je t'avais expliqé dans ton ton message original que le lisp que je te proposais n'étais pas fait pour débuter. Je ne sais pas quel est ton niveau, mais t'expliquer ces lignes ne te seront je pense pas utile si tu veux apprendre... Mieux vaux commencer par les bases ! Je t'explique quand même : Je scrute la sélection courant en mettant à chaque fois un élément dans e(vlax-for e ( vla-get-activeselectionset AcDoc) Si la coordonnées y du premier point de la ligne = coordonnées y du dernier point de la ligne...( if (equal (cadr (vlax-get e 'StartPoint))( cadr (vlax-get e 'EndPoint))) .... je rajoute +1 à n(setq n (1+ n) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 27 juin 2008 Posté(e) le 27 juin 2008 Salut, Pour compléter la réponse de Bred. Le code qu'il t'a donné utilise des fonctions Visual LISP (les fonctions qui commencent par vla...). Visual LISP est une extension d'AutoLISP qui permet, entre autre, d'accéder aux objets COM comme d'autre langages de programmation. Si les fonctions Visual LISP dont le préfixe est vlax ou vlr (reacteurs) sont renseignées dans l'aide aux développeurs (AutoLISP Reference), les fonctions vla-* ne s'y trouvent pas directement. Elles font appel aux objets, propriétés et méthodes communes au VBA et sont renseignées dans l'aide aux développeurs à la rubrique ActiveX and VBA Reference. Le plus simple (à mon avis) pour accéder à l'aide est d'utiliser l'Éditeur Visual LISP, de sélectionner la fonction (AutoLISP ou Visual LISP) et de cliquer sur l'icone [?]. Pour faire la même chose en "pur" AutoLISP (et je pense qu'il vaut mieux commencer par apprendre AutoLISP qui est la base (syntaxe et "grammaire") incontournable) on peut faire comme ceci : (defun c:lh (/ sel n l line elst pt1 pt2) ;; initialisation des variables (setq l 0.0 ; longueur cnt 0 ; compteur de ligne "valides" n 0 ; compteur de ligne sélectionnées ) ;; sélection des ligne (utilisation d'un filtre) (if (setq sel (ssget '((0 . "LINE")))) ;; boucle sur toutes les entités sélectionnées (while (setq line (ssname sel n)) ; nom d'entité (ename) de chaque ligne (setq elst (entget line) ; liste des données DXF de la ligne pt1 (cdr (assoc 10 elst)) ; point de départ pt2 (cdr (assoc 11 elst)) ; pont de fin n (1+ n) ; incrémentation du compteur ) ;; test d'horizontalité de la ligne : ;; comparaison des coordonnées Y avec une tolérance (if (equal (cadr pt1) (cadr pt2) 1e-9) (setq l (+ l (distance pt1 pt2)) ; ajout de la longueur de la ligne cnt (1+ cnt) ; incrémentation du compteur ) ) ) ) ;; retour des résultats (alert (strcat "Nombre de lignes horizontales : " (itoa cnt) "\nLongueur totale : " (rtos l) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
kermitos Posté(e) le 27 juin 2008 Auteur Posté(e) le 27 juin 2008 Merci en réponse : je ne connais rien en lisp, ( niveau Zéro) cependant je suis trés intéréssé pour apprendre.Motivation: je dessine des facades (polyligne )je fais un réseau en x et ydonc a la fin de mon dessin, je doit compter les lignes verticales , horizontales ainsi que le nb de dalles déssinné ( format variable)Mon objectif:-Qtx lignes h et v selon un calque différent-réalisation de polyligne dans le quadrillage réalisé avec si possible un joint de x valeur par rapport aux lignes h et v.-Num des polylignes ( rectangle)( en partant de gauche a droite et de bas en haut)export vers Excel avec un un peu pratique en lisp je pense que cela doit e^tre réalisable. (avant de courrir il faut savoir marcher) Avant de savoir courir if faut savoir marcher
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