barbichette Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 Bonjour, j'ai récupéré un plan d'un architecte.Celui ci a utilisé un grand nombre d'échelle de type de ligne différentes (ex: 1; 5; 9; 10; 12; 15; 18; 20; 30; 40; 42; 50; 90; 100....)Bien sur avec ces échelles de type de ligne et ma configuration, cela ne passe pas (les pointillés n'apparaissent pas) Mais si je divise chaque echelle par 100 (5 devenant 0.05) alors l'affichage des pointillés de l'architecte apparraissent normallement. Mon problème est de prendre en compte toutes les échelles que l'architecte aurait pu utiliser (et il en a utilisé un grand nombre) y'aurait il moyen, par lisp d'appliquer cette division à toutes les echelles de type de ligne ? PS : je ne peux pas utiliser les echelles d'annotation. ***********************Rien ne sert de courrir, il faut partir à point.
Tramber Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 et ECHLTP ?Ca ne marche pas dans ton cas ? Tu parles bien de l'espace objet ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Arcasdk Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 Bonjour, as tu essayé en passant par la sélection rapide tu sélectionnes toutes les lignes par exemple qui ont une échelle de type de ligne égale à "x" et tu changes tout d'un coup par "x/5"... non? tu ne devrais pas en avoir pour longtemps. @+ <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
barbichette Posté(e) le 8 avril 2009 Auteur Posté(e) le 8 avril 2009 Merci Pour Tramber :J'utilise Echltp, mais "mon" echltp" est défini pour "mes lignes"l'architecte à utilisé un echlto propre avec lequel ses lignes apparaissent bien.Faudrait presque 2 echltp différents. Pour ARcasdk :j'ai utilisé la sélection rapide.Mais tu dis qu'il faut que je sélectionne toutes les lignes dont l'échelle est égale à X... or ce x peut prendre un grand nombre de valeur différentes.Et de plus, je n'ai pas de liste de toutes les valeurs que pourrait prendre ce fameux "x". d'où l'idée d'un lisp qui diviserait par 100 la valeur de l'echelle de type de ligne, et ce, quelle que soit cette valeur ***********************Rien ne sert de courrir, il faut partir à point.
PHILPHIL Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 HELLO bon premier lisp en vl-lisp a toi de jouer sur le facteur d'echelle dans le lisp 100 multiplier ou diviser (defun c:mdel () (vl-load-com) (setvar "cmdecho" 0) (setvar "dimzin" 0) (setvar "osmode" 0) (prompt "CLIQUER SUR LES ENTITES A MODIFIER :") (setq entites nil) (while (null entites) (setq entites (ssget))) (setq compt 0) (setq com (sslength entites)) (while (< compt com) (progn (setq ent1 (ssname entites compt)) (setq code1 (cdr (assoc -1 (entget ent1)))) (setq ena1 (vlax-ename->vla-object code1)) (setq proper1 (vlax-get-property ena1 'truecolor)) (setq colorr (vlax-get-property proper1 'colorindex)) (setq ligntype (vlax-get-property ena1 'linetype)) (setq ligntypeech (vlax-get-property ena1 'linetypescale)) ) [surligneur] (setq newligntypeech (* ligntypeech 100)) ;;(setq newligntypeech (/ ligntypeech 100))[/surligneur] (vlax-put-property ena1 'linetypescale newligntypeech) (setq compt (1+ compt)) (prompt (strcat "\rENTITE MODIFIEE : " (rtos compt 2 0) " SUR : " (rtos com 2 0) " ")) ) ) phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
barbichette Posté(e) le 8 avril 2009 Auteur Posté(e) le 8 avril 2009 Merci, je vais tester ***********************Rien ne sert de courrir, il faut partir à point.
barbichette Posté(e) le 8 avril 2009 Auteur Posté(e) le 8 avril 2009 Ca marche parfaitement Par contre serait il possible d'y apporter la modification suivante :- Ne pas demander de sélectionner d'objet, mais appliquer le lisp à toutes les lignes automatiquement- Demander le coéficient de division (ici 100 par ex)- demander s'il faut multiplier ou diviser. (avec diviser par défaut) Merci grandement de ton aide. ***********************Rien ne sert de courrir, il faut partir à point.
Patrick_35 Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 Salut barbichettePHILPHIL à répondu, c'est dommage dans le sens que c'est une occasion rêvée de se lancer dans le lisp plutôt que de demander quelque chose de tout cuit.Ne pas demander de sélectionner d'objet, mais appliquer le lisp à toutes les lignes automatiquementTu fais tout lors de la sélection. PHILPHILTu peux largement simplifier ton code.J'ai aussi remarqué que tu redéfinissais des variables et que tu ne remettais pas lesdites variables dans leurs états initiaux à la fin du lisp.Comme tu utilises autolisp, reste en autolisp et modifie le code dxf 48En vlisp, tu peux éviter d'utiliser vlax-ename->vla-object en utilisant une boucle vlax-for sur activeselectionsetJuste pour info, (vlax-put-property ena1 'linetypescale newligntypeech) = (vla-put-linetypescale ena1 newligntypeech) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
PHILPHIL Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 hello patrick 35 c'est dommage pour barbichette mais pas pour moi ;) oups ok pour les variables modifiees et non remis dans leurs etats initiauxca c'est un grosss oubli de ma part vu que je le fais dans mes autres LISP pour le VLISP je suis nul en anglaisje me suis lancé dans la traduction en francais de l'aide ( fichier word ) mais j'ai pas eu bcp d'aide pour cadonc je ne connais que tres peu de fonction VLISP mais je vais potasser un peu celles dont tu viens de me parler patrick merci a+ phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
barbichette Posté(e) le 8 avril 2009 Auteur Posté(e) le 8 avril 2009 PHILPHIL à répondu, c'est dommage dans le sens que c'est une occasion rêvée de se lancer dans le lisp plutôt que de demander quelque chose de tout cuit. Mais j'essaye. Mais je pense être plus doué pour les macros Excel, car toutes mes modifs dans les lisp autocad mênent invariablement au même résultat -> plantage (heureusement ce ne sont souvent que des plantages du lisp) Il est vrai, également, que je n'ai eu le temps (ou le loisir) de me pencher réellement sur le codage, et sur les astuces liées au codage.La lecture des lisps que vous créez, ressemble pour moi à la lecture d'un texte en hébreux. ***********************Rien ne sert de courrir, il faut partir à point.
PHILPHIL Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 hello normal que tu ne comprennes pas alors c'est du chinois et pas de l'hebreux t'inquiete pas pour moi aussi italique = humour a+ phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Patrick_35 Posté(e) le 8 avril 2009 Posté(e) le 8 avril 2009 Si tu as compris un langage de programmation, c'est déjà beaucoup.Passer sur un autre type est juste un problème de traduction.Il reste bien sur des subtilités, mais une boucle reste une boucle, un tableau de même, comme les récursives/itératives.Il faut se donner du temps. ps : pour diviser dans le lisp, plutôt que de poser une question Multiplier/diviser, tu peux aussi multiplier par 0.01 pps : hébreux, chinois, au début je pensais que c'était du cyrillique ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 9 avril 2009 Posté(e) le 9 avril 2009 Salut Je pensais que PHILPHIL aurait été plus réactif. Donc, pour répondre à ton besoin Version Autolisp (defun c:ech(/ cmd ent js n val) (setq cmd (getvar "cmdecho") n 0 ) (setvar "cmdecho" 0) (command "_.undo" "_group") (initget 2) (and (setq val (getreal "\nVeuillez indiquer le facteur d'échelle multiplicateur : ")) (setq js (ssget)) (while (setq ent (ssname js n)) (setq ent (entget ent) ent (subst (cons 48 (* (cdr (assoc 48 ent)) val)) (assoc 48 ent) ent) n (1+ n) ) (entmod ent) ) ) (command "_.undo" "_end") (setvar "cmdecho" cmd) (princ) ) Version Vlisp (defun c:ech(/ doc ent val) (vl-load-com) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (vla-startundomark doc) (initget 2) (and (setq val (getreal "\nVeuillez indiquer le facteur d'échelle multiplicateur : ")) (ssget) (progn (vlax-for ent (setq sel (vla-get-activeselectionset doc)) (vla-put-linetypescale ent (* (vla-get-linetypescale ent) val)) ) (vla-delete sel) ) ) (vla-endundomark doc) (princ) ) Pour diviser par 100, tu mets un facteur multiplicateur de 0.01 @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
barbichette Posté(e) le 9 avril 2009 Auteur Posté(e) le 9 avril 2009 Bonjour, et merci quelles sont les différences entre le Autolisp et le Vlisp ? et par voie de conséquence, lequel de tes 2 codes, est il préférable que j'utilise ? ***********************Rien ne sert de courrir, il faut partir à point.
Patrick_35 Posté(e) le 9 avril 2009 Posté(e) le 9 avril 2009 Re Les deux ont le même résultat et la même logique.Juste une préférence pour le vlisp car il est plus rapide en temps d'exécution qu'autolisp et en plus, pas besoin de toucher aux variables d'Autocad.Ce qui fait qu'en cas d'erreur, de plantage ou autre, elles restent inchangées. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
PHILPHIL Posté(e) le 9 avril 2009 Posté(e) le 9 avril 2009 hello non non je ne me suis pas endormi sur le bord de la route lolll disont qu'il a fallut que je sois plus réactif pour mon propre boulot ;) merci d'avoir répondu patrick avec les deux version on va pouvoir apprendre concernant ton lisp GEF je vais faire une tite demande si je peux me permetre bonne soirée de boulot a vous a+phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
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