Aller au contenu

détail explicatif d\'1 lisp!!!


Messages recommandés

Posté(e)

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

Posté(e)

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...

Posté(e)

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

Posté(e)

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 y

donc 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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é