Jump to content

This code for a simple text label used to work. Ideas?


Recommended Posts

Posted

I just can't seem to get these 3 text items not to be one on top of the other:x

I have taken this base file and tried to do something more elaborate with it and it is having the same problem, but this code hasn't been modified since 1/20 so I wonder if it is a system variable or something. Even back in January, every once in a while, one piece of the 3 text objects would be off doing its own thing in the vicinity of the others or at a vertex of a polyline. I'm confused.

 

 
;adapted from code from Jeffery P. Sanders
(defun C:GA()
 ;turn the system echo off
 (setvar "cmdecho" 0)
 ;UNITS AND PRECISION
 (setvar "LUPREC" 0)
 (setvar "LUNITS" 2)
 (setvar "mtextcolumn" 0)
 ;layer settings
(if
(not
(tblsearch "layer" "A-FLOOR-IDEN")
)
(command "-layer" "m" "A-FLOOR-IDEN" "C" "GREEN" "A-FLOOR-IDEN" "")
(
)
)

(if
(not
(tblsearch "layer" "A-ANNO-NOTE")
)
(command "-layer" "m" "A-ANNO-NOTE" "C" "8" "A-ANNO-NOTE" "")
(
)
)

(if
(not
(tblsearch "layer" "A-AREA-IDEN")
)
(command "-layer" "m" "A-AREA-IDEN" "C" "YELLOW" "A-AREA-IDEN" "")
(
)
)

 ;set up a variable to hold the area
 (while T
   (setq myArea 0)
 (setq SpaceType 0)

 ;select one object
 
 (setq ent(entsel))

 (if (car ent)
   (progn
     ;find the area of the polyline
     (command "area" "Object" (car ent))
     (setq x (getvar "Area"))
      
     (if(setq pt1(getpoint "\n Insertion Point: "))
       (progn

(SETVAR "CLAYER" "A-FLOOR-IDEN") ;SETS AREA in Square foot TEXT LAYER CLAYER VARIABLE TO A-FLOOR-IDEN
(command "mtext" pt1 "@6,0" (strcat (rtos x 2 2) " sq ft")"")
  
(SETVAR "CLAYER" "A-ANNO-NOTE") ;SETS OFFICE TYPE TEXT LAYER CLAYER VARIABLE TO A-ANNO-NOTE
(setq SpaceType(getstring T "\n Enter Space Type "))
 
(command "mtext" (polar pt1 (* pi 1.5) (* 1.5 (getvar "textsize")))
 "@6,0" (strcat SpaceType)"")
(SETVAR "CLAYER" "A-AREA-IDEN") ;SETS OFFICE TYPE TEXT LAYER CLAYER VARIABLE TO A-AREA-IDEN
(setq n (+ n 1))
(command "mtext" (polar pt1 (* pi 1.5) (* -1.5 (getvar "textsize")))
 "@6,0" (strcat (rtos n 2 0))"")
         )
       )           ;close the if progn for point selection
     )             ;close the if
   )               ;close the if progn for object selection
   ;close the if progn for space type
  ;close the if progn for room #

 )  ;close the if statement
) ; ends repeat

 ;reset the system echo variable
 (setvar "cmdecho" 1)
   
 ;supress the last echo
 (princ)

Posted (edited)

Hi Utah_Indie,

 

A few points about your code:

 

 

  • I wouldn't rely on using the AREA System Variable to retrieve the area of objects, but would instead recommend either using the ActiveX Area property, or the GetArea Curve function as demonstrated by my code below.

 

  • There is no need to use 'strcat' when you aren't concatenating strings.

 

  • Command calls to MText will be affected by ObjectSnap - this might explain the problems you were encountering.

Here is my example:

[color=RED]([/color][color=BLUE]defun[/color] c:test [color=RED]([/color] [color=BLUE]/[/color] _Layer _MText a e i p s [color=RED])[/color]
              
 [color=#990099];;----------------------------------------------;;[/color]
 [color=#990099];;  Example © Lee Mac 2011  -  www.lee-mac.com  ;;[/color]
 [color=#990099];;----------------------------------------------;;[/color]

 [color=RED]([/color][color=BLUE]defun[/color] _Layer [color=RED]([/color] n c [color=RED])[/color]
   [color=RED]([/color][color=BLUE]entmake[/color]
     [color=RED]([/color][color=BLUE]list[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"LAYER"[/color][color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbSymbolTableRecord"[/color][color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbLayerTableRecord"[/color][color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]2[/color]  n[color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]62[/color] c[color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]70[/color] [color=#009900]0[/color][color=RED])[/color]
     [color=RED])[/color]
   [color=RED])[/color]
 [color=RED])[/color]

 [color=RED]([/color][color=BLUE]defun[/color] _MText [color=RED]([/color] p s l [color=RED])[/color]
   [color=RED]([/color][color=BLUE]entmakex[/color]
     [color=RED]([/color][color=BLUE]list[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"MTEXT"[/color][color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbEntity"[/color][color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]100[/color] [color=#a52a2a]"AcDbMText"[/color][color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]8[/color] l[color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]10[/color] [color=RED]([/color][color=BLUE]trans[/color] p [color=#009900]1[/color] [color=#009900]0[/color][color=RED]))[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]11[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=DARKRED]'[/color]UCSXDIR[color=RED]))[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]1[/color] s[color=RED])[/color]
       [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]210[/color] [color=RED]([/color][color=BLUE]trans[/color] [color=DARKRED]'[/color][color=RED]([/color][color=#009999]0.[/color] [color=#009999]0.[/color] [color=#009999]1.[/color][color=RED])[/color] [color=#009900]1[/color] [color=#009900]0[/color] [color=BLUE]t[/color][color=RED]))[/color]
     [color=RED])[/color]
   [color=RED])[/color]
 [color=RED])[/color]

 [color=RED]([/color][color=BLUE]setq[/color] i [color=#009900]0[/color][color=RED])[/color]

 [color=RED]([/color][color=BLUE]foreach[/color] x [color=DARKRED]'[/color][color=RED](([/color][color=#a52a2a]"A-FLOOR-IDEN"[/color] [color=#009900]3[/color][color=RED])[/color] [color=RED]([/color][color=#a52a2a]"A-ANNO-NOTE"[/color] [color=#009900]8[/color][color=RED])[/color] [color=RED]([/color][color=#a52a2a]"A-AREA-IDEN"[/color] [color=#009900]2[/color][color=RED]))[/color]
   [color=RED]([/color][color=BLUE]or[/color] [color=RED]([/color][color=BLUE]tblsearch[/color] [color=#a52a2a]"LAYER"[/color] [color=RED]([/color][color=BLUE]car[/color] x[color=RED]))[/color] [color=RED]([/color][color=BLUE]apply[/color] [color=DARKRED]'[/color]_Layer x[color=RED]))[/color]
 [color=RED])[/color]    

 [color=RED]([/color][color=BLUE]while[/color]
   [color=RED]([/color][color=BLUE]and[/color]
     [color=RED]([/color][color=BLUE]setq[/color] e
       [color=RED]([/color][color=BLUE]ssget[/color] [color=#a52a2a]"_+.:E:S"[/color]
         [color=RED]([/color][color=BLUE]list[/color] [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"CIRCLE,ELLIPSE,*POLYLINE,SPLINE"[/color][color=RED])[/color]
           [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"<NOT"[/color][color=RED])[/color]
             [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"<AND"[/color][color=RED])[/color]
               [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]0[/color] [color=#a52a2a]"POLYLINE"[/color][color=RED])[/color]
               [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"<OR"[/color][color=RED])[/color]
                 [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"&="[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]70[/color] [color=#009900]16[/color][color=RED])[/color]
                 [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"&="[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]70[/color] [color=#009900]64[/color][color=RED])[/color]
               [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"OR>"[/color][color=RED])[/color]
             [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"AND>"[/color][color=RED])[/color]
           [color=RED]([/color][color=BLUE]cons[/color] [color=#009900]-4[/color] [color=#a52a2a]"NOT>"[/color][color=RED])[/color]
         [color=RED])[/color]
       [color=RED])[/color]
     [color=RED])[/color]
     [color=RED]([/color][color=BLUE]setq[/color] a [color=RED]([/color][color=BLUE]vlax-curve-getArea[/color] [color=RED]([/color][color=BLUE]ssname[/color] e [color=#009900]0[/color][color=RED])))[/color]
     [color=RED]([/color][color=BLUE]setq[/color] *stype*
       [color=RED]([/color][color=BLUE]cond[/color]
         [color=RED]([/color]
           [color=RED]([/color][color=BLUE]eq[/color] [color=#a52a2a]""[/color]
             [color=RED]([/color][color=BLUE]setq[/color] s
               [color=RED]([/color][color=BLUE]getstring[/color] [color=BLUE]t[/color]
                 [color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]"\nEnter Space Type"[/color]
                   [color=RED]([/color][color=BLUE]if[/color] *stype* [color=RED]([/color][color=BLUE]strcat[/color] [color=#a52a2a]" <"[/color] *stype* [color=#a52a2a]">: "[/color][color=RED])[/color] [color=#a52a2a]": "[/color][color=RED])[/color]
                 [color=RED])[/color]
               [color=RED])[/color]
             [color=RED])[/color]
           [color=RED])[/color]
           *stype*
         [color=RED])[/color]
         [color=RED]([/color] s [color=RED])[/color]
       [color=RED])[/color]
     [color=RED])[/color]
     [color=RED]([/color][color=BLUE]setq[/color] p [color=RED]([/color][color=BLUE]getpoint[/color] [color=#a52a2a]"\nSpecify Insertion Point: "[/color][color=RED]))[/color]
   [color=RED])[/color]
   [color=RED]([/color]_MText p [color=RED]([/color][color=BLUE]strcat[/color] [color=RED]([/color][color=BLUE]rtos[/color] a [color=#009900]2[/color] [color=#009900]2[/color][color=RED])[/color] [color=#a52a2a]" sq ft"[/color][color=RED])[/color] [color=#a52a2a]"A-FLOOR-IDEN"[/color][color=RED])[/color]
   [color=RED]([/color]_MText [color=RED]([/color][color=BLUE]polar[/color] p [color=RED]([/color][color=BLUE]/[/color] [color=RED]([/color][color=BLUE]*[/color] [color=#009999]3.[/color] [color=BLUE]pi[/color][color=RED])[/color] [color=#009999]2.[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]*[/color] [color=#009999]1.5[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=DARKRED]'[/color]TEXTSIZE[color=RED])))[/color] *stype* [color=#a52a2a]"A-ANNO-NOTE"[/color][color=RED])[/color]
   [color=RED]([/color]_MText [color=RED]([/color][color=BLUE]polar[/color] p [color=RED]([/color][color=BLUE]/[/color] [color=BLUE]pi[/color] [color=#009999]2.[/color][color=RED])[/color] [color=RED]([/color][color=BLUE]*[/color] [color=#009999]1.5[/color] [color=RED]([/color][color=BLUE]getvar[/color] [color=DARKRED]'[/color]TEXTSIZE[color=RED])))[/color] [color=RED]([/color][color=BLUE]itoa[/color] [color=RED]([/color][color=BLUE]setq[/color] i [color=RED]([/color][color=BLUE]1+[/color] i[color=RED])))[/color] [color=#a52a2a]"A-AREA-IDEN"[/color][color=RED])[/color]
 [color=RED])[/color]

 [color=RED]([/color][color=BLUE]princ[/color][color=RED])[/color]
[color=RED])[/color]
[color=red]([/color][color=blue]vl-load-com[/color][color=red])[/color]

Edited by Lee Mac
Posted

Lee, thank you so much. There are some new commands in there and definitely some top notch tutoring. Can I load this in the visual Lisp module? If I do so it is not recognizing vlax-curve-getArea or _Mtext as commands. Some more tutoring needed evidently, so thanks again.

Randy

Posted

Hi Randy,

 

You're very welcome - happy to help.

 

When loading the code in the Visual LISP Editor (or indeed, when using the code), be sure that

 

(vl-load-com)

has been called once during the session to load the Visual LISP functions (I should probably have added that to the code, except I have it in my ACADDOC.lsp so don't notice when it is omitted). Also, note that '_MText' will not be shown as a function, since it is a user-defined subfunction :)

 

Lee

 

EDIT: Added (vl-load-com) to the code.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...