philous2 Posté(e) le 14 octobre 2009 Posté(e) le 14 octobre 2009 Bsr,Je trouve cette macro très utile mais serait-il possible en joignant les plolylignes après transformation de pouvoir imposer un genre de "pas" avec une ligne de commande proposant la valeur de ce pas afin de combler un éventuel espace si ces polilygnes ne sont pas vraiment jointes pile poil.Autrement c'est nickel )(progn(command "pedit" (ssname ent_l compte) "o" "") (ssadd (entlast) nv_ent))) (princ "\r") (princ compte) (setq compte (1+ compte))) (princ "\nRattache les polylignes entre-elles... \n") (setq nb_nv_ent (sslength nv_ent)) (if (> nb_nv_ent 0)(progn (repeat nb_nv_ent (setq x_ent nil) (setq x_ent (entget (ssname nv_ent compte1))) (if (/= x_ent nil) (progn (command "pedit" (ssname nv_ent compte1) "j" nv_ent "" "s") (princ "\r") (princ compte1) ) ) (setq compte1 (1+ compte1))) )) (princ "\nFin du programme.")))(princ) ) ; defun (princ "\n==> TRANS_LA")(princ)
usegomme Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Salut Philou2 , je ne sais pas si j'ai bien compris et je n' ai pas essayé ta macro , mais ci-dessousun petit lisp que j'utilise avec l'écart entre polylignes fixé à 1. (valeur après le "_j" ) ; joindre arc ligne polyligne (defun c:JPO (/ jpo:pa) (setq jpo:pa (getvar "peditaccept" )) (setvar "peditaccept" 1) (vl-cmdf "_.pedit" "_m" (ssget) "" "_j" 1.0 "") ;; (ssget) (command "pedit" "_m" "_p" "" "_j" "0.0" "") ;; ancienne methode (setvar "peditaccept" jpo:pa) (princ) ) on peut en faire ça (defun c:JPo (/ jpo:pa e) (or (setq e (getdist "\n Tolérance entre polylignes <1> :")) (setq e 1.0) ) (setq jpo:pa (getvar "peditaccept" )) (setvar "peditaccept" 1) (vl-cmdf "_.pedit" "_m" (ssget) "" "_j" e "") (setvar "peditaccept" jpo:pa) (princ) ) [Edité le 15/10/2009 par usegomme]
philous2 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 Slt,Merci de ta réponse et de ton lisp très intéressant ma foi.Ce matin j'avais refait un lisp sur le m^me principe mais ça ne marche pas. ; JPL_.LSP ; ================================= ; transforme toutes les lignes, arcs ; en polylignes, les joint selon une selection et ;change épaisseur de polyligne. ; ================================= (defun c:jpl (/ ss) ;Converti en polyligne et change épr. de ligne (princ "\nConverti en polyligne et change épr. de ligne.") (princ "\nConverti en polyligne et change d'épaisseur de polylignes. -bk") (setq poliss (ssget)) (setq epr (getreal "\nNouvelle épaisseur de polylignes : ")) (if (and poliss epr (and (or (and (= (getvar "pickfirst") 1) (setq ss (ssget "_I" '((0 . "ARC,LINE,LWPOLYLINE")))) ) (setq ss (ssget '((0 . "ARC,LINE,LWPOLYLINE")))) ) (if (= (getvar "peditaccept") 1) (vl-cmdf "_.pedit" "_m" ss "" "_j" 0.0 "") (vl-cmdf "_.pedit" "_m" ss "" "_y" "_j" 0.50 "") (vl-cmdf "_.pedit" "_m" ss "" "_w "" epr ""k) ) ) (fin) ) (princ) ) ;;;___________________________________________________ (defun fin () (princ "\n Mauvaise données...-bk") (princ) ) Ton lisp répond en très grande partie à mon souhait car il transforme bien lignes arcs en polyligne et les joient avec un pas ou tolérance ou jointure au cas ou celles ne soient pas tt à fait jointes.Je voulais savoir s'il était possible de rajouter une ligne de commande pour modifier éventuellement l'épaisseur de la nouvelle polyligne ds la m^me opération.Par contre pour ta "tolérance" il peut y avoir un problème ou cela risque fausser aussi car ta tolérance est bassée sur la prolongation tolérée d'une droite.Alors imagine que tu es 2 segments lignes ou arcs qui soit presque parallèlle ou et que l'extrémité d'une entité soit presque parallèlle à l'extrémltié de l'autre cela ne fonctionne pas logique car la téolérance risque d'être importante logique.Ici au boulot cela arrive souvent avec les fichiers de géomêtres ou les lignes ne sont pas souvent toujours très bien faites.J'espère que je me suis bien expliqué car pas facile à expliquer.
usegomme Posté(e) le 15 octobre 2009 Posté(e) le 15 octobre 2009 Re salutVoilà quelque chose de rapidos , qu'il faudrait améliorer au niveau des entrées utilisateur,pour ce qui est des lignes mal dessinées , je ne sais pas faire. (defun c:JPe (/ jpo:pa e elast ss s ep) (setq elast (entlast)) (or (setq e (getdist "\n Tolérance entre polylignes <1> :")) (setq e 1.0) ) (or (setq ep (getdist "\n Epaisseur polylignes <0.5> :")) (setq ep 0.5) ) (setq ss (ssget)) (setq jpo:pa (getvar "peditaccept" )) (setvar "peditaccept" 1) (vl-cmdf "_.pedit" "_m" ss "" "_j" e "") (setq s nil s (ssadd)) (while (entnext elast) (ssadd (entnext elast) s) (setq elast (entnext elast)) ) (vl-cmdf "_.pedit" "_m" ss s "" "_w" ep "") (setvar "peditaccept" jpo:pa) (princ) )
philous2 Posté(e) le 15 octobre 2009 Auteur Posté(e) le 15 octobre 2009 Reslt,Super sympa et grand merci, n'étant pas du tout un spécialiste de la programation pour les fameuse lignes je vais poser question sur le forum peut-être quelqu'un aura quelque chose une idée. C'est vrai que qd tu réfléchis cette tolérance peut fausser en cas de grande valeur. Autre cas ou elle ne marche pas non plus et que est logique qd un arc n'est pas vraiment qd l'alignement tangent du prolongement d'un segment. Mais c'est une macro que j'uiliserai souvent car la plupart du temps les écarts sont minime car plus rapide que pedit et qd ils sont plus grand je procède différemment.Mais encore merciPhil
philous2 Posté(e) le 16 octobre 2009 Auteur Posté(e) le 16 octobre 2009 Slt J'ai essayé ton lisp à l'instant et ça ne fonctione pas l'as-tu essayé de ton coté IL doit y avoir quelque chose qui ne fonctionne pas au chrgement j'ai ce message "_ appload JPe.LSP correctement chargé(s) erreur: type d'argument incorrect: numberp: nil", puis ça en rentrant le code "inconnue "JPe". Appuyez sur F1 pour obtenir de l'aide. " A+ Phil
usegomme Posté(e) le 16 octobre 2009 Posté(e) le 16 octobre 2009 Salut , chez moi ça fonctionne (acad2008), essaie en changeant le nom du lisp , il y a peut être un doublon.
philous2 Posté(e) le 16 octobre 2009 Auteur Posté(e) le 16 octobre 2009 reslt, j'essaierai cela lundi suis en WE depuis ce midi.ben j'ai chargé ton lisp jpo et le dernier jpe.Qd tu dis changer le nom du lisp tu le fais ou sur le nom du fichier ou sur le code.Au boulot comme chez moi c'est la version 2009, boulot version map 2009.Je te souhaite un bon we, te dirais lundi ok.A+Phil
usegomme Posté(e) le 16 octobre 2009 Posté(e) le 16 octobre 2009 Je viens de l'essayer avec la 2009 et tout va bien , vérifie si tu as bien copier le code , sinon c'est le nom de la commande qu'il faut changer en priorité (defun c:JPe Si quelqu'un d'autre veut bien l'essayer , on verra un peu plus clair.
lili2006 Posté(e) le 17 octobre 2009 Posté(e) le 17 octobre 2009 Bonjour à toutes et tous, Fonctionne parfaitement chez moi aussi,... AutoCAD 2008 et Civil 3D 2010,... Pas mal, ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
philous2 Posté(e) le 18 octobre 2009 Auteur Posté(e) le 18 octobre 2009 Bsr, usegommeposté le 16/10/2009 à 15:43 Je viens de l'essayer avec la 2009 et tout va bien , vérifie si tu as bien copier le code , sinon c'est le nom de la commande qu'il faut changer en priorité ( defun c:JPe Si quelqu'un d'autre veut bien l'essayer , on verra un peu plus clair.Car au début de ton lisp tu as (defun c:JPe (/ [surligneur] jpo[/surligneur]:pa e elast ss s ep)Et comme j'ai un lisp qui se nomme jpo avec le nom de code jpo serait-ce cela qui fait peut-être doublon ? car c'est bizarre qu'il n'y a qu"avec moi que cela ne fonctionne pas
philous2 Posté(e) le 19 octobre 2009 Auteur Posté(e) le 19 octobre 2009 Slt, J'ai réessayé ce matin rien à faire, j'ai renommé comme tu me l'as indiqué ci-après ton lisp renommé, regarde et dis-moi si c'est ok. defun c:JPedit (/ jpo:pa e elast ss s ep) (setq elast (entlast)) (or (setq e (getdist "\n Tolérance entre polylignes <1> :")) (setq e 1.0) ) (or (setq ep (getdist "\n Epaisseur polylignes <0.5> :")) (setq ep 0.5) ) (setq ss (ssget)) (setq jpo:pa (getvar "peditaccept" )) (setvar "peditaccept" 1) (vl-cmdf "_.pedit" "_m" ss "" "_j" e "") (setq s nil s (ssadd)) (while (entnext elast) (ssadd (entnext elast) s) (setq elast (entnext elast)) ) (vl-cmdf "_.pedit" "_m" ss s "" "_w" ep "") (setvar "peditaccept" jpo:pa) (princ)) Si tout est ok j'ai tjrs le m^me soucis avec le nouveau nom et code " jpedit" c'est à dire ce message d'erreur récurrent Commande: _appload JPedit.LSP correctement chargé(s)Commande: ; erreur: type d'argument incorrect: numberp: nilCommande:Commande: jpeditCommande inconnue "JPEDIT". Appuyez sur F1 pour obtenir de l'aide. Je vais l'essayer sur le pc d'un autre collègue de boulot e tje te dirais si cela a fonctionné ou pas
usegomme Posté(e) le 19 octobre 2009 Posté(e) le 19 octobre 2009 Bonjour , Merci pour le test, Lili2006. Quant à Philou2 , et au lisp , je constate que sur ce que tu as recopié , il manque une parenthèse avant le DEFUN defun c:JPedit (/ jpo:pa e elast ss s ep) Donc c'est pour cela que ça ne marche pas ! Il te faut utiliser l'editeur VLISP pour vérifier les parenthèses et au moyen du double clic.
philous2 Posté(e) le 19 octobre 2009 Auteur Posté(e) le 19 octobre 2009 Ah la fameuse parenthèze que je n'avais pas vu en haut.Merci nickelsuper sympa ce lisp
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