Aller au contenu

Remplacer multiligne par une autre multiligne


Messages recommandés

Posté(e)

Bonjour tout le monde.

 

J'ai dans un dessin toute une série de multiligne mais je voudrais les remplacer par un autre type de multiligne mais je ne vois pas comment, une fois utilisée elle ne peut plus être modiffiée ou remplacée.

Posté(e)

Avec autocad LT, je ne pense pas que ce soit possible.

C'est possible via des commandes lisp (comme Powerclic) mais il arrive que ça fasse planter Autocad.

Les multilignes ont été abandonnées par Autodesk, c'est bien domage.

 

Oups je me suis trompé, j'ai pas posté dans la bonne rubique, je ne suis pas sous LT, mis à part ça les multilignes sont toujours là sous 2012 et aussi dans la 2013

Posté(e)

Je t'ai répondu dans Autocad 2012

concernant le terme "abandonné", je voulais dire qu'aucune nouvelle fonctionnalité n'a été ajoutée depuis la V14 !

il est domage qu'on ne puisse avoir des rayons de raccordement et des méthode de raccords plus précises.

 

Tout à fait d'accord avec toi B)

Posté(e)

hello faux suisse

tout a fait d'accord avec vous

les multilignes sont un outil très pratique et pourtant d'une lourdeur à l'utilisation sans précédent... en même temps faute d'avoir trouver mieux je continue à les utiliser (laborieusement!)

++

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Posté(e)

Hello

 

Je confirme que les multi-lignes n'ont pas bouge "ou presque" depuis 1997 (AutoCAD R14)

 

Par contre je crois avoir deja vu un Lisp/VLisp qui permettait de selectionner N multi-lignes

pour les "tripatouiller" ... A verifier ou plutot a farfouiller !?

 

Le Decapode (lecrabe)

 

PS: si tu as simplement un AutoCAD LT, tu peux installer un AutoCAD ou MAP ou Autodesk Architectural Desktop ou CIVIL

relativement recent (version 201x) qui tournera 30 jours !

Autodesk Expert Elite Team

Posté(e)

Bonjour,

 

Ce que je peux proposer avec une version pleine est de retracer une Multiligne avec le style courant, une façon de changer sont style de ligne!...

Voici (écrit rapidement) le code:

(vl-load-com)
(defun l-coor2l-pt (lst flag / )
 (if lst
   (cons
     (list
       (car lst)
       (cadr lst)
       (if flag
         (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst))
         (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0)
       )
     )
     (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag)
   )
 )
)
(defun c:change_mline ( / js ent ename l_pt cur_lay closed)
 (princ "\nSélectionner une multiligne.")
 (while (null (setq js (ssget "_+.:E:S" '((0 . "MLINE")))))
   (princ "\nCe n'est pas une multiligne!")
 )
 (setq
   ent (ssname js 0)
   ename (vlax-ename->vla-object ent)
   l_pt (l-coor2l-pt (vlax-get ename 'Coordinates) T)
   cur_lay (getvar "CLAYER")
 )
 (initget "Fermée Ouverte _Closed Open")
 (if (eq (getkword "\nMultiligne [Fermée/Ouverte] <Ouverte>: ") "Closed")
   (setq closed T)
 )
 (setvar "clayer" (vlax-get ename 'Layer))
 (command "_.mline")
 (foreach n l_pt (command "_none" (trans n 0 1)))
 (if closed (command "_close") (command ""))
 (entdel ent)
 (setvar "CLAYER" cur_lay)
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Hello

 

J'ai farfouille dans mon stock et j'ai trouve cette routine de notre indispensable Gilles !

 

Le Decapode (lecrabe)

 

PS: SVP si tu peux la tester !?

 

 


;; Pac GC - Changer le style de Multi-Lignes ...
;; http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=30135#pid130971
;; Commande : CMLS

(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 par GC
;; 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 / pair)
 (if (setq alst (member (assoc code alst) alst))
   (cons (cdar alst) (massoc code (cdr alst)))
 )
)


Autodesk Expert Elite Team

Posté(e)

Lecrabe je n'ai qu'un mot à dire,

Woaww c'est plus que parfait avec se choix de multiligne que l'on peut choisir, c'est exactement ça que j'attendais.

 

Je confirme que je ne suis pas sous LT je m'étais trompé en postant le sujet, je suis sous version pleine 2012 et MEP 2012

 

Merci encore pour votre travaille ça m'enlève une grosse épine du pied. :D

  • 5 ans après...
Posté(e)

Bonjour,

J'ai un collègue qui doit transformer une 10aine de km de multilignes en une polyligne passant par l'axe. Bonjour la galère...

 

Je comptais utiliser le bout de lisp de (gile), mais voici ce que ça me retourne:

Sélectionner des objets: VVC: Internal Error

Une idée?

 

Sinon, j'ai essayé le code de bonuscad. Après avoir créer un style constitué d'une simple ligne, j'ai pu transformer ma multiligne dans le nouveau style.

Mais j'ai 2 problèmes. 1, on ne peut modifier que multiligne par multiligne. Pas possible de faire de sélection multiple. Donc quand on en a des 10aines et des 10aines..... Et 2, une foie explosée la nouvelle multiligne, quand je fais joindre tout les morceaux de ligne, il y en a qui refuse de ce joindre. :blink:

 

En tout cas merci à vous.

 

PS: Toujours autant la m... ces multilignes.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité