Jump to content

Requesting help on modifying a LISP routine...


Recommended Posts

Posted

BTW here is the program in its entirety, (with the correct command line call at the end of the file)

 

;;; ------------------------------------------------------------------------
;;;    TEXTLEADER.LSP Version 1.2
;;;
;;;    Copyright© August, 2007
;;;    Timothy G. Spangler
;;;
;;;    Permission to use, copy, modify, and distribute this software
;;;    for any purpose and without fee is hereby granted, provided
;;;    that the above copyright notice appears in all copies and
;;;    that both that copyright notice and the limited warranty and
;;;    restricted rights notice below appear in all supporting
;;;    documentation.
;;;
;;;    Add leader to text (Non Associating Leader).
;;;
;;; ------------------------------------------------------------------------
(defun C:TL (/) (C:TEXTLEADER)); Program Shortcut

;;; MAIN FUNCTION ;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:TEXTLEADER (/ *error* OldCmdecho OldOsmode OldOrthoMode OldClayer ExludeList)
 
;; Set Env
(TEXT_LEADER_SET_ENV)

;;; Error Handling Routine ;;;
(defun *error* (MSG)
	(if(not(member MSG '("Function cancelled" "quit / exit abort")))
		(princ (strcat "\n*** Program Error: " (strcase MSG) " ***"))
		(princ "\n... Program Cancelled ...")
	)
	(while (< 0 (getvar "CMDACTIVE"))
		(command)
	)
	(TEXT_LEADER_RESET_ENV)
	(princ)
)
;; Main Code
(TEXT_LEADER_RUN)
)
;;; ------------ Begin Main Routine
(defun TEXT_LEADER_RUN (/ TextEnt TextEntList TextLayer DtextBox DtextEntList TextRotate MtextLine 
DtextInsPoint TempPoint LeaderEnd) 

;; Get text object from selection
(while (null (setq TextEnt (entsel "\n Select Top or Bottom Line of Text: ")))
	(princ "\n Nothing Selected...")
)
;; Get entity list from text
(setq TextEntList (entget (car TextEnt)))
;; Get text layer
(setq TextLayer (cdr(assoc 8 TextEntList)))
;; Set layer to text layer
(setvar "CLAYER" TextLayer)
;; If selected text is "TEXT"
(if (= (cdr (assoc 0 TextEntList)) "TEXT")
  (progn
    (setq DtextBox (textbox (entget (car TextEnt))))
    (setq DtextEntList (entget (car TextEnt)))
		(setq TextRotate (cdr(assoc 50 DtextEntList)))
  )
)
;; If selected text is "MTEXT"
(if (= (cdr (assoc 0 TextEntList)) "MTEXT")
  (progn
    (command "explode" TextEnt)
    (setq MtextLine (ssget (cadr TextEnt)))
    (setq DtextEntList (entget (ssname MtextLine 0)))
    (setq DtextBox (textbox (entget (ssname MtextLine 0))))
    (setq TextRotate (cdr(assoc 50 DtextEntList)))
		(command "u")
  )
)
;; If selected entity is not "TEXT" or "MTEXT"
(if (member (cdr (assoc 0 TextEntList)) ExludeList)
  (progn
		(alert "Selected entity is not TEXT or MTEXT")
		(TEXT_LEADER_RUN)
	)
)
;; Get insertion point of text
(setq DtextInsPoint (cdr (assoc 10 DtextEntList)))
;; Check the rotation of the text
(cond
	((equal TextRotate 1.5708 0.0001)
		;; Get center point of textbox (from 0,0)
		(setq	TempPoint
			(list
				(/ (+ (cadar DtextBox)(cadadr DtextBox)) 2.0)
				(/ (+ (caadr DtextBox)(caar DtextBox)) 2.0)
				(cadddr (assoc 10 DtextEntList))
			)
		)
		;; Get the center point of the selected text object
		(setq	InsertPoint
			(list 
				(- (car DtextInsPoint)(car TempPoint))
				(+ (cadr DtextInsPoint)(cadr TempPoint))
				(+ (caddr DtextInsPoint)(caddr TempPoint))
			)
		)
		;; Set the leader end point
		(setq	LeaderEnd
			(+ (/ (- (caadr DtextBox) (caar DtextBox)) 2.0)
		    (* 0.0625 (getvar "dimscale"))		;CHANGE THIS TO CHANGE GAT BETWEEN TEXT AND LEADER
		 )
		)
		;; Prompt to create the leader
		(prompt "\n Select Leader Start and Bend Points: ")
		;; Run the leader command with the point filter
		(command "leader"
			 PAUSE
		   ".X"
		   InsertPoint
		   PAUSE
		   (polar InsertPoint (angle InsertPoint (getvar "lastpoint")) LeaderEnd)
		   ""
		   ""
		   "n"
		)
	)
	((equal TextRotate 0.0 0.0001)
		;; Get center point of textbox (from 0,0)
		(setq	TempPoint 
			(list 
				(/ (+ (caadr DtextBox) (caar DtextBox)) 2.0)
				(/ (+ (cadar DtextBox) (cadadr DtextBox)) 2.0)
				(cadddr (assoc 10 DtextEntList))
		  )
		)
		;; Get the center point of the selected text object
		(setq	InsertPoint 
			(list 
				(+ (car DtextInsPoint) (car TempPoint))
				(+ (cadr DtextInsPoint) (cadr TempPoint))
				(+ (caddr DtextInsPoint) (caddr TempPoint))
		  )
		)
		;; Set the leader end point
		(setq	LeaderEnd
		 (+ (/ (- (caadr DtextBox) (caar DtextBox)) 2.0)
		    (* 0.0625 (getvar "dimscale"))		;CHANGE THIS TO CHANGE GAP BETWEEN TEXT AND LEADER
		 )
		)
		;; Prompt to create the leader
		(prompt "\n Select Leader Start and Bend Points: ")
		;; Run the leader command with the point filter
		(command "leader"
			 PAUSE
		   ".Y" 
		   InsertPoint
		   PAUSE
		   (polar InsertPoint (angle InsertPoint (getvar "lastpoint")) LeaderEnd)
		   ""
		   ""
		   "n"
		)
	)
	((/= (or (equal TextRotate 0.0 0.0001)(equal TextRotate 1.5708 0.0001)))
		(alert "Selected text not at a suitable angle")
		(TEXT_LEADER_RUN)
	)
)
(TEXT_LEADER_RESET_ENV)
)
;;; ------------ Set Environment Settings
(defun TEXT_LEADER_SET_ENV (/)

;; Set sysetem variables
(setq OldCmdecho (getvar "CMDECHO"))
(setq OldOsmode (getvar "OSMODE"))
(setq OldOrthoMode (getvar "ORTHOMODE"))
(setq OldClayer (getvar "CLAYER"))

(setvar "CMDECHO" 0)
(setvar "ORTHOMODE" 0)
(setvar "OSMODE" 513)

;;; Undo marker
(command "_UNDO" "BEGIN")

;; Set the exclusion list
(setq ExludeList (list "3DFACE" "3DSOLID" "ARC" "ATTDEF" "ATTRIB"  "BODY" "CIRCLE" "DIMENSION" "ELLIPSE"
"HATCH" "IMAGE" "INSERT" "LEADER" "LINE" "LWPOLYLINE" "MLINE" "OLEFRAME" "OLE2FRAME" "POINT" "POLYLINE" 
"RAY" "REGION" "SEQUEND" "SHAPE" "SOLID" "SPLINE" "TOLERANCE" "TRACE" "VERTEX" "VIEWPORT" "XLINE"))

;; Add program description to status line
(grtext -2 (strcat "Text Leader " "v1.2" " Copyright© 2007"))
)
;;; ------------ Reset Environment Settings
(defun TEXT_LEADER_RESET_ENV (/)

;;; Undo marker
(command "_UNDO" "END")

;; Reset system variable
(grtext -2 "")	
(setvar "CLAYER" OldClayer)
(setvar "OSMODE" OldOsmode)
(setvar "ORTHOMODE" OldOrthoMode)	
(setvar "CMDECHO" OldCmdecho)

(princ)
)
;;;
;;; Echos to the command line
(princ "\n Text Leader v1.2© \n Timothy Spangler, \nAugust, 2007....loaded.")
(terpri)
(princ "Type \"TL\" to run")
(print)
;;; End echo

 

You have to watch the " marks in the princ statment they must have leading \ marks i.e. (princ "Type \"TL\" to run")

  • Replies 26
  • Created
  • Last Reply

Top Posters In This Topic

  • Lee Mac

    13

  • Heesh

    9

  • TimSpangler

    3

  • lpseifert

    2

Posted

Tim,

 

May I ask, why the use of "Terpri" to print the new line - is that not an archaeic LISP function?

Posted

YEP! just been that way for so long........I use it on everything just haven't updated it yet. :roll:

Posted

To all of you:

 

Thanks for all the helpful suggestions, I've got it working (with all your help of course). Found that it wasn't being loaded properly as the ACAD2009DOC file I had entered the load command in was on our server, not the local file that I needed. I feel like an idiot for not finding that sooner. Oh well, everythings simple when you look back at it.

 

Final fix also entailed using ^C^CTL in the macro call line for the button.

 

Anyway, it works fine and I've distributed it throughout the office. Thanks again for the help and patience. You guys are great!

Posted

One final question (for today anyway):

Is there a way to copy / send all of our communications to a text file? I'd like to strip out the suggestions and add them to my troubleshooting library. I know all the standard copy paste tricks. I'm just wondering if this forum has a quicker method...

Posted

Your Welcom Heesh, glad you finally got it working :)

 

I personally do not know of a function on the forum to export to a text file, but, if there is one, I'm sure one of the Moderators will know of it.

 

If there isn't, this could be a good suggestion for the feedback forum. :thumbsup:

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