formula1 Posté(e) le 18 avril 2009 Posté(e) le 18 avril 2009 Bonjours à tous le monde.Voilà, je cherche à tracer une polyline en lisp.Comment dois-je faire? Ensuite, j'aimerai lui faire un offset d'une valeur que l'utilisateur choisira. Pourriez-vous m'aider SVP?
(gile) Posté(e) le 18 avril 2009 Posté(e) le 18 avril 2009 Salut, Pour créer une entité graphique en LISP, il y a 3 méthodes :- avec la fonction command qui appelle la commande native. Cette méthode requiert les points définis dans le SCU courant et est sensible aux accrochages aux objets.- avec la fonction entmake qui ajoute l'entité dans la base de données du dessin. Cette méthode requiert les arguments sous forme de "liste DXF".- avec les fonction vlisp vla-add* qui ajoutent les objets à l'espace spécifié (Model, Paper ou définition de bloc). Cette méthode requiert des argument sous forme de vla-objects et/ou de variants (qu'on peut parfois remplacer par des listes). Exemple pour une polyligne fermée dont les sommets sont contenus dans la liste suivante : (setq pt-lst '((10.0 20.0 0.0) (50.0 20.0 0.0) (10.0 50.0 0.0))) Avec command (command "_.pline") (foreach p pt-lst (command "_non" p)) (command "_close") Avec entmake (entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") (cons 90 (length pt-lst)) '(70 . 1) ; 1 pour fermée, 0 pour ouverte ) (mapcar '(lambda (p) (cons 10 p)) pt-lst) ) ) avec vla-addLightWeightPolyline (vla-put-Closed (vla-addLightWeightPolyline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object) ) ) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* 2 (length pt-lst)))) ) (apply 'append (mapcar '(lambda (p) (list (car p) (cadr p))) pt-lst) ) ) ) ) :vlax-true ) avec vlax-invoke (pour éviter de faire un variant) (vla-put-Closed (vlax-invoke (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object) ) ) 'addLightWeightPolyline (apply 'append (mapcar '(lambda (p) (list (car p) (cadr p))) pt-lst) ) ) :vlax-true ) Pour l'offset, soit utiliser (command "_.offset" ...) soit (vla-Offset ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
formula1 Posté(e) le 18 avril 2009 Auteur Posté(e) le 18 avril 2009 Merci gile, je vais potassé tous ça.
(gile) Posté(e) le 18 avril 2009 Posté(e) le 18 avril 2009 Si tu débutes, commence avec command, c'est plus simple. Il faut juste ne pas oublier de désactiver l'accrochage aux objets avec "_non" pour chaque point ou setvar avant le premier appel à command (dans ce cas il faudra restaurer la la valeur initiale à la fin de la routine). Les autres méthodes sont plus "propres" et d'exécution plus rapides (mais dès lors qu'il y a intervention de l'utilisateur, la différence de rapidité devient négligeable). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
formula1 Posté(e) le 19 avril 2009 Auteur Posté(e) le 19 avril 2009 Si je veus lui donner une épaisseur? Ce serais bien d'y ajouter une boite de dialogue pour l'épaisseur et pour l'offset. Mais le probleme, est que je n'y connai pas grand chose en fichier DCL
v.dausset Posté(e) le 27 novembre 2017 Posté(e) le 27 novembre 2017 Bonjour, ici on rentre les point en dur :(setq pt-lst '((10.0 20.0 0.0) (50.0 20.0 0.0) (10.0 50.0 0.0)))J'aimerai savoir si il est possible de les rentrer comme variable et de les importer d'Excel.Pour ouvrir Excel et récupérer valeur pas de souci, par contre je ne sais pas adapter le code ci-dessus.Il faut adapter le nombre de sommet (=au nbre de ligne du fichier Excel), et effectuer une boucle correspondant au nbre de ligne Excel. Désolé pour l'explication....Un exemple avec 2 sommets me conviendrait. En espérant avoir un retour. Cordialement,
(gile) Posté(e) le 29 novembre 2017 Posté(e) le 29 novembre 2017 Salut, Le plus simple avec un listing de points dans Excel est de créer un script AutoCAD en utilisant la fonction CONCATENER d'Excel. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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