MAC Posté(e) le 2 février 2005 Partager Posté(e) le 2 février 2005 Hello! bonjour à tous et merci pour les précieux conseils que l'on peut glaner sur ce forum.Voilà ma question:Existe t'il un moyen d'inserer un bloc automatiquement sur chaque sommet d'une polyligne.la commande diviser et mesurer n'offre pas cette option. Lien vers le commentaire Partager sur d’autres sites More sharing options...
rebcao Posté(e) le 3 février 2005 Partager Posté(e) le 3 février 2005 Bonjour Mac, bienvenu sur CADxp, la réponse : un programme LISP. Ne t'inquiètes pas tu fera très vite connaissance avec les experts de CADxp dans ce domaine qui ne vont pas tarder à te répondre, mais vu l'heure... il sont encore chez le marchand de sable. Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 3 février 2005 Partager Posté(e) le 3 février 2005 Un petit truc vite fait, à adapter selon ses besoins (defun c:blp(/ n nom) (if (setq nom (getstring "\nNom du bloc : ")) (if (tblsearch "block" nom) (progn (princ "\nSélection de la polyligne") (foreach n (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget (car (entsel))))) (entmake (list (cons 0 "INSERT") (cons 2 nom) (cons 10 n) (cons 41 1) ; facteur echelle X = 1 (cons 42 1) ; facteur echelle Y = 1 (cons 43 1) ; facteur echelle Z = 1 (cons 50 0) ; angle de rotation = 0 )) ) ) (princ (strcat "\nBloc " nom " inconnu")) ) ) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824 Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 3 février 2005 Partager Posté(e) le 3 février 2005 Patrick m'a devancé, j'allais dire de voir:http://www.cadxp.com/sujetXForum-106.htm et de faire ces 3 lignes:(setq nam_blk (getstring T "\nNom du bloc a insérer: "))(setq l_som (GETVERTICES (car (entsel "\nChoisir la polyligne: "))))(foreach n l_som (command "_.-insert" nam_blk n "" "" "")) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
MAC Posté(e) le 3 février 2005 Auteur Partager Posté(e) le 3 février 2005 :D Merci les gars! z'etes vraiment sympa de répondre aussi vite.j'ai testé c'est de la ball!.ça change des petites macros que j'élabore avec peine dans mon petit laboratoire secret.merci encore! Lien vers le commentaire Partager sur d’autres sites More sharing options...
amachecou Posté(e) le 18 novembre 2015 Partager Posté(e) le 18 novembre 2015 Bonjour, En effet merci pour ce LISP bien efficace. Est-il facilement faisable de rajouter dans le code, à la place de l'angle de rotation "0" du bloc, la rotation équivalente à la bissectrice des segments reliant le sommet. Pour le premier et dernier bloc on aurait la parallèle au seul segment reliant le sommet. Egalement avec ce LISP, si le bloc comporte des attributs, ils bug. De même avec les fonctions Diviser/Mesurer, ce doit être un bug AutoCAD. Mais peut-on le corriger avec le LISP ? Antoine. Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 19 novembre 2015 Partager Posté(e) le 19 novembre 2015 Bonjour, Pour l'angle de rotation du bloc, en repartant du code de Patrick_35, on pourrait essayé ceci: (defun c:blp ( / n nom nb ent vlaobj lst) (if (setq nom (getstring "\nNom du bloc : ")) (if (tblsearch "block" nom) (progn (princ "\nSélection de la polyligne") (setq nb 0 ent (car (entsel)) vlaobj (vlax-ename->vla-object ent)) (foreach n (setq lst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent)))) (entmake (list (cons 0 "INSERT") (cons 2 nom) (cons 10 n) (cons 41 1) ; facteur echelle X = 1 (cons 42 1) ; facteur echelle Y = 1 (cons 43 1) ; facteur echelle Z = 1 (cons 50 (if (and (not (zerop nb)) (not (eq (1+ nb) (length lst)))) (+ (* pi 0.5) (* 0.5 (+ (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj (1- nb))) (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj nb)) ))) (- (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv vlaobj nb)) (* pi 0.5)) ) ) )) (setq nb (1+ nb )) ) ) (princ (strcat "\nBloc " nom " inconnu")) ) ) (princ) ) Pour les attributs cela devient plus compliqué à gérer si le nom du bloc est libre. (il faut savoir le nombre d'attributs à renseigner pou celui-ci) ICI, il y a un exemple de code pour un bloc bien précis (determiné dans le lisp), qui renseigne les attributs. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
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