lecrabe Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Hello SVP j'aurais besoin d'une routine qui dessinerait sur le calque courant des points graphiques AutoCAD sur TOUS les vertex des Polylignes (2D ou 3D) Si la polyligne (2D ou 3D) est close, SVP un seul point de départ/arrivée de de la polyligne Merci d'avance de votre aide, Le Decapode Autodesk Expert Elite Team
Bred Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Salut,à tester (vite fait et tordu...);;; Met Nodal sur sommet plylignes - par Bred le 27/05/08 (defun c:nod-pl (/ I LST-COORD OB SEL Y R) (or (setq sel (ssget '((0 . "VERTEX,*POLYLINE")))) (setq sel (ssget "_X" '((0 . "VERTEX,*POLYLINE"))))) (repeat (setq i (sslength sel)) (setq ob (vlax-ename->vla-object (ssname sel (setq i (1- i)))) lst-coord (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates ob)))) (if (equal (vla-get-Closed ob) :vlax-true) (progn (setq lst-coord (list (car lst-coord) (cadr lst-coord) (caddr lst-coord))) (if (equal (vla-get-ObjectName ob) "AcDbPolyline") (setq lst-coord (list (car lst-coord) (cadr lst-coord)))))) (setq y 0) (if (equal (vla-get-ObjectName ob) "AcDbPolyline") (setq r 2) (setq r 3)) (repeat (/ (length lst-coord) r) (vla-addpoint (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) (vlax-3d-point (list (nth y lst-coord) (nth (setq y (1+ y)) lst-coord) (if (equal (vla-get-ObjectName ob) "AcDbPolyline") 0.0 (nth (setq y (1+ y)) lst-coord))))) (setq y (1+ y)) ) ) (princ) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Bonjour à toutes et tous, Marche super bien Bred ! J'avais pensé aussi à un lisp de (gile) "ins-vtx " (ou qu'il m'avait aidé à finaliser en rajoutant la possibilité d'utiliser sa BD "Nom du bloc" ). Avant de poster, pensant transformer un point en bloc (ou créer un bloc "point") et retester le lisp, voilà ce que me répond AutoCAD => Commande:Commande: ins-vtxChoix de l'objet: ; erreur: nombre d'arguments insuffisantsCommande: Il me semble, en plus, que j'avais déjà rencontré ce problème que quelqu'un ici [ (gile) ?]avait déjà solutionné,.. Le code => (defun c:ins-vtx (/ acdoc space bname ss lay layf n ins) (vl-load-com) (setq acdoc (vla-get-activeDocument (vlax-get-acad-object)) space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace acdoc) (vla-get-ModelSpace acdoc) ) ) (if (setq bname (getblock "Nom du bloc")) (progn (if (setq ss (ssget "_X" (list '(0 . "INSERT") (cons 2 bname)))) (setq lay (cdr (assoc 8 (entget (ssname ss 0))))) ) (if (setq layf (getlayer "Choisir le calque filtre de polylignes")) (if (ssget "_X" (list '(0 . "*POLYLINE") (cons 8 layf))) (progn (vla-startUndoMark acdoc) (vlax-for pl (vla-get-ActiveSelectionSet acdoc) (setq n (fix (vlax-curve-getEndParam pl))) (or (= (vla-get-Closed pl) :vlax-false) (setq n (1- n)) ) (repeat (1+ n) (setq ins (vla-InsertBlock space (vlax-3d-point (vlax-curve-getPointAtParam pl n)) bname 1.0 1.0 1.0 0.0 ) ) (if lay (vla-put-layer ins lay) ) (setq n (1- n)) ) ) (vla-EndUndoMark acdoc) ) ) ) ) ) (princ) ) De mémoire, c'était aussi suite à une demande de lecrabe Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Patrick_35 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Salut Bred Je constate que tu deviens un roi du lisp et une utilisation subtile du ou :) Juste quatre petites remarques si tu le permets ;)Pour éviter un vlax-ename->vla-object, tu peux utiliser activeselectionset dans un vlax-for ou vlax-map-collection.Un (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates ob))) peux aussi se traduire en (vlax-get ob 'coordinates)Regarde la fonction vlax-curve-getpointatparam. Par exemple un (vlax-curve-getpointatparam lst-coord 2) te donnera le 3em sommet de la poly.Et la dernière est que tu regardes à chaque fois la variable cvport. Stock directement le résultat dans une variable afin d'optimiser la rapidité d'exécution. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 merci pour tes conseils,j'avoue avoir taper ce code à la va-vite sans rechercher la finesse... afin de répondre le plus rapidement possible au Crabe... donc je suis allez à ce que je connaissait le mieux. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 Hello Désolé mais la routine "NOD-PL.lsp" dessine simplement un point graphique au point de départ de chaque polyligne sélectionnée ! :( Hors je désire un point graphique sur CHAQUE vertex/sommet SVP ;) Testé sur AutoCAD/MAP 2005 & 2008 ! :o Mercipour ces débuts de programme ... Dans l'attente de la prochaine marée, Le Decapode Autodesk Expert Elite Team
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re, Sur une V2008 pleine => http://images0.hiboox.com/images/2208/4srtc9vt.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Salut, Un petit coucou en passant, Bred, pour récupéere les points des sommets des lwpolylignes et polylignes 3d (coordonnées SCG), tu peux utiliser les routines PlinePoints (lwpolyline)et 3d-coord->pt-lst (polylines 3d) que tu trouveras ici, si tu veux aussi traiter le poly 2d (old-style), 3d-coord->pt-lst fonctionne mais il faut les traduire du SCO vers le SCG. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 Hello lili SVP avec quelle routine tu obtiens ton résultat ? Le Decapode "étonné" Autodesk Expert Elite Team
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re, lecrabe Avec ": [surligneur] nod-pl [/surligneur]" de Bred réponse 1 ! Sinon, si " [surligneur] ins-vtx [/surligneur]" (réponse 2) marche chez toi, tu peux transformer le style de point qui t'intéresses en bloc et utiliser cette routine. Problème sur les polys fermées, tu seras obligé de le faire "à la main" ! En attendant que tu trouves pourquoi " nod-pl " ne marche pas chez toi,.... A au fait, question de vocabulaire, c'est quoi "les vertex" ? Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 Hello lili NON NON svp tu regardes bien ton imageet tu verras que si la polyligne est CLOSE (ta polyligne bleue) :( il y a un SEUL et UNIQUE point graphique qui dessiné à l'origine de la polyligne ! :mad: En espérant une prompte amélioration, Le Decapode "patient" :) Autodesk Expert Elite Team
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 ReHello INS-VTX se plante instantanément en demandant une fonction GETBLOCK ! ; erreur: no function definition: GETBLOCK Voilu, Voilo, Voili, Voila, Le Decapode "dormeur" Autodesk Expert Elite Team
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re, Ok ! *Je pense que bred à compris comme moi alors => Si la polyligne (2D ou 3D) est close, SVP un seul point de départ/arrivée de de la polyligne Tu voulias surement dire, pas de point double sur le point de départ et d'arrivée de la poly fermé, alors que nous, on a compris [surligneur] qu'un seul point sur le point de départ et d'arrivée[/surligneur] dans le cas d'une poly fermée !! (Je pense que c'est pareil pour bred,...!!) il y a un SEUL et UNIQUE point graphique qui dessiné à l'origine de la polyligne ! Tu peux alors reprendre ma réponse précédente (attention, que j'ai réédité entre temps,...). Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re, Azs-tu chargé la BD de (gile) => (surement un rapport,..., moi il plante après lancement => Réponse 2) http://images0.hiboox.com/images/2208/gksao7wb.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 Hello LILI & BRED OUI absolument, je me suis mal exprimé pour les polylignes je désire un point sur chaque sommet graphique sans AUCUN point en double au départ (pour les polylignes closes) que l'on pourrait avoir par exemple, si les gens sont revenus "à la main" au point de départ par "Extrémité" puis "Clore" :exclam: Sorry, mon cahier des charges n'était pas assez précis, et Bred m'a fourni une routine qui faisait exactement ce que j'avais demandé et écris ... ;) Le Decapode Autodesk Expert Elite Team
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re, Si tu vas sur la page de (gile) , tu trouveras dans le lisp "Dialog" getBlock, retourne le nom du bloc entré, sélectionné à l'écran, dans la liste déroulante ou depuis la boite de dialogue AutoCAD de sélection de fichier (getfiled). Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Bred Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 (gile) : merci aussi, je connais ces routines, mais je mettais trop de temps à les chercher, et je suis aller au plus vite... Si la polyligne (2D ou 3D) est close, SVP un seul point de départ/arrivée de de la polyligneBen ça veux dire qu'un seul point...je suis bête ou quoi ? u voulias surement dire, pas de point double sur le point de départ et d'arrivée de la poly ferméSi c'est ça je me suis pris la tête pour rien, parce que c'est plus simple !!!... :mad: suffit d'enlever quelques lignes...;;; Met Nodal sur sommet plylignes - par Bred le 27/05/08 (defun c:nod-pl (/ I LST-COORD OB SEL Y R) (or (setq sel (ssget '((0 . "VERTEX,*POLYLINE")))) (setq sel (ssget "_X" '((0 . "VERTEX,*POLYLINE"))))) (repeat (setq i (sslength sel)) (setq ob (vlax-ename->vla-object (ssname sel (setq i (1- i)))) lst-coord (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates ob)))) (setq y 0) (if (equal (vla-get-ObjectName ob) "AcDbPolyline") (setq r 2) (setq r 3)) (repeat (/ (length lst-coord) r) (vla-addpoint (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) (vlax-3d-point (list (nth y lst-coord) (nth (setq y (1+ y)) lst-coord) (if (equal (vla-get-ObjectName ob) "AcDbPolyline") 0.0 (nth (setq y (1+ y)) lst-coord))))) (setq y (1+ y)) ) ) (princ) ) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re, Pour faire suite à la réponse 15, tu peux peut-être supprimer la ligne (if (setq bname (getblock "Nom du bloc")) pour que [surligneur] "ins-vtx"[/surligneur] fonctionne bien chez toi,... OUI absolument, je me suis mal exprimé pour les polylignes Disons pas assez précis ?!! ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re Et voilà le travail http://images0.hiboox.com/images/2208/m8ml9lip.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 Hello OK mille mercis, c tout bon ! Le Decapode "heureux" Autodesk Expert Elite Team
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 ReHello Et si en plus je pouvais avoir une routine qui dessine un point graphique sur les points d'insertion des blocs/symboles sélectionnés !? Un million de mercis d'avance, Le Decapode Autodesk Expert Elite Team
Patrick_35 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Salut Toujours sur du nodal (defun c:nod-ins(/ doc ent sel spa) (vl-load-com) (and (ssget '((0 . "INSERT"))) (progn (setq doc (vla-get-activedocument (vlax-get-acad-object)) spa (if (eq (getvar "cvport") 1) (vla-get-paperspace doc) (vla-get-modelspace doc) ) ) (vla-startundomark doc) (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-addpoint spa (vla-get-insertionpoint ent)) ) (vla-delete sel) (vla-endundomark doc) ) ) (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
lili2006 Posté(e) le 27 mai 2008 Posté(e) le 27 mai 2008 Re, Fabcad propose également une routine ici C'est la saint lecrabe, aujourd'hui ! Merci Patrick_35, marche nickel,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 27 mai 2008 Auteur Posté(e) le 27 mai 2008 Hello Merci, Merci, il frétille Le Decapode aujourd'hui ! :) :D :cool: Bonne journée à tous ;) Autodesk Expert Elite Team
fabcad Posté(e) le 28 mai 2008 Posté(e) le 28 mai 2008 Oups je me suis trompé de bouton, Voici une routine que j'avais faite pour moi dans la même optique :mais qui ne marche pas sur les mpolygones d'AutoCAD MAP. ;;;--------------------------------------------------------------------------------------;;; Fonction Points-sur-sommets-lwpolyligne.LSP Version 1.0;;; par Fabrice DEMIEL;;; le 21-07-97;;;--------------------------------------------------------------------------------------(defun traite-js (js / nbr c1 e calq-obj)(setvar "cmdecho" 0)(setq nbr (sslength js))(setq i 0) (while (<= i (- nbr 1)) (setq c1 (ssname js i)) (setq ent (entget c1)) (setq lst-ent (entget c1)) (setq calq-obj (cdr (assoc 8 (entget c1)))) (setq lng-lst (length lst-ent)) (setq j 0) (while (<= j lng-lst) (if (= (car (nth j lst-ent)) 10) (progn (setq p1 (cdr (nth j lst-ent))) (entmake (list (cons 0 "POINT")(cons 10 p1)(cons 8 calq-obj))) );fin progn );fin if (setq j (+ j 1)) ); fin 2eme while (prompt (strcat "\r Traitement de " (itoa i) " Objets sur " (itoa nbr) " Objets. ")) (setq i (+ i 1)) ); fin 1er whilenil); fin defun;;;--------------------------------------------------------------------------------------; FONCTION MAITRE(defun c:pts-som-lwp () (setvar "cmdecho" 0) (setq js (ssget)) (traite-js js)(prompt "\n---COPYRIGHT 03/2007 Par Fabrice DEMIEL---")nil);fin c:boucle;;;--------------------------------------------------------------------------------------(prompt "\n Pour lancer Tapez : pts-som-lwp ")
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