Author Topic: LISP to Change linetype scale for enity in blocks & nested blocks  (Read 3138 times)

0 Members and 1 Guest are viewing this topic.

vernonlee

  • Guest
This LISP was written by LEE MAC to help me change all linetype scale for enity in blocks & nested blocks.

This LISP will affect the whole drawing.

Can someone help me to incorporate a selection options (window & picking) for this LISP?

Code: [Select]
(defun c:lts ( / doc scl )
    (initget 6)
    (if (setq scl (getreal "\nSpecify new linetype scale: "))
        (vlax-for blk (vla-get-blocks (setq doc (vla-get-activedocument (vlax-get-acad-object))))
            (if (= :vlax-false (vla-get-isxref blk))
                (vlax-for obj blk
                    (if (and (vlax-write-enabled-p obj) (vlax-property-available-p obj 'linetypescale t))
                        (vla-put-linetypescale obj scl)
                    )
                )
            )
        )
    )
    (vla-regen doc acallviewports)
    (princ)
)

« Last Edit: March 02, 2016, 05:44:04 PM by vernonlee »

Lee Mac

  • Seagull
  • Posts: 12923
  • London, England
Re: LISP to Change linetype scale for enity in blocks & nested blocks
« Reply #1 on: March 02, 2016, 06:08:03 PM »
Try the following:
Code - Auto/Visual Lisp: [Select]
  1. (defun c:lts ( / lts:processed idx scl sel )
  2.     (initget 6)
  3.     (if (setq scl (getreal "\nSpecify new linetype scale: "))
  4.         (if (setq sel (ssget "_:L"))
  5.             (repeat (setq idx (sslength sel))
  6.                 (lts:obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))) scl)
  7.             )
  8.         )
  9.     )
  10.     (vla-regen lts:acdoc acallviewports)
  11.     (princ)
  12. )
  13. (defun lts:blk ( obj scl / bln )
  14.     (if (not (member (setq bln (vla-get-name obj)) lts:processed))
  15.         (progn
  16.             (vlax-map-collection (vla-item lts:acblk bln) '(lambda ( obj ) (lts:obj obj scl)))
  17.             (setq lts:processed (cons bln lts:processed))
  18.         )
  19.     )
  20. )
  21. (defun lts:obj ( obj scl )
  22.     (if (and (vlax-write-enabled-p obj) (vlax-property-available-p obj 'linetypescale t))
  23.         (vla-put-linetypescale obj scl)
  24.     )
  25.     (if (= "AcDbBlockReference" (vla-get-objectname obj))
  26.         (lts:blk obj scl)
  27.     )
  28. )
  29.       lts:acblk (vla-get-blocks lts:acdoc)
  30. )

vernonlee

  • Guest
Re: LISP to Change linetype scale for enity in blocks & nested blocks
« Reply #2 on: March 03, 2016, 12:26:02 AM »
Thanks Lee. It works flawlessly as usual.  :smitten:

Try the following:
Code - Auto/Visual Lisp: [Select]
  1. (defun c:lts ( / lts:processed idx scl sel )
  2.     (initget 6)
  3.     (if (setq scl (getreal "\nSpecify new linetype scale: "))
  4.         (if (setq sel (ssget "_:L"))
  5.             (repeat (setq idx (sslength sel))
  6.                 (lts:obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))) scl)
  7.             )
  8.         )
  9.     )
  10.     (vla-regen lts:acdoc acallviewports)
  11.     (princ)
  12. )
  13. (defun lts:blk ( obj scl / bln )
  14.     (if (not (member (setq bln (vla-get-name obj)) lts:processed))
  15.         (progn
  16.             (vlax-map-collection (vla-item lts:acblk bln) '(lambda ( obj ) (lts:obj obj scl)))
  17.             (setq lts:processed (cons bln lts:processed))
  18.         )
  19.     )
  20. )
  21. (defun lts:obj ( obj scl )
  22.     (if (and (vlax-write-enabled-p obj) (vlax-property-available-p obj 'linetypescale t))
  23.         (vla-put-linetypescale obj scl)
  24.     )
  25.     (if (= "AcDbBlockReference" (vla-get-objectname obj))
  26.         (lts:blk obj scl)
  27.     )
  28. )
  29.       lts:acblk (vla-get-blocks lts:acdoc)
  30. )

Lee Mac

  • Seagull
  • Posts: 12923
  • London, England
Re: LISP to Change linetype scale for enity in blocks & nested blocks
« Reply #3 on: March 03, 2016, 08:51:07 AM »
You're welcome.  :-)