HTV Posté(e) le 28 juin 2012 Posté(e) le 28 juin 2012 Bonjour à tous, Je suis un nouveau venu sur le forum.J'ai fait quelques recherches mais je n'ai rien trouvé de concluant concernant mon besoin. Mon problème est le suivant : j'ai plusieurs polylignes fermées et je veux obtenir le contour de l'ensemble des polyligne comme on pourrait le faire avec la commande Union pour des solide.Plus largement, il s'agit de faire des opérations booléennes avec des polylignes fermées. Je vous remercie par avance Pierre
jalna Posté(e) le 28 juin 2012 Posté(e) le 28 juin 2012 Salut et bienvenu!Il faut que tu passe tes polylignes en régions et la tu pourras faire des opérations booléennes "Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."J-C Van DammeMon forum : http://plexus.forumactif.org/
Dinosor Posté(e) le 28 juin 2012 Posté(e) le 28 juin 2012 Hello et bienvenue, Avec la commande _REGION tu devrais obtenir ce que tu veux, à condition d'avoir des polylignes fermées. Oups, doublé par Jalna... ;) Seuls nous allons vite, ensemble nous allons plus loin... CPU Intel 3,5Go / Nvidia RTX-3090 AutoCad (Architecture) 2022 - Lumion PRO BMW R-1200-RT, c'est moche, oui... je sais... www.neda.ch
lecrabe Posté(e) le 28 juin 2012 Posté(e) le 28 juin 2012 Hello 1) Transformer les polylignes en regions2) Faire une Union3) Decomposer et bricoler un peu ... Ou sinon utiliser la routine FUSION de Gilles ... Merci Gilles, lecrabe ;;; FUSION - GC - 01/01/06 - Version 1.00 ;;; Cree une polyligne sur le contour de chaque groupe de polylignes fermees et contigues selectionnees ;;; Mise a jour par GC : 19/04/2011 (fonctionnement 3d) - Version 1.10 (defun c:fusion (/ *error* ss lst erase cnt) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-activeDocument *acad*))) (defun *error* (msg) (and msg (or (= msg "Fonction annulee") (= msg "quitter / sortir abandon") ) (princ (strcat "\nErreur: " msg)) ) (vla-endundomark *acdoc*) (princ) ) (prompt "\nSelectionnez les polylignes a fusionner : ") (if (ssget '((0 . "LWPOLYLINE") (-4 . "&") (70 . 1))) (progn (initget "Oui Non") (setq erase (getkword "\nEffacer les polylignes source ? [Oui/Non] <Oui> : ")) (vlax-for obj (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq lst (cons obj lst)) ) (vla-Delete ss) (vla-StartUndoMark *acdoc*) (setq cnt (gc:MergePlines lst (/= erase "Non"))) (vla-EndUndoMark *acdoc*) (princ (strcat "\n" (itoa cnt) (if (< 1 cnt) " polylignes creees." " polyligne creee." ) ) ) ) ) (*error* nil) ) ;;;***************************************************************;;; ;; MergePlines ;; Unit les polylignes coplanaires et contigues, retourne le nombre de polylignes creees. ;; ;; Arguments ;; lst : liste des polylignes a traiter ;; erase : si non nil, les polylignes source sont effacees (defun gc:MergePlines (lst erase / arcbulge space tmp source reg elev norm expl objs regs olst blst dlst plst tlst blg pline cnt) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-activeDocument *acad*))) (defun arcbulge (arc) (/ (sin (/ (vla-get-TotalAngle arc) 4)) (cos (/ (vla-get-TotalAngle arc) 4)) ) ) (setq space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace *acdoc*) (vla-get-Modelspace *acdoc*) ) cnt 0 ) (while lst (setq tmp nil) (setq source (car lst) elev (vla-get-Elevation source) norm (vlax-get source 'Normal) ) (foreach p lst (if (and (equal elev (vla-get-Elevation p) 1e-12) (equal norm (vlax-get p 'Normal) 1e-2) ) (setq tmp (cons p tmp) lst (vl-remove p lst) ) ) ) (if (and (< 1 (length tmp)) (setq reg (vlax-invoke space 'addRegion tmp)) ) (progn (if erase (mapcar 'vla-Delete tmp) ) (while (cadr reg) (vla-boolean (car reg) acUnion (cadr reg)) (setq reg (cons (car reg) (cddr reg))) ) (setq reg (car reg) expl (vlax-invoke reg 'Explode) ) (vla-delete reg) (while expl (setq objs (vl-remove-if-not '(lambda (x) (or (= (vla-get-ObjectName x) "AcDbLine") (= (vla-get-ObjectName x) "AcDbArc") ) ) expl ) regs (vl-remove-if-not '(lambda (x) (= (vla-get-ObjectName x) "AcDbRegion")) expl ) ) (if objs (progn (setq olst (mapcar '(lambda (x) (list x (vlax-get x 'StartPoint) (vlax-get x 'EndPoint) ) ) objs ) ) (while olst (setq blst nil) (if (= (vla-get-ObjectName (caar olst)) "AcDbArc") (setq blst (list (cons 0 (arcbulge (caar olst))))) ) (setq plst (cdar olst) dlst (list (caar olst)) olst (cdr olst) ) (while (setq tlst (vl-member-if '(lambda (x) (or (equal (last plst) (cadr x) 1e-9) (equal (last plst) (caddr x) 1e-9) ) ) olst ) ) (if (equal (last plst) (caddar tlst) 1e-9) (setq blg -1) (setq blg 1) ) (if (= (vla-get-ObjectName (caar tlst)) "AcDbArc") (setq blst (cons (cons (1- (length plst)) (* blg (arcbulge (caar tlst))) ) blst ) ) ) (setq plst (append plst (if (minusp blg) (list (cadar tlst)) (list (caddar tlst)) ) ) dlst (cons (caar tlst) dlst) olst (vl-remove (car tlst) olst) ) ) (setq pline (vlax-invoke Space 'addLightWeightPolyline (apply 'append (mapcar '(lambda (x) (setq x (trans x 0 Norm)) (list (car x) (cadr x)) ) (reverse (cdr (reverse plst))) ) ) ) ) (vla-put-Closed pline :vlax-true) (mapcar '(lambda (x) (vla-setBulge pline (car x) (cdr x))) blst ) (vla-put-Elevation pline elev) (vla-put-Normal pline (vlax-3d-point norm)) (mapcar 'vla-delete dlst) (setq cnt (1+ cnt)) ) ) ) (if regs (progn (setq expl (append (vlax-invoke (car regs) 'Explode) (cdr regs) ) ) (vla-delete (car regs)) ) (setq expl nil) ) ) ) ) ) cnt ) (defun c:upl() (c:fusion)) Autodesk Expert Elite Team
HTV Posté(e) le 28 juin 2012 Auteur Posté(e) le 28 juin 2012 Je vous remercie beaucoup pour ces réponses.Je connaissais la possibilité de transformer en région mais je voulais pouvoir le faire directement avec les polyligne.Donc merci à lecrabe pour la routine lisp de Gilles.Cela fonctionne très bien. Encore merci
Julian-Nihon Posté(e) le 28 juin 2012 Posté(e) le 28 juin 2012 Bonjour, J'ai peut-être mal compris, mais la commande que tu cherches, ne serait-ce pas BOUNDARY/CONTOUR, tout simplement ? :huh: Regarde ICI :mellow: ジュリ
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