harilalmn 发表于 2022-7-6 09:09:03

Adding Scale to scales list -

Hi Guys,
I am writing a program for adding scale lists in AutoCAD 2010.
This is where I am;

(defun AddMetersScales()         (command "-SCALELISTEDIT""ADD" "1:5000 (Meters)" "0.2:1" "Exit")(command "-SCALELISTEDIT""ADD" "1:3000 (Meters)" "0.3333:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:2000 (Meters)" "0.5:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:1000 (Meters)" "1:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:500 (Meters)" "2:1 " "EXIT")(command "-SCALELISTEDIT""ADD" "1:400 (Meters)" "2.5:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:300 (Meters)" "3.333:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:250 (Meters)" "4:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:200 (Meters)" "5:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:150 (Meters)" "6.6666:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:100 (Meters)" "10:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:50 (Meters)" "20:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:25 (Meters)" "40:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:20 (Meters)" "50:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:5 (Meters)" "200:1" "EXIT"))
 
Problem is that, if a drawing already has a scale in the above list, it brakes the loop and shows error.
How to handle this? I just want to skip adding that scale if the error happens...
Please help...

harilalmn 发表于 2022-7-6 10:59:27

Actually, the above code is a part of a long one which is here;

;; The code below is copied from http://forums.augi.com/showthread.php?p=1045033 posted by mgonzales.224492 on 2010-02-11, 02:30 PM;; Utilities to clean-up scale lists;; Command to remove all XREF scale lists(defun ScaleListRemXRef (/) (princ   (strcat "\n"    (itoa (DelScaleListMatch "*XREF*" (GetScaleListEntities)))    " XREF scales deleted."   ) ;_ end of strcat ) ;_ end of princ (princ)) ;_ end of defun;; Command to remove all Imperial scales(defun ScaleListRemImperial (/) (princ   (strcat "\n"    (itoa (DelScaleListMatch "*=*" (GetScaleListEntities)))    " Imperial scales deleted."   ) ;_ end of strcat ) ;_ end of princ (princ)) ;_ end of defun;; Command to remove all Metric Scales(defun ScaleListRemMetric (/) (princ   (strcat "\n"    (itoa (DelScaleListMatch "*:*" (GetScaleListEntities)))    " Metric scales deleted."   ) ;_ end of strcat ) ;_ end of princ (princ)) ;_ end of defun;; Command to ensure Imperial scales are present(defun ScaleListImperial (/) (princ (strcat "\n" (itoa (InstallScaleList StdImplScaleList)) " scales added")) (princ)) ;_ end of defun;; Command to ensure ISO scales are present(defun ScaleListMetric (/) (princ (strcat "\n" (itoa (InstallScaleList StdISOScaleList)) " scales added")) (princ)) ;_ end of defun;; Command to remove incorrect scales & ensure standard scales;; in relation to the MEASUREMENT sysvar(defun ScaleListStandard (/) (princ "\nRemoving XREF scales ...") (ScaleListRemXRef);Remove XREF scales (if (= 0 (getvar "MEASUREMENT"))   (progn   (prompt "\nRemoving Metric scales ...")   (ScaleListRemMetric)   (prompt "\nInstalling Standard Imperial scales ...")   (ScaleListImperial)   )   (progn   (prompt "\nRemoving Imperial scales ...")   (ScaleListRemImperial)   (prompt "\nInstalling Standard Metric scales ...")   (ScaleListMetric)   ) ) (princ));; ----------------------------------;; Utility functions               ;; ----------------------------------;; List of standard Imperial scales as per AutoCAD(setq StdImplScaleList      '(("1'-0\" = 1'-0\"" 12.0 . 12.0) ("6\" = 1'-0\"" 6.0 . 12.0) ("3\" = 1'-0\"" 3.0 . 12.0) ("1-1/2\" = 1'-0\"" 1.5 . 12.0) ("1\" = 1'-0\"" 1.0 . 12.0) ("3/4\" = 1'-0\"" 0.75 . 12.0) ("1/2\" = 1'-0\"" 0.5 . 12.0) ("3/8\" = 1'-0\"" 0.375 . 12.0) ("1/4\" = 1'-0\"" 0.25 . 12.0) ("3/16\" = 1'-0\"" 0.1875 . 12.0) ("1/8\" = 1'-0\"" 0.125 . 12.0) ("3/32\" = 1'-0\"" 0.09375 . 12.0) ("1/16\" = 1'-0\"" 0.0625 . 12.0) ("1/32\" = 1'-0\"" 0.03125 . 12.0) ("1/64\" = 1'-0\"" 0.015625 . 12.0) ("1/128\" = 1'-0\"" 0.0078125 . 2.0))) ;_ end of setq;; List of standard ISO scales (from ISO 13567)(setq StdISOScaleList      '(("1:1" 1.0 . 1.0);Scale type A ("1:5" 1.0 . 5.0);Scale type B ("1:10" 1.0 . 10.0);Scale type C ("1:20" 1.0 . 20.0);Scale type D ("1:50" 1.0 . 50.0);Scale type E ("1:100" 1.0 . 100.0);Scale type F ("1:200" 1.0 . 200.0);Scale type G ("1:500" 1.0 . 500.0);Scale type H ("1:1000" 1.0 . 1000.0) ;Scale type I ("1:2000" 1.0 . 2000.0) ;Scale type J ("1:5000" 1.0 . 5000.0) ;Scale type K)) ;_ end of setq;; Function to obtain list of scale entity names(defun GetScaleListEntities (/ lst item) (setq lst nil) (foreach item (dictsearch (namedobjdict) "ACAD_SCALELIST")   (if (= 350 (car item))   (setq lst (cons (cdr item) lst))   ) ;_ end of if ) ;_ end of foreach lst) ;_ end of defun;; Function to obtain list of scale types in current drawing(defun GetScaleList (/ lst lst1 item data) (setq lst(GetScaleListEntities)lst1 nil ) ;_ end of setq (foreach item lst   (setq data (entget item))   (setq lst1 (cons (vl-list* (cdr (assoc 300 data))         (cdr (assoc 140 data))         (cdr (assoc 141 data))      ) ;_ end of vl-list*      lst1       ) ;_ end of cons   ) ;_ end of setq ) ;_ end of foreach ;; Sort the list - most detailed to least (setq lst (vl-sort lst1   '(lambda (s1 s2)      (> (/ (cadr s1) (cddr s1)) (/ (cadr s2) (cddr s2)))    ) ;_ end of lambda ) ;_ end of vl-sort ) ;_ end of setq) ;_ end of defun;; Function to delete scale matching a wildcard name(defun DelScaleListMatch (pattern lst / item data count) (setq count 0) (foreach item lst   (setq data (entget item))   (if (wcmatch (cdr (assoc 300 data)) pattern)   (progn(entdel item)(setq count (1+ count))   ) ;_ end of progn   ) ;_ end of if ) ;_ end of foreach count) ;_ end of defun;; Function to ensure list of scale are installed(defun InstallScaleList (stdlst / lst item cmd) (setq lst (GetScaleList));Get list of scale entity names ;; Remove items from stdlst which is already in the drawing (setq stdlst (vl-remove-if'(lambda (e) (/= nil (assoc (car e) lst)))stdlst       ) ;_ end of vl-remove-if ) ;_ end of setq (setq cmd (getvar "CMDECHO")) (setvar "CMDECHO" 0) (command "._undo" "_Begin") ;; Start scalelist edit if needed (if (> (length stdlst) 0)   (command ".-scalelistedit") ) ;; Step through remainder of stdlst (foreach item stdlst   (command "_Add" (car item) (strcat (rtos (cadr item)) ":" (rtos (cddr item)))) ) ;_ end of foreach ;; End scalelist edit if needed (if (> (length stdlst) 0)   (command "_Exit") ) (command "._undo" "_End") (setvar "CMDECHO" cmd) (length stdlst))(princ);|«Visual LISP© Format Options»(72 2 40 2 T "end of " 60 9 0 0 0 T T nil T);*** DO NOT add text below the comment! ***|;;; The code above is copied from http://forums.augi.com/showthread.php?p=1045033 posted by mgonzales.224492 on 2010-02-11, 02:30 PM(defun AddMeterscales()         (command "-SCALELISTEDIT""ADD" "1:5000 (Meters)" "0.2:1" "Exit")(command "-SCALELISTEDIT""ADD" "1:3000 (Meters)" "0.3333:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:2000 (Meters)" "0.5:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:1000 (Meters)" "1:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:500 (Meters)" "2:1 " "EXIT")(command "-SCALELISTEDIT""ADD" "1:400 (Meters)" "2.5:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:300 (Meters)" "3.333:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:250 (Meters)" "4:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:200 (Meters)" "5:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:150 (Meters)" "6.6666:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:100 (Meters)" "10:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:50 (Meters)" "20:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:25 (Meters)" "40:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:20 (Meters)" "50:1" "EXIT")(command "-SCALELISTEDIT""ADD" "1:5 (Meters)" "200:1" "EXIT"));;===================================================================(defun c:PurgeScales() (initget 1 "Yes No") (setq AddMtr (getkword "Add Standard Meter Scales? (Yes or No) "))(if    (= AddMtr "Yes");If Yes    (progn            (AddMeterscales)            (Exit)    )) (initget 1 "Yes No") (setq RemXRScales (getkword "Remove XRef Scales? (Yes or No) "))(if    (= RemXRScales "Yes");If Yes    (ScaleListRemXRef)) (initget 1 "Yes No") (setq LdImp (getkword "Load Default Imperial Scales? (Yes or No) "))(if    (= LdImp "Yes");If Yes    (Progn            (ScaleListRemMetric)            (ScaleListImperial)    )        (progn;If No                         (initget 1 "Yes No")                         (setq LdMetric (getkword "Load Default Metric Scales? (Yes or No) "))                (if                            (= LdMetric "Yes")                ;If Yes                            (ScaleListRemImperial)                            (ScaleListMetric)                )        );Progn If No          );Ends If );End Function
 
 
 
In the code above, When the scales are reset either to Imperial or Metric, it removes the scales already used by objects.
How do we fix it?
页: [1]
查看完整版本: Adding Scale to scales list -