schpount Posté(e) le 31 octobre 2006 Partager Posté(e) le 31 octobre 2006 Bonjour à tous,Je souhaite ajouter de façon automatique une flèche à l'extrémité de polylignes. Ces polylignes symbolisent des flèches de rattachement de parcelles que l'on peut trouver sur le cadastre, j'en ai + de 65 000. Z'auriez une idée pour me dépanner ?Créer un nouveau style de ligne ?Merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 31 octobre 2006 Partager Posté(e) le 31 octobre 2006 Une routine que j'ai proposé sur un forum US. Il te faudra faire au préalable un bloc qui représentera la flèche aux extrémités de la polyligne. (defun c:blk2end ( / obj dxf_obj obj_vlax pt1_start pt2_start par pt1_end pt2_end dxf_210) (defun z_dir (p1 p2 / ) (trans '(0.0 1.0 0.0) (mapcar '(lambda (k) (/ k (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- p2 p1) ) ) ) ) ) (mapcar '- p2 p1) ) 0 ) ) (while (not (setq obj (entsel "\nSelect a polyline: ")))) (cond ((or (eq (cdr (assoc 0 (setq dxf_obj (entget (car obj))))) "LWPOLYLINE") (and (eq (cdr (assoc 0 dxf_obj)) "POLYLINE") (zerop (boole 1 112 (cdr (assoc 70 dxf_obj)))) ) ) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (car obj)) pt1_start (vlax-curve-getStartPoint obj_vlax) pt1_end (vlax-curve-getEndPoint obj_vlax) par (vlax-curve-getParamAtPoint obj_vlax pt1_end) ) (cond ((not (zerop par)) (setq pt2_start (vlax-curve-getPointAtParam obj_vlax 1) pt2_end (vlax-curve-getPointAtParam obj_vlax (1- par)) ) (while (not (tblsearch "BLOCK" (setq name_blk (getstring "\nName of block: " T)))) (princ "\n ** incorrect name block! **") ) (foreach n (list (list pt1_start pt2_start) (list pt1_end pt2_end)) (setq dxf_210 (z_dir (car n) (cadr n))) (entmake (list (cons 0 "INSERT") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (cons 8 (getvar "CLAYER")) (cons 100 "AcDbBlockReference") (cons 2 name_blk) (cons 10 (trans (car n) 0 dxf_210)) (cons 50 (angle (trans (car n) 0 dxf_210) (trans (cadr n) 0 dxf_210))) (cons 210 dxf_210) ) ) ) ) ) ) (T (princ "\nIsn't 2Dpolyline avalaible for this function!") ) ) (prin1) ) 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...
schpount Posté(e) le 31 octobre 2006 Auteur Partager Posté(e) le 31 octobre 2006 Bonjour,Impressionnant, merci beaucoup pour la réponse.Malheureusement, je me suis trompé de forum, je ne possède que la version 2006 lightJe ne pense pas que je pourrai executer le sciptSi ce n'est pas trop abuser est-ce qu'une ame charitable pourrait me faire le traitement ? [Edité le 21/8/2007 par schpount] Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 1 novembre 2006 Partager Posté(e) le 1 novembre 2006 ICI J'ai mis en rouge les entités non traitées (lignes), seule les polyignes ont été modifiées pour recontruire les flèches identique à un rappel de cotation.Le bloc utilisé s'appelle "BLK2END". NB: J'ai modifié un peu la routine pour ton dessin (bloc à une seule extrémité et traitement sur l'ensemble des polyligne au lieu d'une séléction 1 par 1) Y reste plus qu'a convaincre ton "Boss" pour une version pleine. Car ce genre de traitement est aisée avec un peu de programmation. 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...
schpount Posté(e) le 6 novembre 2006 Auteur Partager Posté(e) le 6 novembre 2006 Bonjour,Je reviens de congé et que vois-je ?C'est magnifique, un GRAND MERCI !!As-tu la version définitive du script pour ma futur aquisition d'Autocad 2006 ?;-) Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 6 novembre 2006 Partager Posté(e) le 6 novembre 2006 Le voici modifié, il fonctionne avec un bloc prédéfini à l'avance et qui se nomme BLK2END. (defun c:blk2end ( / js n name_blk obj dxf_obj obj_vlax pt1_start pt2_start par pt1_end pt2_end dxf_210) (defun z_dir (p1 p2 / ) (trans '(0.0 1.0 0.0) (mapcar '(lambda (k) (/ k (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- p2 p1) ) ) ) ) ) (mapcar '- p2 p1) ) 0 ) ) (setq js (ssget "_x" '((0 . "LWPOLYLINE"))) n -1 name_blk "blk2end") (repeat (sslength js) (setq obj (ssname js (setq n (1+ n)))) (cond ((or (eq (cdr (assoc 0 (setq dxf_obj (entget obj)))) "LWPOLYLINE") (and (eq (cdr (assoc 0 dxf_obj)) "POLYLINE") (zerop (boole 1 112 (cdr (assoc 70 dxf_obj)))) ) ) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object obj) pt1_start (vlax-curve-getStartPoint obj_vlax) pt1_end (vlax-curve-getEndPoint obj_vlax) par (vlax-curve-getParamAtPoint obj_vlax pt1_end) ) (cond ((not (zerop par)) (setq pt2_start (vlax-curve-getPointAtParam obj_vlax 1) pt2_end (vlax-curve-getPointAtParam obj_vlax (1- par)) ) (foreach n (list (list pt1_start pt2_start) ) (setq dxf_210 (z_dir (car n) (cadr n))) (entmake (list (cons 0 "INSERT") (cons 100 "AcDbEntity") (assoc 67 dxf_obj) (assoc 410 dxf_obj) (cons 8 (getvar "CLAYER")) (cons 100 "AcDbBlockReference") (cons 2 name_blk) (cons 10 (trans (car n) 0 dxf_210)) (cons 50 (angle (trans (car n) 0 dxf_210) (trans (cadr n) 0 dxf_210))) (cons 210 dxf_210) ) ) ) ) ) ) (T (princ "\nIsn't 2Dpolyline avalaible for this function!") ) ) ) (prin1) ) 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...
schpount Posté(e) le 21 août 2007 Auteur Partager Posté(e) le 21 août 2007 Bonjour,Cette année encore j'aurais besoin d'utiliser le script ci-dessus, nous venons d'acquérir Autocad 2007 mais malheureusement, je n'arrive pas à le faire fonctionner, je créé pourtant bien le "blk2end".Puis ensuite sous Outils/charger le script lisp... Si ce n'est pas trop abuser, est-il possible d'avoir la procédure détaillée sous Autocad 2007 :- comment lancer le script lisp - faut-il appeler le block avant - à quel moment faut-il charger mes polylignes- ... Merci P.S: Mon fichier de polyligne est à télécharger ici : (777 ko)http://www.laille-petanque.fr/index.php?option=com_remository&Itemid=100&func=download&id=5&chk=4e54fa978d189caaed89e9fc63bf354f Lien vers le commentaire Partager sur d’autres sites More sharing options...
BIM G CO Posté(e) le 21 août 2007 Partager Posté(e) le 21 août 2007 Après avoir Ouvert ton fichier avec tes polylignes, Ouvrir/charger le lisp blk2endsi le lisp est bien charger tu verra apparaitre sur la ligne de commande C:BLK2END(touche F2)Tu pourras donc taper au clavier blk2end dans la ligne de commande AutoCAD pour lancer le lisp. Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 22 août 2007 Partager Posté(e) le 22 août 2007 je créé pourtant bien le "blk2end". Oui, mais si celui-ci est créer en externe (fichier DWG), il faut qu'il soit dans le même dossier, ou dans un dossier de recherche, pour qu'Autocad puisse le trouver. Tu peux aussi rajouter ces lignes (avant (defun z_dir (p1 p2 / ) )avec ceci, si le bloc n'existe pas, il sera créé en interne et constituera le bloc par défaut (tu n'auras pas le choix de la forme de représentation)Donc si tu veux une forme précise, il te faut définir (de préférence en interne) ton bloc BLK2END AVANT d'utiliser la routine. (if (not (tblsearch "BLOCK" "BLK2END")) (foreach n '( ( (0 . "BLOCK") (8 . "0") (2 . "BLK2END") (70 . 0) (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (10 0.0 0.0 0.0) ) ( (0 . "LWPOLYLINE") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) (100 . "AcDbPolyline") (90 . 2) (70 . 0) (38 . 0.0) (39 . 0.0) (10 0.0 0.0) (40 . 0.0) (41 . 1.5) (42 . 0.0) (10 2.5 0.0) (40 . 1.5) (41 . 1.5) (42 . 0.0) (210 0.0 0.0 1.0) ) ( (0 . "ENDBLK") (8 . "0") (62 . 0) (6 . "ByBlock") (370 . -2) ) ) (entmake 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...
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