Author Topic: Help with a lisp  (Read 1431 times)

0 Members and 1 Guest are viewing this topic.

PM

  • Guest
Help with a lisp
« on: November 05, 2020, 10:01:33 AM »
Hi i am using  ronjonp and CAB code from this post https://www.theswamp.org/index.php?topic=13982.0. This leabel lines and polylines with the layer name. I want to do a changes in the code.

I use annotation text so i create a text style for annotation text .
Code: [Select]
(command "_.-style" "_MY STYLE" "arial.ttf" "_annotative" "_yes" "_no" 2.5 1.0 0.0 "_no" "_no" "_no")I want the text size in model space : for scale 1:200 m  be 0.50 for 1:500m  be 2.5 etc For all scales in layout must be 2.5
But in the code in this line

Code: [Select]
(if (zerop (setq txtht (getvar 'textsize)))
          (setq txtht 5)

set the text size to 5. i don't know how to change it


Code: [Select]
(defun rjp-addtext (ins hgt text ang / doc x)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (setq txtObj (vla-addtext
                 (if (= (getvar 'cvport) 1)
                   (vla-get-paperspace doc)
                   (vla-get-modelspace doc)
                 )
                 text
                 (vlax-3d-point ins)
                 hgt
               )
  )
  (vla-put-rotation txtObj ang)
  (vla-put-alignment txtObj acalignmentbottomcenter)
  (vla-put-textalignmentpoint txtobj (vlax-3d-point ins))
)


(defun c:x (/ index ss obj lyr ept spt mpt txtht)
(COMMAND "_layer" "_m" "_LAYER TEXT" "_c" "7" "" "")
(command "_.-style" "_MY STYLE" "arial.ttf" "_annotative" "_yes" "_no" 2.5 1.0 0.0 "_no" "_no" "_no")
  (setq index -1)
  ;;(if (setq ss (ssget "x" '((0 . "LINE"))))
  (if (setq ss (ssget '((0 . "LINE"))))
    (progn
      (while (< (setq index (1+ index)) (sslength ss))
        (setq obj (vlax-ename->vla-object (ssname ss index))
              lyr (vla-get-layer obj)
              ept (vlax-get obj 'endpoint)
              spt (vlax-get obj 'startpoint)
              ang (angle spt ept)
              mpt (polar ept (angle ept spt) (/ (distance ept spt) 2.0))
        )
        (if (and (> ang (* 0.5 pi)) (< ang (* 1.5 pi)))
          (setq ang (+ ang pi))
        )
        (setq mpt (polar mpt (+ ang (/ pi 2.0)) (* (getvar 'dimscale) (getvar 'dimgap))))
        (if (zerop (setq txtht (getvar 'textsize)))
          (setq txtht 5) ; this must change in model space : for scale 1:200 m must be 0.50 for 1:500m must be 2.5 etc For all scales in layout must be 2.5
        )
        (rjp-addtext mpt txtht lyr ang)
      )
    )
  )
  (princ)
)

Thanks
« Last Edit: November 05, 2020, 01:10:24 PM by PM »

PM

  • Guest
Re: Help with a lisp
« Reply #1 on: November 05, 2020, 01:03:53 PM »
Any ideas?

PM

  • Guest
Re: Help with a lisp
« Reply #2 on: November 05, 2020, 01:20:28 PM »
Ok .I fix it
« Last Edit: November 06, 2020, 10:37:39 AM by PM »

PM

  • Guest
Re: Help with a lisp
« Reply #3 on: November 06, 2020, 10:40:11 AM »
I have the same problem
for scale 1:200 m must be 0.50 for 1:500m must be 1.25 etc For all scales in layout must be 2.5

Is not working correct with the scales

Code - Auto/Visual Lisp: [Select]
  1. (defun rjp-addtext (ins hgt text ang / doc x)
  2.   (setq txtObj (vla-addtext
  3.                  (if (= (getvar 'cvport) 1)
  4.                    (vla-get-paperspace doc)
  5.                    (vla-get-modelspace doc)
  6.                  )
  7.                  text
  8.                  (vlax-3d-point ins)
  9.                  hgt
  10.                )
  11.   )
  12.   (vla-put-rotation txtObj ang)
  13.   (vla-put-alignment txtObj acalignmentbottomcenter)
  14. )
  15.  
  16.  
  17. (defun c:x (/ index ss obj lyr ept spt mpt txtht)
  18. (COMMAND "_layer" "_m" "_LAYER TEXT" "_c" "7" "" "")
  19. (command "_.-style" "_MY STYLE" "arial.ttf" "_annotative" "_yes" "_no" 2.5 1.0 0.0 "_no" "_no" "_no")
  20.   (setq index -1)
  21.   ;;(if (setq ss (ssget "x" '((0 . "LINE"))))
  22.   (if (setq ss (ssget '((0 . "LINE"))))
  23.     (progn
  24.       (while (< (setq index (1+ index)) (sslength ss))
  25.         (setq obj (vlax-ename->vla-object (ssname ss index))
  26.               lyr (vla-get-layer obj)
  27.               ept (vlax-get obj 'endpoint)
  28.               spt (vlax-get obj 'startpoint)
  29.               ang (angle spt ept)
  30.               mpt (polar ept (angle ept spt) (/ (distance ept spt) 2.0))
  31.         )
  32.         (if (and (> ang (* 0.5 pi)) (< ang (* 1.5 pi)))
  33.           (setq ang (+ ang pi))
  34.         )
  35.         (setq mpt (polar mpt (+ ang (/ pi 2.0)) (* (getvar 'dimscale) (getvar 'dimgap))))
  36.         (if (zerop (setq txtht (getvar 'textsize)))
  37.           (setq txtht 5) ; this must change in model space : for scale 1:200 m must be 0.50 for 1:500m must be 1.25 etc For all scales in layout must be 2.5
  38.         )
  39.         (rjp-addtext mpt txtht lyr ang)
  40.       )
  41.     )
  42.   )
  43. (mapcar 'setvar '(clayer cecolor celtype celweight) (list "0" "BYLAYER" "BYLAYER" -1))
  44.   (princ)
  45. )
  46.  
  47.  

Can anyone Help ?

Thanks

PM

  • Guest
Re: Help with a lisp
« Reply #4 on: November 06, 2020, 01:05:06 PM »
Any option?

JohnK

  • Administrator
  • Seagull
  • Posts: 10648
Re: Help with a lisp
« Reply #5 on: November 07, 2020, 10:59:08 PM »
If I remember correctly (I haven't used AutoCAD or programmed in AutoLisp in years), you need to get the proper annotative scale factor. CANNOSCALEVALUE should get you started but you will have to adjust my formula because I just made up the 0.05 number.

Code - Auto/Visual Lisp: [Select]
  1. (setq curScale (* (/ (getvar 'CANNOSCALEVALUE) 1) 0.05))
TheSwamp.org (serving the CAD community since 2003)
Member location map - Add yourself

Donate to TheSwamp.org