Author Topic: fill scalebar tags  (Read 12515 times)

0 Members and 1 Guest are viewing this topic.

pedroantonio

  • Guest
fill scalebar tags
« on: November 01, 2014, 12:02:28 PM »
Hi ,I use an attribiute scalebar for my drawings.Is it possible to scale it and fill the tags automaticaly ?

to set the scale for all my blocks i use this code

Code - Auto/Visual Lisp: [Select]
  1. ( DEFUN C:SETSC ()
  2.     (SETQ CURSC (getvar "useri1" ))
  3.     (princ "the scale is 1:")(princ cursc)
  4.     (setq newsc (getint "\nNew scale  1:"))
  5.     (setvar "useri1" newsc)
  6.       (setq a1 (getvar "useri1"))
  7.     ; (setvar "ltscale" (* a1 0.005))
  8.     (princ "\n The scale is  1:")(princ newsc)(princ)
  9. )
  10.  

for the insert and scale i use this lisp code
Code - Auto/Visual Lisp: [Select]
  1. (Defun c:mscale()
  2. ;scalebar
  3. (COMMAND "_layer" "_m" "scale" "_c" "7" "" "")
  4. (setq scl (getvar "useri1"))
  5.  (setq scl1 (* scl 1))
  6.  (setq dt1 (getpoint "\n insert scale bar (scale bar):"))
  7.  (command "insert" "mscale" dt1 scl1 scl1 "0")
  8. )
  9.  

Any ideas  ?

Thanks

ronjonp

  • Needs a day job
  • Posts: 7527

Windows 11 x64 - AutoCAD /C3D 2023

Custom Build PC

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #2 on: November 02, 2014, 02:20:50 AM »
D1 = scale/50
D0 = 0
D2 = scale/100
D3 = scale/50
D4 = (scale/50) X 2
D5 = (scale/50) X 3
D6 =(scale/50) X 4
D7 =scale/10
SCALE = scale

Any other ideas ?

roy_043

  • Water Moccasin
  • Posts: 1895
  • BricsCAD 18
Re: fill scalebar tags
« Reply #3 on: November 03, 2014, 04:32:44 AM »
Have you changed ATTREQ to 0? If so, Why?

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #4 on: November 03, 2014, 05:42:21 AM »
hi roy_043
Quote
Have you changed ATTREQ to 0? If so, Why?

I can not understand your question !! What do you mean with  ATTREQ to 0

if you are talking abour D0  always must be 0

Tharwat

  • Swamp Rat
  • Posts: 710
  • Hypersensitive
Re: fill scalebar tags
« Reply #5 on: November 03, 2014, 07:02:30 AM »

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #6 on: November 03, 2014, 09:28:00 AM »
Ok i understand

I change my code to this

Code: [Select]
(Defun c:mscale()
;scalebar
(COMMAND "_layer" "_m" "scale" "_c" "7" "" "")
(setq scl (getvar "useri1"))
 (setq scl1 (* scl 1))
 (setq dt1 (getpoint "\n insert scale bar (scale bar):"))
 (command "insert" "mscale" dt1 scl1 scl1 "1")
)

I want to ask two things

1) I have a rotation problem after insert the block (look the test1.dwg)
2) is it possible to fill all tags automatically through lisp

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #7 on: November 03, 2014, 09:33:13 AM »
with  the previeows code i don't have rotation problems !!! and i see no diferense

Code: [Select]
(Defun c:mscale()
;scalebar
(COMMAND "_layer" "_m" "scale" "_c" "7" "" "")
(setq scl (getvar "useri1"))
 (setq scl1 (* scl 1))
 (setq dt1 (getpoint "\n insert scale bar (scale bar):"))
 (command "insert" "mscale" dt1 scl1 scl1 "0")
)
 
« Last Edit: November 03, 2014, 09:48:38 AM by Topographer »

ronjonp

  • Needs a day job
  • Posts: 7527
Re: fill scalebar tags
« Reply #8 on: November 03, 2014, 09:48:22 AM »
Try this block.
« Last Edit: November 03, 2014, 10:01:46 AM by ronjonp »

Windows 11 x64 - AutoCAD /C3D 2023

Custom Build PC

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #9 on: November 03, 2014, 09:51:29 AM »
can you save it as autocad 2010 ?

Thanks

roy_043

  • Water Moccasin
  • Posts: 1895
  • BricsCAD 18
Re: fill scalebar tags
« Reply #10 on: November 03, 2014, 10:06:16 AM »
OK, I am out.

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #11 on: November 03, 2014, 04:35:59 PM »
 is it possible to fill all tags automatically through lisp?

ronjonp

  • Needs a day job
  • Posts: 7527
Re: fill scalebar tags
« Reply #12 on: November 03, 2014, 04:57:16 PM »

Code - Auto/Visual Lisp: [Select]
  1. (defun c:mscale (/ b p scl)               ;scalebar
  2.   (if (and (setq scl (getint "\nEnter scale to use: "))
  3.            (setq p (getpoint "\n insert scale bar (scale bar):"))
  4.       )
  5.     (progn (command "_layer" "_m" "scale" "_c" "7" "" "")
  6.            (setvar 'attreq 0)
  7.            (command "insert" "mscale" p scl scl "0")
  8.            (setq b (vlax-ename->vla-object (entlast)))
  9.            ;; http://www.lee-mac.com/attributefunctions.html#vlsetattributevalue
  10.            ;; Apply the function LM:vl-setattributevalue to appropriate tags in block 'B'
  11.            (setvar 'attreq 1)
  12.     )
  13.   )
  14.   (princ)
  15. )

OK, I am out.
X2
« Last Edit: November 04, 2014, 09:08:34 AM by ronjonp »

Windows 11 x64 - AutoCAD /C3D 2023

Custom Build PC

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #13 on: November 03, 2014, 05:43:20 PM »
You mean this ?

Code: [Select]
;; Set Attribute Value  -  Lee Mac
;; Sets the value of the first attribute with the given tag found within the block, if present.
;; blk - [vla] VLA Block Reference Object
;; tag - [str] Attribute TagString
;; val - [str] Attribute Value
;; Returns: [str] Attribute value if successful, else nil.

(defun LM:vl-setattributevalue ( blk tag val )
    (setq tag (strcase tag))
    (vl-some
       '(lambda ( att )
            (if (= tag (strcase (vla-get-tagstring att)))
                (progn (vla-put-textstring att val) val)
            )
        )
        (vlax-invoke blk 'getattributes)
    )
)

pedroantonio

  • Guest
Re: fill scalebar tags
« Reply #14 on: November 04, 2014, 04:19:38 AM »
I try this but something is going wrong !!!  :-o

Code - Auto/Visual Lisp: [Select]
  1. (Defun c:test()
  2. ;scalebar
  3. (COMMAND "_layer" "_m" "scale" "_c" "7" "" "")
  4. (setq scl (getvar "useri1"))
  5.  (setq scl1 (* scl 1))
  6.   (setq scale (vla-get-customscale (vlax-ename->vla-object ent)))
  7.   (setq scale (strcat scl1))
  8.   (setq d1 (strcat (rtos (/ 50 scl1) 2 2)))
  9.   (setq d2 (strcat (rtos (/ 100 scl1) 2 2)))
  10.   (setq d3 (strcat (rtos (/ 50 scl1) 2 2) "m"))
  11.   (setq d4 (strcat (rtos (* 2 (/ 50 scl1)) 2 2)))
  12.   (setq d5 (strcat (rtos (* 3 (/ 50 scl1)) 2 2)))
  13.   (setq d6 (strcat (rtos (/ 10 scl1) 2 2)))
  14.  (setq dt1 (getpoint "\n insert scale bar (scale bar):"))
  15.  (command "insert" "test" dt1 scl1 scl1  d1 d2 d3 d4 d5 d6 d7 "0")
  16. )
  17.  

Can anyone help?

Thanks