johanjohan33 Posté(e) le 31 mars 2009 Posté(e) le 31 mars 2009 Bonjour je me permets de recopier le message que j'ai posté sur le forum Débuter en lipssachant que j'ai aussi Covadis et Autocad voila je n'y connais absolument rien en lips, mais j'aimerai savoir si ces scripts sont réalisables.. et si oui pourait on m'aider pour les réaliser? donc j'ai dans mon fichier des miliers de polylignes 3D que j'aimerai transformer en solide(ce sont en fait des éléments récupérés sur une base SIG) j'ai donc des polylignes 3D non fermées avec des points en Z différents (pour la polyligne A les points Z sont tous différents, pareil pour la polyligne B, C...) j'aimerai dans un premier temps pouvoir remettre tous les points Z au point le plus haut de la polyligne A, faire la meme chose pour la polyligne B, et faire la meme chose pour la polyligne C...) et dans un 2eme temps pouvoir extruder en négatif (donc vers le bas) toutes ces polylignes en solide avec comme référence leurs points Z respectifs j'espere n'avoir pas été trop confus merci beaucoup Johan
didier Posté(e) le 31 mars 2009 Posté(e) le 31 mars 2009 Coucou deuxième message et déjà gourmand ! bienvenue à toi, tout de même c'est parfaitement possible mais il va falloir passer pas du LispCovadis ne te sera d'aucune aide. on commence où ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
johanjohan33 Posté(e) le 31 mars 2009 Auteur Posté(e) le 31 mars 2009 coucou je me doutais qu'il fallait passer par du Lips donc si cela est possible, on peut commencer par remettre tous les points Z au point le plus haut de la polyligne A, faire la meme chose pour la polyligne B, et faire la meme chose pour la polyligne C...) sachant que ce sont des polylignes 3D non fermées avec des points en Z différents (pour la polyligne A les points Z sont tous différents, pareil pour la polyligne B, C...) merci Johan désolé pour ma gourmandise, mais c'est d'utilité public (je bosse dans l'administration et personne ne s'y connait en lips) [Edité le 31/3/2009 par johanjohan33]
(gile) Posté(e) le 1 avril 2009 Posté(e) le 1 avril 2009 Salut, Pour "aplatir" des polylignes 3d à la plus haute altitude.Après, je me demande bien comment tu compte faire pour générer un solide à partir d'objets ouverts ? ;;; ProjectToMaxAlt ;;; Aplatit une polyligne 3d sur la plus haute altitude (defun FlattenToMaxAlt (3dpoly / pts alt) (setq pts (3d-coord->pt-lst (vlax-get 3dPoly 'Coordinates)) alt (apply 'max (mapcar 'caddr pts)) pts (mapcar '(lambda (p) (list (car p) (cadr p) alt)) pts) ) (vlax-put 3dPoly 'Coordinates (apply 'append pts)) ) ;;; 3d-coord->pt-lst ;;; Convertit une liste de coordonnées 3D en liste de points (defun 3d-coord->pt-lst (lst) (if lst (cons (list (car lst) (cadr lst) (caddr lst)) (3d-coord->pt-lst (cdddr lst)) ) ) ) ;;; FTMA Commande (defun c:FTMA (/ *error* doc ss del) (vl-load-com) (defun *error* (msg) (and (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (and ss (vla-delete ss)) (vla-EndUndoMark doc) (princ) ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))) (progn (vla-StartUndoMark doc) (initget "Oui Non") (if (= (getkword "\nSupprimer les objets source ? [Oui/Non] : ") "Oui" ) (setq del T) ) (vlax-for p (setq ss (vla-get-ActiveSelectionSet doc)) (vl-catch-all-apply 'FlattenToMaxAlt (list (if del p (vla-copy p) ) ) ) ) (vla-delete ss) (vla-EndUndoMark doc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
johanjohan33 Posté(e) le 1 avril 2009 Auteur Posté(e) le 1 avril 2009 salut, merci beaucoup je vais essayer le script, quand j'aurai réussi à l'exécuter(j'arrive à le charger mais pas à l'éxécuterje vais trouver, ça doit pas etre trop compliqué :cool: ça au moins.. ) pour de ce qui est de la polyligne fermée, je vais essayer en passant par la méthode duren les forçant à se fermer en les sélectionnant tous, et a priori cela devrai marcherensuite utilser un script pour tous les extruder à partir de leur points Z respectifs j'ai vu qu'il y avait ici des scripts pouvant le faire, je vais essayer de voir si j'arrive à en faire marcher un :D je te tiens au courant pour la suite encore merciJohan [Edité le 1/4/2009 par johanjohan33]
(gile) Posté(e) le 1 avril 2009 Posté(e) le 1 avril 2009 Re, Le code ci-dessus est un LISP, tu trouveras des instructions pour le chargement et le lancement ici.Le nom de la commande est FTMA Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
johanjohan33 Posté(e) le 1 avril 2009 Auteur Posté(e) le 1 avril 2009 salut ayé avec la commande FTMA ça marche nikel chromefantastique!et en sélectionnant les polylignes non fermées en les fermant dans le panneau propriété on peut les extruder me manque plus le script pour les extruder en négatif à partir de leur point Z respectif encore mercitu vas faire des heureux, c'est sur! Johan
(gile) Posté(e) le 1 avril 2009 Posté(e) le 1 avril 2009 Re, Tu peux essayer celui-là, il devrait fonctionner tant que la polyligne plane générée n'a pas d'auto-intersection. (defun 3d-coord->pt-lst (lst) (if lst (cons (list (car lst) (cadr lst) (caddr lst)) (3d-coord->pt-lst (cdddr lst)) ) ) ) ;;; TOTO Commande (defun c:toto (/ *error* doc ss pts alt) (vl-load-com) (defun *error* (msg) (and (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (and ss (vla-delete ss)) (vla-EndUndoMark doc) (princ) ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))) (progn (vla-StartUndoMark doc) (setq mspace (vla-get-ModelSpace doc)) (vlax-for p (setq ss (vla-get-ActiveSelectionSet doc)) (setq pts (3d-coord->pt-lst (vlax-get p 'Coordinates)) alt (apply 'max (mapcar 'caddr pts)) pts (mapcar '(lambda (p) (list (car p) (cadr p))) pts) pl (vlax-invoke mspace 'addLightWeightPolyline (apply 'append pts) ) ) (vla-put-elevation pl alt) (vla-put-Closed pl :vlax-true) (vl-catch-all-apply '(lambda () (setq reg (vlax-invoke mspace 'addRegion (list pl)) sol (vla-addExtrudedSolid mspace (car reg) (- alt) 0.0) ) (vla-delete (car reg)) ) ) (vla-delete pl) ) (vla-delete ss) (vla-EndUndoMark doc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
johanjohan33 Posté(e) le 2 avril 2009 Auteur Posté(e) le 2 avril 2009 yes! ça marche nikelexactement ce que j'avais besoinil est vrai que j'avais quelques polylignes où il y avait une auto-intersection et l'extrusion ne marche pas merci beaucoup beaucoup johan
lecrabe Posté(e) le 2 avril 2009 Posté(e) le 2 avril 2009 Hello Gilles Super cette routine pour projeter des polylignes 3D à l'Altitude Z MAX ! :) Mais SVP j'aimerais bien avoir le choix : Altitude MAX ou MIN ! Idem pour l'Extrusion ...Quoique !? Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 2 avril 2009 Posté(e) le 2 avril 2009 Salut, Choix de l'altitude : maXimum, miNimum ou moYenne.Extrusion Oui, NonSuppression de la polyligne plane si DELOBJ > 0 (defun c:toto (/ *error* doc opt ss pts alt) (vl-load-com) (defun *error* (msg) (and (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (and ss (vla-delete ss)) (vla-EndUndoMark doc) (princ) ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))) (progn (vla-StartUndoMark doc) (initget "maXimum miNimum moYenne") (or (setq opt (getkword "\Altitude de la polyligne plane [maXimum/miNimum/moYenne] : " ) ) (setq opt "moYenne") ) (initget "Oui Non") (or (setq ext (getkword "\nExtruder les polylignes ? [Oui/Non] : ") ) (setq ext "Oui") ) (setq mspace (vla-get-ModelSpace doc)) (vlax-for p (setq ss (vla-get-ActiveSelectionSet doc)) (setq pts (3d-coord->pt-lst (vlax-get p 'Coordinates)) alt (cond ((= opt "maXimum") (apply 'max (mapcar 'caddr pts)) ) ((= opt "miNimum") (apply 'min (mapcar 'caddr pts)) ) (T (/ (apply '+ (mapcar 'caddr pts)) (length pts))) ) pts (mapcar '(lambda (p) (list (car p) (cadr p))) pts) pl (vlax-invoke mspace 'addLightWeightPolyline (apply 'append pts) ) ) (vla-put-elevation pl alt) (vla-put-Closed pl (vla-get-Closed p)) (if (= ext "Oui") (progn (vla-put-Closed pl :vlax-true) (vl-catch-all-apply '(lambda () (setq reg (vlax-invoke mspace 'addRegion (list pl)) sol (vla-addExtrudedSolid mspace (car reg) (- alt) 0.0 ) ) (vla-delete (car reg)) ) ) (or (zerop (getvar "DELOBJ")) (vla-delete pl)) ) ) ) (vla-delete ss) (vla-EndUndoMark doc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
johanjohan33 Posté(e) le 3 avril 2009 Auteur Posté(e) le 3 avril 2009 héllo Gilles y aurait il un moyen de faire le meme dernier script mais en supprimant (ou en le demandant) les polylignes d'origines avec le choix du max min et moyenne des points Z (cela peut etre pratique c'est vrai), et en demandant ensuite l'extrusion ? merci beaucoup Johan
(gile) Posté(e) le 5 avril 2009 Posté(e) le 5 avril 2009 (defun c:toto (/ *error* doc opt ext del mspace ss pts alt pl) (vl-load-com) (defun *error* (msg) (and (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (and ss (vla-delete ss)) (vla-EndUndoMark doc) (princ) ) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (if (ssget '((0 . "POLYLINE") (-4 . "&") (70 . 8))) (progn (vla-StartUndoMark doc) (initget "maXimum miNimum moYenne") (or (setq opt (getkword "\Altitude de la polyligne plane [maXimum/miNimum/moYenne] : " ) ) (setq opt "moYenne") ) (initget "Oui Non") (or (setq ext (getkword "\nExtruder les polylignes ? [Oui/Non] : ") ) (setq ext "Oui") ) (initget "Oui Non") (or (setq del (getkword "\nSupprimer la polyligne 3d source ? [Oui/Non] : ") ) (setq del "Non") ) (setq mspace (vla-get-ModelSpace doc)) (vlax-for p (setq ss (vla-get-ActiveSelectionSet doc)) (setq pts (3d-coord->pt-lst (vlax-get p 'Coordinates)) alt (cond ((= opt "maXimum") (apply 'max (mapcar 'caddr pts)) ) ((= opt "miNimum") (apply 'min (mapcar 'caddr pts)) ) (T (/ (apply '+ (mapcar 'caddr pts)) (length pts))) ) pts (mapcar '(lambda (p) (list (car p) (cadr p))) pts) pl (vlax-invoke mspace 'addLightWeightPolyline (apply 'append pts) ) ) (vla-put-elevation pl alt) (vla-put-Closed pl (vla-get-Closed p)) (if (= ext "Oui") (progn (vla-put-Closed pl :vlax-true) (vl-catch-all-apply '(lambda () (setq reg (vlax-invoke mspace 'addRegion (list pl)) sol (vla-addExtrudedSolid mspace (car reg) (- alt) 0.0 ) ) (vla-delete (car reg)) ) ) (or (zerop (getvar "DELOBJ")) (vla-delete pl)) ) ) (if (= del "Oui") (vla-delete p) ) ) (vla-delete ss) (vla-EndUndoMark doc) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 6 avril 2009 Posté(e) le 6 avril 2009 Hello Gilles Je ne vois pas la différence REELLE entre les 2 derniers TOTOs ! Est ce simplement pour éviter de jouer avec DELOBJ = 0 ou = 1 ? Merci d'avance, sinon ca marche bien ! Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 6 avril 2009 Posté(e) le 6 avril 2009 Salut, J'ai essayé de répondre à la dernière demande de johanjohan33. Comment ça fonctionne : Pour chaque polyligne 3d sélectionnée :- création d'une lwpolyligne à l'altitude spécifiée- si "Extruder les polylignes ?" = Oui : . -tentative de création d'une région (passage nécessaire en vlisp) . -extrusion de la région (si elle a bien été crée : pas d'auto-intersection). -suppression de la région. - suppression de la lwpolyligne en fonction de la valeur de delobj- si "Supprimer la polyligne 3d source ?" = Oui : suppression de la polyligne 3d. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
SupportCova Posté(e) le 21 avril 2009 Posté(e) le 21 avril 2009 Bonjour, avec Covadis on peut le faire aussi, s'il n'y a pas de chevauchement entre les polylignes 3D. 1. Créer un MNT à partir de toutes les polylignes 3D2. Convertir les polylignes 3D en poly 2D à Z=0 (Covadis 3D / Gestion des poly3D / Convertir en 2D)3. Fermer toutes les poly 2D (Covadis edition / polylignes / modifier Clore)4. Avec le module Volet paysager, traiter des ilots : MNT de référence = MNT créé en 1er, calques des contour d'ilot = calque des poly 2D fermées, position altimétrique de l'ilot, au choix ZHaut, Zbas ou Zmoyen. Cette fonction génère un MNT horizontal de chaque poly2D au Z spécifié5. Transformation ACIS => transformaton d'un MNT en objet solide 3D, indiquer 0 comme altitude de référence. Support Technique Covadis
lili2006 Posté(e) le 21 avril 2009 Posté(e) le 21 avril 2009 Bonsoir à toutes et tous, Pas mal comme info SupportCova, Mais réalisable qu'à partir de la v10, me trompe-je ? Mais j'ai du mal à voir l'intérêt de convertir des poly 3D en solide,... Enfin je veux dire, dans quel but ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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