Jump to content

Recommended Posts

Posted

Hi guys,

 

I want to preview the text before I insert it. I ended up always moving the text after I inserted it. I've look everywhere to no avail. Thank you.

 

(defun C:test (/ e d p)
(setq e (cdr (assoc 2 (entget (car (entsel))))))
(setq d
(cond
  ((= e "p1") "1\"")
  ((= e "p1.5") "1-1\\2\"")
  ((= e "p2") "2\"")
  ;;etc..;;
  (t (princ))
 )
)
(setq p (getpoint "\nPick insertion point"))
 (setq text 
   (entmakex
     (list
       (cons 0 "TEXT")
       (cons 7 "romans")	
       (cons 40 10)
       (cons 8 "TEXT") 
       (cons 10 p)
       (cons 210 '(0. 0. 1.))
       (cons 1 d)
       (cons 41 0.
       (cons 50 0)
         
      )
     
    )
  )
(princ)
)

Posted

You can use grread to move the text around and have it attached to the cursor. However, you'll lose osnaps/orthomode/etc.

Posted

You could always use a temporary block. Not very efficient but could be useful

 

[b][color=BLACK]([/color][/b]defun c:mt [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]setq e [b][color=MAROON]([/color][/b]entget [b][color=GREEN]([/color][/b]car [b][color=BLUE]([/color][/b]entsel[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]progn
       [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"DRAGMODE"[/color] 2[b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setq bn [color=#2f4f4f]"TEMP1"[/color] bc 1[b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] bn[b][color=GREEN])[/color][/b]
              [b][color=GREEN]([/color][/b]setq bn [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"TEMP"[/color] [b][color=RED]([/color][/b]itoa [b][color=PURPLE]([/color][/b]setq bc [b][color=TEAL]([/color][/b]1+ bc[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"BLOCK"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 2 bn[b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 70 0[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 10 e[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"TEXT"[/color][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 1 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 6 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 6 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]6 . [color=#2f4f4f]"BYLAYER"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 7 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 8 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 10 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 11 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 39 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 39 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]39 . 0[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 40 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 41 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 50 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 51 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 62 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 62 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]62 . 256[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 71 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 72 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 73 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 210 e[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nInsert Point: "[/color][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"CMDECHO"[/color] 0[b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]command [color=#2f4f4f]"_.INSERT"[/color] bn pause 1 1 0
                [color=#2f4f4f]"_.EXPLODE"[/color] [b][color=GREEN]([/color][/b]entlast[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
       [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 

You would need to modify it to your needs.

 

-David

Posted

Thank you David but that didn't work for me. Sorry for the misunderstanding. The text to be inserted is based on the name of the the block selected that's why I have a cond function. No worries your efforts will not be useless, I'll add this one to my arsenal of commands.

 

You could always use a temporary block. Not very efficient but could be useful

 

[b][color=BLACK]([/color][/b]defun c:mt [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]setq e [b][color=MAROON]([/color][/b]entget [b][color=GREEN]([/color][/b]car [b][color=BLUE]([/color][/b]entsel[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]progn
       [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"DRAGMODE"[/color] 2[b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setq bn [color=#2f4f4f]"TEMP1"[/color] bc 1[b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]tblsearch [color=#2f4f4f]"BLOCK"[/color] bn[b][color=GREEN])[/color][/b]
              [b][color=GREEN]([/color][/b]setq bn [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"TEMP"[/color] [b][color=RED]([/color][/b]itoa [b][color=PURPLE]([/color][/b]setq bc [b][color=TEAL]([/color][/b]1+ bc[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"BLOCK"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 2 bn[b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]cons 70 0[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 10 e[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"TEXT"[/color][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 1 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 6 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 6 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]6 . [color=#2f4f4f]"BYLAYER"[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 7 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 8 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 10 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 11 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 39 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 39 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]39 . 0[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 40 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 41 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 50 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 51 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]if [b][color=RED]([/color][/b]assoc 62 e[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]assoc 62 e[b][color=RED])[/color][/b] '[b][color=RED]([/color][/b]62 . 256[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 71 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 72 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 73 e[b][color=BLUE])[/color][/b]
                      [b][color=BLUE]([/color][/b]assoc 210 e[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]entmake [b][color=GREEN]([/color][/b]list [b][color=BLUE]([/color][/b]cons 0 [color=#2f4f4f]"ENDBLK"[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]princ [color=#2f4f4f]"\nInsert Point: "[/color][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"CMDECHO"[/color] 0[b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]command [color=#2f4f4f]"_.INSERT"[/color] bn pause 1 1 0
                [color=#2f4f4f]"_.EXPLODE"[/color] [b][color=GREEN]([/color][/b]entlast[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
       [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 

You would need to modify it to your needs.

 

-David

 

 

You got me alan, I know that I need to use grread for this code but I can't really figure out on how to do it. It work's just fine I just need to preview it before inserting.

Do you mind give me another hint?

You can use grread to move the text around and have it attached to the cursor. However, you'll lose osnaps/orthomode/etc.
Posted
Thank you David but that didn't work for me.

 

You would need to modify it to your needs.

 

..........

Posted

Lee, I want to use David's code but I need to purge the drawing each time I ran the command because of the "temp_block" which is inefficient or purge when I finish my drafting session which is not recommended. The temp blocks keeps filling up. I added (command "-PURGE" "_B" "TEMP1" "n") to the code but my system lags.

 

Also I have some lisp which I need to improve using grread with entmake text.

Posted

An other solution:

[color=blue](setq pointIns '(0.0 0.0 0.0))[/color]
(setq text 
   (entmakex
     (list
       (cons 0 "TEXT")
       (cons 7 "romans")
       (cons 40 10)
       (cons 8 "TEXT") 
       (cons 10 [color=#0000ff]pointIns[/color])
       (cons 210 '(0. 0. 1.))
       (cons 1 d)
       (cons 41 0.
       (cons 50 0)
      )))
[color=blue](redraw text 2)   ;hide new entity[/color]
[color=blue](command "_MOVE" text "" pointIns pause)[/color]

 

May want to replace the origin from my example with the insertion point of your source entity to be located in your draw area.

 

Regards,

Mircea

Posted

Mircea.

 

Just a sugestion:

 
(setq text 
   (entmakex
     (list
       (cons 0 "TEXT")
       (cons 7 "romans") 
       (cons 40 10)
       (cons 8 "TEXT") 
       (cons 10 
       [color=blue](setq p (getpoint "\nPick insertion point")))
[/color]        (cons 1 d)
       (cons 41 0.
       (cons 50 0)
         
      )
     
    )
  )

 

then invoke a loop for (command "_move" text "" p) until the user is satisifed with the location.

Posted

Not sure what you mean, whouldn't then be needed to pick more then once to get the final position?

 

Please find below how I have seen the OP's code adjusted:

 

(defun C:test ( / e d assocEnt pointIns )
(if (setq e (car (entsel)))
 (progn
  (setq assocEnt (entget e)
        e        (cdr (assoc 2 assocEnt))
        pointIns (cdr (assoc 10 assocEnt)))
  (setq d (cond
           ((= e "p1") "1\"")
           ((= e "p1.5") "1-1\\2\"")
           ((= e "p2") "2\"")
           ;;etc..;;
           (t nil)
           )
        )
  (if (and d
           (setq text (entmakex
                       (list (cons 0 "TEXT")
                             (cons 7 "romans")
                             (cons 40 10)
                             (cons 8 "TEXT")
                             (cons 10 pointIns)
                             (cons 210 '(0. 0. 1.))
                             (cons 1 d)
                             (cons 41 0.
                             (cons 50 0)
                             )
                       )
                 )
           )
   (progn
    (redraw text 2)                    ;hide new entity
    (command "_MOVE" text "" pointIns pause)
    )
   )
  )
 )
(princ)
)

 

Regards,

Mircea

Posted
Not sure what you mean, whouldn't then be needed to pick more then once to get the final position?

Regards,

Mircea

 

I see, i was thinking more like ....

 

Specify second point or : *picked* "... ooops I dont like it..."

Specify second point or : *picked* "... crap still not good..."

Specify second point or : *picked* "...oh yesss..."

 

One less command (move) in the event the user is not satisfied with the first and subsequent picked locations ;)

Posted

Thanks alan. I've learned a lot on your code. It's exactly what I wanted.

 

Mircea,

You hit the jackpot, works like a charm. Thank you guys for all the help.

Posted

To demonstrate how a block could be used to avoid the rubber-banding of the move command:

 

(defun c:test ( / *error* e l n s v )

   (defun *error* ( msg )
       (if l (mapcar 'setvar v l))
       (if (and n (setq e (tblobjname "BLOCK" n)))
           (vla-delete (vlax-ename->vla-object (cdr (assoc 330 (entget e)))))
       )
       (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
           (princ (strcat "\nError: " msg))
       )
       (princ)
   )
   
   (if
       (and
           (setq e (car (entsel)))
           (eq "INSERT" (cdr (assoc 0 (setq e (entget e)))))
           (setq e (strcase (cdr (assoc 2 e))))
       )
       (progn
           (setq s
               (cond
                   (   (eq e "P1")   "1\"")
                   (   (eq e "P1.5") "1-1\\2\"")
                   (   (eq e "P2")   "2\"")
                   (   "N/A"   )
               )
           )

           (setq n 0)
           (while (tblsearch "BLOCK" (itoa (setq n (1+ n)))))
           (setq n (itoa n))

           (entmake
               (list
                  '(0 . "BLOCK")
                  '(8 . "0")
                   (cons 2 n)
                  '(70 . 0)
                  '(10 0.0 0.0 0.0)
               )
           )
           (entmake
               (list
                  '(0 . "TEXT")
                   (cons 7 (if (tblsearch "STYLE" "romans") "romans" "Standard"))
                  '(40 . 10.0)
                  '(8 . "TEXT")
                  '(10 0.0 0.0 0.0)
                   (cons 1 s)
                  '(41 . 0.
               )
           )
           (entmake '((0 . "ENDBLK")))

           (setq v '(CMDECHO QAFLAGS)
                 l  (mapcar 'getvar v)
                 e  (entlast)
           )
           (mapcar 'setvar v '(0 1))
           (princ "\nPosition Text: ")
           (command "_.-insert" n "_S" 1.0 "_R" 0.0 pause)
           (if (not (equal e (setq e (entlast))))
               (command "_.explode" e "")
           )
           (mapcar 'setvar v l)
           (vla-delete (vlax-ename->vla-object (cdr (assoc 330 (entget (tblobjname "BLOCK" n))))))
       )
   )
   (princ)
)
(vl-load-com) (princ)

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...