Aller au contenu

Comment purger la liste des echelles d\'annotation


socrate89

Messages recommandés

 

Hello

 

Pour AutoCAD 2008 et 2009, tu installes l'utilitaire Scale List Cleanup Utility :

 

http://usa.autodesk.com/adsk/servlet/ps/dl/item?siteID=123112&id=11062617&linkID=9240618

 

Cet EXE travaille EN DEHORS d'AutoCAD et permet donc de traiter les DWGs

AVANT de les charger et donc de se planter !

 

Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Un Lisp...

 

 ;;;permet de supprimer une tres grande liste d'echelles
;;;commande:SCALELISTDELALL
;;; ==========================================================================
;;; File: ScaleListDel.lsp
;;; Purpose: Scale list deletion and management for AutoCAD 2008
;;; Author: Steve Johnson
;;; Date: 13 August 2007
;;; Version: 0.7
;;; Copyright: (c) 2007 cad nauseam (www.cadnauseam.com)
;;; May be distributed and used freely provided this header is retained in full
;;; --------------------------------------------------------------------------
;;; Disclaimer:
;;; This code is supplied as-is and with no warranty whatsoever.
;;; Destruction of annotative objects WILL result from incorrect use.
;;; Use at own risk. No responsibility accepted. Read all notes before use.
;;; --------------------------------------------------------------------------
;;; Commands:
;;;  SCALELISTDEL
;;;   Deletes unused scales except 1:1 using a user-provided wildcard.
;;;  SCALELISTDELALL
;;;   Deletes all unused scales except 1:1.
;;;  SCALELISTDELINCH
;;;   Deletes all unused scales that contain the inch " character.
;;;  SCALELISTDELXREF
;;;   Deletes all unused scales that contain the "_XREF" string.
;;;  SCALELISTDEL_
;;;   Deletes all unused scales that contain the "_" character.
;;;  SCALELISTDELINCHXREF
;;;   Deletes all unused scales that contain either the inch " character or
;;;   the "_XREF" string.
;;;  SCALELISTDELINCH_
;;;   Deletes all unused scales that contain either the inch " or "_"
;;;   characters.
;;;  SCALELISTMETRIC
;;;   Deletes all existing unused scales except 1:1 and sets up metric scales.
;;;  SCALELISTMETRICTEMPLATE
;;;   Deletes all existing scales and sets up metric scales. For use only in
;;;   setting up scales in templates and pre-2008 drawings.
;;;   WARNING: potentially destructive to annotative objects!
;;;  SCALELISTINCH
;;;   Deletes all existing unused scales except 1:1 and sets up inch-based
;;;   scales.
;;;  SCALELISTINCHTEMPLATE
;;;   Deletes all existing scales and sets up inch-based scales. For use
;;;   only in setting up scales in templates and pre-2008 drawings.
;;;   WARNING: potentially destructive to annotative objects!
;;; --------------------------------------------------------------------------
;;; Functions:
;;;  (scaledel_all_unsafe)
;;;   Deletes all scales in the current drawing, including 1:1 and scales in
;;;   use.
;;;   WARNING: potentially destructive to annotative objects!
;;;  (scaledel_wcard_unsafe WCARD-OR-LIST)
;;;   If WCARD-OR-LIST is a wildcard string, deletes scales that match that
;;;   wildcard, excluding 1:1 but including scales in use.
;;;   If WCARD-OR-LIST is a list of scale names, deletes those scales,
;;;   including 1:1 (if listed) and scales in use.
;;;   WARNING: potentially destructive to annotative objects!
;;;  (scaledel_long_xref LONG-SCALE-LIST)
;;;   Cleans up those scales that are too long to delete using the command-line
;;;   (i.e. over 132 characters). These are usually only those created by the
;;;   AutoCAD 2008 pre-SP1 bug that created _XREF_XREF_XREF scales, and this
;;;   is checked before deletion.
;;;  (scaledel_warning)
;;;   Issues a warning and asks user to enter Yes before continuing.
;;;  (scaledel_get_scalelist)
;;;   Returns a list of scales in the drawing.
;;;  (scaledel_all)
;;;   Deletes all scales other than 1:1 and scales in use.
;;;  (scaledel_reset)
;;;   Performs a -SCALELIST Reset command.
;;;  (scaledel_smart_reset)
;;;   Performs a -SCALELIST Reset command if it is likely to reduce the number
;;;   of scales in the list, prior to setting things up.
;;;  (scaledel_wcard WCARD)
;;;   Deletes scales that match WCARD, excluding 1:1 and scales in use.
;;;  (scaledel_create_scales SCALES)
;;;   Creates a set of scales defined in list SCALES.
;;;  (scaledel_create_metric)
;;;   Creates a set of metric scales: see *** in code to adjust list.
;;;  (scaledel_create_inch)
;;;   Creates a set of inch scales: see *** in code to adjust list.
;;; --------------------------------------------------------------------------
;;; Notes:
;;; Other than the SCALELIST*TEMPLATE commands, the commands will not delete
;;; the 1:1 scale, even if it is not in use. This is because if the scale list
;;; is completely cleared, AutoCAD 2008 will automatically recreate it using
;;; its hardwired list when the user picks the "Custom..." item that
;;; remains in the list. Leaving in the 1:1 scale prevents this from happening.
;;; The (scaledel_*_unsafe) functions can be used to delete all scales,
;;; including 1:1 and those in use, if you really need to do so.
;;; --------------------------------------------------------------------------
;;; Later AutoCAD releases:
;;; As AutoCAD 2008's annotative scaling feature needs work, it is quite likely
;;; that future releases of AutoCAD will do things differently. This may result
;;; in this software failing to work correctly, or working with unintended
;;; results. Check carefully before using this software in 2009 and later.
;;; --------------------------------------------------------------------------
;;; WARNING:
;;; Any function that uses the (scaledel_*_unsafe) functions may be DESTRUCTIVE
;;; to any annotative objects in the drawing, because they allow the deletion
;;; of scales that are in use.
;;; ==========================================================================


(if (>= (atof (substr (getvar "ACADVER") 1 4)) 17.1)
 (progn ; Only define these functions if they will work (ie. 2008 or later)


   (prompt "\nLoading ScaleListDel.lsp Version 0.7... ")
;;; --------------------------------------------------------------------------
;;; Commands


   (defun C:SCALELISTDEL (/ wcard)
     (setq wcard (getstring "\nEnter scale name(s) to delete: "))
     (if (/= wcard "")
       (scaledel_long_xref (scaledel_wcard wcard))
     )
     (princ)
   ) ; End C:SCALELISTDEL


   (defun C:SCALELISTDELALL ()
     (scaledel_all)
     (princ)
   ) ; End C:SCALELISTDELXREF


   (defun C:SCALELISTDELXREF ()
     (scaledel_long_xref (scaledel_wcard "*_XREF"))
     (princ)
   ) ; End C:SCALELISTDELXREF


   (defun C:SCALELISTDEL_ ()
     (scaledel_long_xref (scaledel_wcard "*_*"))
     (princ)
   ) ; End C:SCALELISTDEL_


   (defun C:SCALELISTDELINCH ()
     (scaledel_long_xref (scaledel_wcard "*\"*"))
     (princ)
   ) ; End C:SCALELISTDELINCH


   (defun C:SCALELISTDELINCHXREF ()
     (scaledel_long_xref (scaledel_wcard "*\"*,*_XREF"))
     (princ)
   ) ; End C:SCALELISTDELINCHXREF


   (defun C:SCALELISTDELINCH_ ()
     (scaledel_long_xref (scaledel_wcard "*\"*,*_*"))
     (princ)
   ) ; End C:SCALELISTDELINCHXREF


   (defun C:SCALELISTMETRIC ()
     (scaledel_smart_reset)
     (prompt "\nDeleting existing unused scales...")
     (scaledel_long_xref (scaledel_wcard "*"))
     (prompt "\nCreating metric scales...")
     (scaledel_create_metric)
     (princ)
   ) ; End C:SCALELISTMETRIC


   (defun C:SCALELISTMETRICTEMPLATE ()
     (if (= (scaledel_warning) "Yes")
       (progn
         (scaledel_smart_reset)
         (prompt "\nDeleting all existing scales...")
         (scaledel_all_unsafe)
         (prompt "\nCreating metric scales...")
         (scaledel_create_metric)
       )
     )
     (princ)
   ) ; End C:SCALELISTMETRICTEMPLATE


   (defun C:SCALELISTINCH ()
     (scaledel_smart_reset)
     (prompt "\nDeleting existing unused scales...")
     (scaledel_wcard "*")
     (prompt "\nCreating inch scales...")
     (scaledel_create_inch)
     (princ)
   ) ; End C:SCALELISTINCH


   (defun C:SCALELISTINCHTEMPLATE ()
     (if (= (scaledel_warning) "Yes")
       (progn
         (scaledel_smart_reset)
         (prompt "\nDeleting all existing scales...")
         (scaledel_all_unsafe)
         (prompt "\nCreating inch scales...")
         (scaledel_create_inch)
       )
     )
     (princ)
   ) ; End C:SCALELISTINCHTEMPLATE


;;; --------------------------------------------------------------------------
;;; Functions


   (defun scaledel_all_unsafe (/ scale-en-list)
     (foreach item (dictsearch (namedobjdict) "ACAD_SCALELIST")
       (if (= 350 (car item))
         (setq scale-en-list (cons (cdr item) scale-en-list))
       )
     )
     (foreach item scale-en-list
       (entdel item)
     )
   ) ; End scaledel_all_unsafe


   (defun scaledel_wcard_unsafe (WCARD-OR-LIST / scale-list scale)
     (foreach item (dictsearch (namedobjdict) "ACAD_SCALELIST")
       (if (= 350 (car item))
         (setq
           scale-list
           (cons
             (cons (strcase (cdr (assoc 300 (entget (cdr item))))) (cdr item))
             scale-list
           )
         )
       )
     )
     (if (= (type WCARD-OR-LIST) 'STR)
       (foreach item scale-list
         (if
           (and
             (wcmatch (car item) (strcase WCARD))
             (/= (car item) "1:1")
           )
           (entdel (cdr item))
         )
       )
       (foreach item WCARD-OR-LIST
         (if (setq scale (assoc (strcase item) scale-list))
           (entdel (cdr scale))
         )
       )
     )
   ) ; End scaledel_wcard_unsafe


   (defun scaledel_long_xref (LONG-SCALE-LIST / scale-list)
     (foreach scale LONG-SCALE-LIST
       (if (wcmatch (strcase scale) "*_XREF_XREF_XREF*")
         (setq scale-list (cons scale scale-list))
       )
     )
     (if scale-list
       (progn
         (prompt "\nDeleting the following long _XREF scale(s):")
         (foreach scale scale-list
           (prompt (strcat "\n " scale))
         )
         (scaledel_wcard_unsafe scale-list)
       )
     )
   ) ; End scaledel_long_xref


   (defun scaledel_warning ()
     (initget "Yes No")
     (getkword
       (strcat
         "\nThis command will first destroy all existing scales including those in use."
         "\nAre you sure you want to do this? [Yes/No] : "
       )
     )
   ) ; End scaledel_warning


   (defun scaledel_get_scalelist (/ scale-list)
     (foreach item (dictsearch (namedobjdict) "ACAD_SCALELIST")
       (if (= 350 (car item))
         (setq
           scale-list
           (cons (strcase (cdr (assoc 300 (entget (cdr item))))) scale-list)
         )
       )
     )
     scale-list
   ) ; End scaledel_get_scalelist


   (defun scaledel_all ()
     (scaledel_smart_reset)
     (scaledel_long_xref (scaledel_wcard "*"))
   ) ; End scaledel_all


   (defun scaledel_reset (/ cmdecho)
     (setq cmdecho (getvar "CMDECHO"))
     (setvar "CMDECHO" 0)
     (command "_.-SCALELISTEDIT" "_R" "_Y" "_E")
     (setvar "CMDECHO" cmdecho)
   ) ; End scaledel_reset


   (defun scaledel_smart_reset ()
     (if (> (length (scaledel_get_scalelist)) 40)
       (scaledel_reset)
     )
   ) ; End scaledel_smart_reset


   (defun scaledel_wcard (WCARD / scale-list cmdecho long-scale-list)
     (foreach scale (scaledel_get_scalelist)
       (if
         (and
           (wcmatch (strcase scale) (strcase WCARD))
           (/= scale "1:1")
         )
         (setq scale-list (cons scale scale-list))
       )
     )
     (if scale-list
       (progn
         (setq cmdecho (getvar "CMDECHO"))
         (setvar "CMDECHO" 0)
         (command "_.-SCALELISTEDIT")
         (foreach item scale-list
           (if (<= (strlen item) 132)
             (command "_D" item) ; Attempt to delete scale
             (setq long-scale-list (cons item long-scale-list))
           )
         )
         (command "_E")
         (setvar "CMDECHO" cmdecho)
       )
     )
     long-scale-list ; Returns list of scales too long to delete
   ) ; End scaledel_wcard


   (defun scaledel_create_scales (SCALES / scale-list-all cmdecho)
     (setq
       scale-list-all (scaledel_get_scalelist)
       cmdecho (getvar "CMDECHO")
     )
     (setvar "CMDECHO" 0)
     (command "_.-SCALELISTEDIT")
     (foreach scale SCALES
       (if (not (member (strcase (car scale)) scale-list-all))
         (command "_A" (car scale) (cadr scale))
       )
     )
     (command "_E")
     (setvar "CMDECHO" cmdecho)
   ) ; End scaledel_create_scales


;;; --------------------------------------------------------------------------
;; *** Note: several uncommon scales have been commented out.
;; Delete the leading semi-colon to make a scale active.
;; You can comment out an unwanted scale by placing a semi-colon at
;; the start of its line.

   (defun scaledel_create_metric ()
     (scaledel_create_scales
       '(
;          ("10:1" "10:1")
;          ("5:1" "5:1")
;          ("2:1" "2:1")
         ("1:1" "1:1")
         ("1:2" "1:2")
;          ("1:2.5" "1:2.5")
         ("1:5" "1:5")
         ("1:10" "1:10")
         ("1:20" "1:20")
;          ("1:25" "1:25")
         ("1:50" "1:50")
         ("1:100" "1:100")
         ("1:200" "1:200")
;          ("1:250" "1:250")
         ("1:500" "1:500")
         ("1:1000" "1:1000")
         ("1:2000" "1:2000")
;          ("1:2500" "1:2500")
         ("1:5000" "1:5000")
;          ("1:10000" "1:10000")
;          ("1:20000" "1:20000")
;          ("1:25000" "1:25000")
;          ("1:50000" "1:50000")
;          ("1:100000" "1:100000")
;          ("1:200000" "1:200000")
;          ("1:250000" "1:250000")
;          ("1:500000" "1:500000")
         ("1:1 m" "1000:1")
         ("1:2 m" "1000:2")
;          ("1:2.5 m" "1000:2.5")
         ("1:5 m" "1000:5")
         ("1:10 m" "1000:10")
         ("1:20 m" "1000:20")
;          ("1:25 m" "1000:25")
         ("1:50 m" "1000:50")
         ("1:100 m" "1000:100")
         ("1:200 m" "1000:200")
;          ("1:250 m" "1000:250")
         ("1:500 m" "1000:500")
         ("1:1000 m" "1000:1000")
         ("1:2000 m" "1000:2000")
;          ("1:2500 m" "1000:2500")
         ("1:5000 m" "1000:5000")
         ("1:10000 m" "1000:10000")
         ("1:20000 m" "1000:20000")
;          ("1:25000 m" "1000:25000")
         ("1:50000 m" "1000:50000")
;          ("1:100000 m" "1000:100000")
;          ("1:200000 m" "1000:200000")
;          ("1:250000 m" "1000:250000")
;          ("1:500000 m" "1000:500000")
       )
     )
   ) ; End scaledel_create_metric


;;; --------------------------------------------------------------------------
;; *** Note: several uncommon scales have been commented out.
;; Delete the leading semi-colon to make a scale active.
;; You can comment out an unwanted scale by placing a semi-colon at
;; the start of its line.

   (defun scaledel_create_inch ()
     (scaledel_create_scales
       '(
;          ("8:1" "8:1")
;          ("4:1" "4:1")
;          ("2:1" "2:1")
         ("1:1" "1:1")
         ("1/32\" = 1'-0\"" "0.03125:12")
         ("1/16\" = 1'-0\"" "0.0625:12")
         ("3/32\" = 1'-0\"" "0.09375:12")
         ("1/8\" = 1'-0\"" "0.125:12")
         ("3/16\" = 1'-0\"" "0.1875:12")
         ("1/4\" = 1'-0\"" "0.25:12")
         ("3/8\" = 1'-0\"" "0.375:12")
         ("1/2\" = 1'-0\"" "0.5:12")
         ("3/4\" = 1'-0\"" "0.75:12")
         ("1\" = 1'-0\"" "1:12")
         ("1-1/2\" = 1'-0\"" "1.5:12")
         ("3\" = 1'-0\"" "3:12")
         ("6\" = 1'-0\"" "6:12")
         ("1\" = 10'-0\"" "1:120")
         ("1\" = 20'-0\"" "1:240")
         ("1\" = 30'-0\"" "1:360")
         ("1\" = 40'-0\"" "1:480")
         ("1\" = 50'-0\"" "1:600")
         ("1\" = 60'-0\"" "1:720")
         ("1\" = 100'-0\"" "1:1200")
;          ("1\" = 250'-0\"" "1:3000")
;          ("1\" = 500'-0\"" "1:6000")
;          ("1\" = 1000'-0\"" "1:12000")
;          ("1\" = 5280'-0\"" "1:63360")
;          ("1\" = 12000'-0\"" "1:144000")
;          ("1\" = 24000'-0\"" "1:288000")
;          ("1\" = 48000'-0\"" "1:576000")
;          ("1\" = 50000'-0\"" "1:600000")
;          ("1\" = 52800'-0\"" "1:633600")
       )
     )
   ) ; End scaledel_create_inch


   (prompt
     (strcat
       "SCALELISTDEL SCALELISTDELALL SCALELISTDELINCH SCALELISTDELXREF "
       "SCALELISTDEL_ SCALELISTDELINCHXREF SCALELISTDELINCH_ SCALELISTMETRIC "
       "SCALELISTMETRICTEMPLATE SCALELISTINCH SCALELISTINCHTEMPLATE "
       "commands loaded.\n"
     )
   )


 ) ; End progn to test for AutoCAD release
 (prompt "\nRequires AutoCAD 2008 or above.")
)

(princ)

;;; ==========================================================================
;;; End of file ScaleListDel.lsp
;;; ==========================================================================

@+

Lien vers le commentaire
Partager sur d’autres sites

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é