Aller au contenu

Questions au lispeurs


Messages recommandés

Posté(e)

J'ai cru comprendre, après m'être promené sur ce site que le Lisp est grand et puissant.

Existe-t-il des possibilité de formation ?

En attendant, j'ai une proposition de développement:

J'ai un dessin contenant de nombreux blocs nommés par un attribut.

J'ai une polyligne. Les blocs sont disposés, aléatoirement, de par et d'autre de cette polyligne.

La manip "magique" que je cherche à faire, c'est de récupérer, dans Excel par exemple, pour chaque bloc la distance curviligne de sa projection perpendiculaire sur la polyligne (je sais si c'est très clair ça ? )

:exclam:

Voilà le genre de truc que je souhaiterai savoir faire (Houa ! le frimeur) est-compliqué, est-ce-que ça néssécite un longue expérience ?

Posté(e)

Salut,

 

Existe-t-il des possibilité de formation ?

 

Oui, plusieurs organismes de formation en proposent (fais une recheche sur le web).

Certains membres de CADxp sont formateurs AutoCAD et proposent aussi des formations AutoLISP, d'autres ont suivi ce type de formations et pourront peut-être t'en dire plus.

De mon côté, je suis entrain d'essayer de mettre en place une formation AutoLISP avec l'organisme qui m'emploie parfois, mais je peux d'ores et déjà intervenir en interne (CDD) dans des entreprises pour des formations et/ou dévellopements en LISP.

 

En ce qui concerne ta proposition de dévellopement, ce n'est pas très compliqué mais nécessite quand même une certaine expérience :

 

- récupérer de l'utilsateur le nom du bloc, le nom de l'étiquette de l'attribut identifiant chaque bloc, la polyligne et un nom de fichier Excel ;

- sélectionner tous le blocs de ce nom dans le dessin ;

- parcourrir le jeu de sélection pour récupérer la valeur de l'attribut, le point d'insertion ;

- calculer la distance du point d'insertion à la polyligne ;

- écrire le fichier Excel.

 

Si j'ai le temps dans la journée (et si un autre ne l'a pas fait avant) j'essayerais de poster quelque chose.

 

[Edité le 4/10/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Re,

 

Voilà un exemple de ce qu'on peut faire :

 

(defun c:dist-bloc-pline (/ acdoc bl pl tag str ins name file)

 (vl-load-com)

 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (= ""
 (setq bl
	(getstring
	  T
	  "\nEntrez le nom du bloc (ou Entrée pour le sélectionner à l'écran): "
	)
 )
     )
   (while
     (not
(and (setq
       bl (car (entsel "\nSélectionnez une référence du bloc: "))
     )
     (= "INSERT" (cdr (assoc 0 (entget bl))))
     (setq bl (cdr (assoc 2 (entget bl))))
)
     )
   )
 )
 (while
   (not
     (setq tag
     (strcase
       (getstring T
		  "\nEntrez l'étiquette de l'attribut identifiant: "
       )
     )
     )
   )
 )
 (while
   (not
     (and
(setq pl (car (entsel "\nSélectionnez la polyligne: ")))
(= "LWPOLYLINE" (cdr (assoc 0 (entget pl))))
     )
   )
 )
 (setq str "Bloc\tDistance\n")
 (if (ssget "_X" (list '(0 . "INSERT") (cons 2 bl)))
   (progn
     (vlax-for	b (vla-get-ActiveSelectionSet acdoc)
(if (= (vla-get-HasAttributes b) :vlax-true)
  (foreach a (vlax-invoke b 'getAttributes)
    (if	(= (strcase tag) (vla-get-TagString a))
      (setq name (vla-get-TextString a))
    )
  )
)
(setq ins (vlax-get b 'InsertionPoint)
      str (strcat
	    str
	    name
	    "\t"
	    (rtos
	      (distance ins (vlax-curve-getClosestPointTo pl ins))
	    )
	    "\n"
	  )
)
     )
     (textscr)
     (terpri)
     (princ str)
     (initget "Oui Non")
     (if (= (getkword
       "\nEnregistrer dans un fichier ? [Oui/Non] : "
     )
     "Oui"
  )
(and
  (setq	file (getfiled "Créez ou sélectionnez un fichier"
		       ""
		       "xls"
		       1
	     )
  )
  (setq file (open file "w"))
  (princ str file)
  (close file)
)
     )
     (graphscr)
   )
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Je suis impressionné par ta rapidité , (gile) et aussi par les "vla..machin" auxquels je n'entend rien, et qui permettent de faire des trucs " pas possible". Dommage que je ne sois pas au goût

du jour.

Posté(e)

Merci (Gile) , impressionnant, et rassurant, il semble que cela ne soit pas si long à faire après tout.

Maintant, c'est bien joli, mais étant béotien en la matière que puis je faire avec ces lignes cabalistiques, les copier tel quel dans un fichier texte, ou bien ? :o

Excuse par avance mes retards à l'allumage, mais il se trouve que j'ai été livré d'un charette :(

Posté(e)
Je suis impressionné par ta rapidité

il semble que cela ne soit pas si long à faire après tout

Je commence à disposer d'un petite collections d'expressions dans diverse routines qu'il me suffit parfois de "réassembler" pour en construire une nouvelle.

 

Maintant, c'est bien joli, mais étant béotien en la matière que puis je faire avec ces lignes cabalistiques, les copier tel quel dans un fichier texte, ou bien ?

Tu trouveras une explication détaillée ici.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Re-bonjour.

J'ai testé to lisp (Gile), il fonctionne très bien et de plus c'est instinctif et souple.

Mais, comme je le craignais dans mon premier post, je n'est pas été clair.

Il ne s'agit pas de récupérer la distance qui sépare le bloc de la polyligne (encore que l'info est intéressante, à conserver) mais de mesurer sur le polyligne la distance qui va du début de celle-ci jusqu'à l'intersection avec la projection perpandiculaire du bloc.

En fait, imagine un éolienne se trouvant sur le bord d'une Autoroute. Ce que l'on cherche ici c'est de savoir à combien de Kilomètre se trouve cette éolienne depuis le début de la route.

:D

C'est toujours plus facil avec un exemple.

Bon Week, et allez les Petits !!

Posté(e)

Qu'à cela ne tienne !

 

J'ai laissé la distance du blo à la poly dan la troisième colonne.

Si tu veux changer le titre des colonnes dans le LISP, c'est la ligne :

 

(setq str "Bloc\tDistance1\tDistance2\n")

 

Tu peux remplacer Bloc, Distance1 et Distance2 mais en laissant bien les tabulations : \t et saut de ligne : \n

 

(defun c:dist-bloc-pline (/ acdoc bl pl tag str ins perp name file)

 (vl-load-com)

 (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (if (= ""
 (setq bl
	(getstring
	  T
	  "\nEntrez le nom du bloc (ou Entrée pour le sélectionner à l'écran): "
	)
 )
     )
   (while
     (not
(and (setq
       bl (car (entsel "\nSélectionnez une référence du bloc: "))
     )
     (= "INSERT" (cdr (assoc 0 (entget bl))))
     (setq bl (cdr (assoc 2 (entget bl))))
)
     )
   )
 )
 (while
   (not
     (setq tag
     (strcase
       (getstring T
		  "\nEntrez l'étiquette de l'attribut identifiant: "
       )
     )
     )
   )
 )
 (while
   (not
     (and
(setq pl (car (entsel "\nSélectionnez la polyligne: ")))
(= "LWPOLYLINE" (cdr (assoc 0 (entget pl))))
     )
   )
 )
 (setq str "Bloc\tDistance1\tDistance2\n") ; à modifier à ta guise
 (if (ssget "_X" (list '(0 . "INSERT") (cons 2 bl)))
   (progn
     (vlax-for	b (vla-get-ActiveSelectionSet acdoc)
(if (= (vla-get-HasAttributes b) :vlax-true)
  (foreach a (vlax-invoke b 'getAttributes)
    (if	(= (strcase tag) (vla-get-TagString a))
      (setq name (vla-get-TextString a))
    )
  )
)
(setq ins (vlax-get b 'InsertionPoint)
      perp (vlax-curve-getClosestPointTo pl ins)
      str (strcat
	    str
	    name
	    "\t"
	    (rtos (vlax-curve-getDistAtPoint pl perp))
	    "\t"
	    (rtos (distance ins perp))
	    "\n"
	  )
)
     )
     (textscr)
     (terpri)
     (princ str)
     (initget "Oui Non")
     (if (= (getkword
       "\nEnregistrer dans un fichier ? [Oui/Non] : "
     )
     "Oui"
  )
(and
  (setq	file (getfiled "Créez ou sélectionnez un fichier"
		       ""
		       "xls"
		       1
	     )
  )
  (setq file (open file "w"))
  (princ str file)
  (close file)
)
     )
     (graphscr)
   )
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é