philsogood Posté(e) le 26 octobre 2010 Posté(e) le 26 octobre 2010 hello,je souhaite remplacer des ML (des tubes) par d'autres ML (des tubes composés de lignes discontinues - car les tubes sont cachés)je souhaiterai sélectionné pls ML et que le lisp me demande le nouveau type de ML pour le changement...si vous avez des conseils n'hésitez pas, je sais qu'il faut que je franchisse le pas et que je me mette à la prog (je commence de zéro ou presque - j'arrive à peu près à lire un programme, c'est tout!! :)++phil PS : @autodesk : encore merci pour la rigidité des ML lors de leurs manipulations :usineàgaz: Projeteur Revit Indépendant - traitement des eaux/CVC
RhymOne Posté(e) le 26 octobre 2010 Posté(e) le 26 octobre 2010 PS : @autodesk : encore merci pour la rigidité des ML lors de leurs manipulations :usineàgaz: Une vrai connerie cette histoire de multiligne... J'ai tout essayé impossible de changé le style d'une multi-ligne.. Si un dieu du lisp nous écoute... DAO: AutoCAD(2D & 3D), CovadisCAO: 3D's MAX, Rhinoceros 3D, REVITGeoModeliSation: AutoCAD MEP, RhinoTerrainRendu: Vray for Rhino, Keyshot, LumionProgrammation: Grasshopper, Dynamo, VisualStudio C.V.Profil LinkedInBookSite web http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg
(gile) Posté(e) le 26 octobre 2010 Posté(e) le 26 octobre 2010 Salut, Le style des multilignes est en lecture seule en AutoLISP ou Visual LISP comme dans les propriétés d'AutoCAD. Comme je trouvais ça un peu démesuré de faire une commande en .NET, j'ai essayé de contourner le problème en recréant une nouvelle multiligne avec les mêmes propriétés (et xdata s'il y en a) dans le style choisi et de supprimer l'ancienne. Nouvelle version (pas testée en profondeur) ;; Commande (defun c:CMLS (/ *error* echo osnp slst ss styl ent) (vl-load-com) (defun *error* (msg) (or (not msg) (= msg "Fonction annulée") (princ (strcat "Erreur: " msg)) ) (setvar 'cmdecho echo) (setvar 'osmode osnp) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (princ) ) (setq echo (getvar 'cmdecho) osnp (getvar 'osmode) slst (gc:GetDictEntries (dictsearch (namedobjdict) "ACAD_MLINESTYLE")) ) (if (and (setq n -1 ss (ssget '((0 . "MLINE"))) ) (setq styl (gc:ListBox "Styles de multiligne" "Choisissez un style" (mapcar 'car slst) 0)) ) (progn (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object))) (setvar 'cmdecho 0) (setvar 'osmode 0) (while (setq ent (ssname ss (setq n (1+ n)))) (setq elst (entget ent)) (vl-cmdf "_.mline" "_style" styl) (mapcar '(lambda (x) (vl-cmdf (trans x 0 1)) ) (massoc 11 elst) ) (vl-cmdf (if (= 2 (logand 2 (cdr (assoc 71 elst)))) "_close" "" ) ) (if (setq xd (assoc -3 (entget ent '("*")))) (entmod (append (entget (entlast)) (list xd))) ) (entdel ent) ) ) ) (*error* nil) ) ;; gc:ListBox (gile) ;; Boite de dialogue permettant un ou plusieurs choix dans une liste ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; msg ; message (chaîne), "" ou nil pour aucun ;; lbls : une liste de chaînes (sans doublons) ;; flag : 0 = liste déroulante ;; 1 = liste choix unique ;; 2 = liste choix multipes ;; ;; Retour : l'option (flag = 0 ou 1) ou la liste des options (flag = 2) ;; ;; Exemple d'utilisation ;; (listbox "Présentation" "Choisir une présentation" (layoutlist) 1) (defun gc:ListBox (title msg lbls flag / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ListBox:dialog{label=\"" title "\";") file ) (if (and msg (/= msg "")) (write-line (strcat ":text{label=\"" msg "\";}") file) ) (write-line (cond ((= 0 flag) "spacer;:popup_list{key=\"lst\";") ((= 1 flag) "spacer;:list_box{key=\"lst\";") (T "spacer;:list_box{key=\"lst\";multiple_select=true;") ) file ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ListBox" dcl_id)) (exit) ) (start_list "lst") (mapcar 'add_list lbls) (end_list) (action_tile "accept" "(or (= (get_tile \"lst\") \"\") (if (= 2 flag) (progn (foreach n (gc:str2lst (get_tile \"lst\") \" \") (setq choice (cons (nth (atoi n) lbls) choice))) (setq choice (reverse choice))) (setq choice (nth (atoi (get_tile \"lst\")) lbls)))) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) ;; gc:str2lst ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur ;; ;; Exemples ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") ;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3) (defun gc:str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (gc:str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;; gc:GetDictEntries ;; Retourne la liste des entrées du dictionnaire ;; sous forme de paires pointées (Nom . ENAME) ;; ;; Argument : dict le dictionnaire (ENAME ou liste DXF) (defun gc:GetDictEntries (dict / result) (and (= (type dict) 'ENAME) (setq dict (entget dict))) (while (setq dict (vl-member-if (function (lambda (x) (= (car x) 3))) (cdr dict))) (setq result (cons (cons (cdar dict) (cdadr dict)) result)) ) (reverse result) ) ;; massoc ;; Retourne la liste de toutes les valeurs pour le code spécifié ;; dans une liste d'association ;; ;; Arguments ;; code : le code de groupe pour les entrées ;; alst : la liste d'association (defun massoc (code alst) (if (setq alst (member (assoc code alst) alst)) (cons (cdar alst) (massoc code (cdr alst))) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 27 octobre 2010 Posté(e) le 27 octobre 2010 Hello Gilles Je crois qu'il faut rajouter un bon vieux (vl-load-com) en debut de cette routine VLisp et sinon sous MAP avec mes OD (Object Data), je fais quoi ? Merci d'avance, Le Decapode Autodesk Expert Elite Team
lecrabe Posté(e) le 27 octobre 2010 Posté(e) le 27 octobre 2010 Hello Je viens de tester (plus en profondeur) sous MAP 2006 et MAP 2009 et je pensais que la routine fonctionnait correctement mais en fait il y a un Bug ou alors c'est une limitation de ces foutues MLines d'AutoCAD Soit un style de ML nomme "C2" avec 2 lignes de couleur bleueet un autre nomme "C4" avec 4 lignes de couleur verte Les C2 passent bien en C4 MAIS restent sous la forme de DEUX lignes, pourquoi ?et vice versa ! Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 27 octobre 2010 Posté(e) le 27 octobre 2010 Salut, Effectivement ça semble beaucoup plus complexe que ce que je pensais...J'essayerais d'y revenir si j'ai le temps, mais je ne suis pas trop motivé : je n'utilise jamais de multilignes... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
philsogood Posté(e) le 28 octobre 2010 Auteur Posté(e) le 28 octobre 2010 Bonjour (gile) et merci pour ton lisp qui marche... enfin qui fait ce que je lui demande (ie passer des ML trait plein à des ML en pointillés)le problème c'est que le lisp ne fait que ça (la transfo en pointillés), j'ai une cana en DN150 TP(trait plein) que je souhaite passer en cana DN150 P(pointillé) et ça marche, mais si je lui demande de changer cette même cana DN150 TP en cana DN20 P on a le même résult&at visuel, la cana DN20 P à la même taille qu'une cana DN150 P alors que l'échelle de la ML est resté 1 bref, quand je disais que je souhaiterai réaliser un tel programme j'ai peut être été un peu vaniteux (rien que lire ce programme est compliqué!!) ce qu'il faudrait que le logiciel fasse (et que j'essaie de faire :mad2:) c'est :- demander une sélection de ML (ça je dois pvr le trouver dans ton lisp (gile))- prendre les coordonnées de chaque extrémités de ces ML- effacer les anciennes ML- créer les nouvelles ML à partir des coordonnées récupérées et du nouveau type de ML choisis pour l'instant je bute sur l'étape 2, les coordonnées je vous tiens au courant dans la soirée pour les autres éléments qui me manqueraient (je ne travaille sur le lisp que le soir après le travail) ++ Phil - lispeur débutant Projeteur Revit Indépendant - traitement des eaux/CVC
philsogood Posté(e) le 28 octobre 2010 Auteur Posté(e) le 28 octobre 2010 PS : je peux envoyer à qui le souhaite quelques ML pour pvr faire des essais Projeteur Revit Indépendant - traitement des eaux/CVC
(gile) Posté(e) le 30 octobre 2010 Posté(e) le 30 octobre 2010 J'ai modifié le LISP donné plus haut.Cette version semble mieux fonctionner, mais je n'ai pas testé très en profondeur. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 31 octobre 2010 Posté(e) le 31 octobre 2010 Hello Gilles Je n'ai qu'un MAP 2004 a disposition pour ce WE mais en tout cas, ta nouvelle routine CMLS.lsp semble fonctionner Nickel-Chrome ! :) Pour bien tester et valider, il faut absolument au moins 2 styles de MLine (avec un nombre de ligne different) et des terminaisons differentes et eventuellement des couleurs forcees sur les lignes differents ! :exclam: Si quelqu'un pouvait tester et valider avec un AutoCAD 2010/2011, ca serait sympa !? Bon WE, Le Decapode Autodesk Expert Elite Team
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