You could try these, the first one, test, will return lists for each line with the 4 values for the 2 end points (x1, y1, x2, y2). You need to also select a reference point to measure these points to. I tend to draw the thumbnail in a 75x75 square, reference point is top left corner and all the thumbnail entities are lines - nothing else - function name test
The second one I haven't adjusted, copied straight from my library, blockthumbrecord, select the lines, select the reference point and it will return some results in a new notepad window... so not been adjusted you might need to add a function in there (LM: functions from Lee Macs website). Also the notepad will add in other stuff that is handy for me - a good learning exercise to look at the code and adjust it so it works for you.
Both will give you sets of points for each line in a selection which you can copy and paste for your needs.
Note that the vector graphics cannot do fractions, so maybe best set your snaps and grid to '1' and to get a smooth curve, a few short lines and make sure that the ends all touch.
(defun c:test ( / )
(defun LM:round ( n )
(fix (+ n (if (minusp n) -0.5 0.5)))
)
(princ "\nSelect LINES for thumbnail: ")
;;Get entities
(setq ss (ssget '((0 . "LINE"))))
(if (not ss) ;check for nil selection set
(progn
(princ "Nothing selected.")
(exit)
) ;end progn
) ;end if
;;get list of entities
(setq LinesList (list))
(setq acount 0)
(setq BasePoint (getpoint "\Select Top Left Corner of Tumbnail (75x75 square)"))
(setq BasePoint (reverse (cdr (reverse BasePoint))))
(while (< acount (sslength ss)) ;loop for every entity in the set
(setq en (ssname ss acount)) ;get entity name
(setq ed (entget en)) ;get entity definition
(setq pt1 (reverse (cdr (reverse (cdr (assoc 10 ed)))))) ;; X and Y only
(setq pt1 (mapcar '- BasePoint pt1)) ;; Shift by basepoint
(setq pt1 (mapcar 'LM:round (mapcar 'abs pt1))) ;; Absolute value rounded to nearest 1
(setq pt1 (list (rtos (car pt1) 2 0) (rtos (cadr pt1) 2 0) )) ;; List items to strings
(setq pt2 (reverse (cdr (reverse (cdr (assoc 11 ed)))))) ;; X and y Only
(setq pt2 (mapcar '- BasePoint pt2)) ;; Shift by basepoint
(setq pt2 (mapcar 'LM:round (mapcar 'abs pt2))) ;; Absolute value rounded to nearest 1
(setq pt2 (list (rtos (car pt2) 2 0) (rtos (cadr pt2) 2 0) )) ;; List items to strings
(setq pt1 (append pt1 pt2)) ;; Create thumbnail definition line
(setq LinesList (append LinesList (list pt1)) ) ;; Add definition line to thumb. definition
(setq acount (+ acount 1))
) ;;end while
LinesList
)
(defun c:blockThumbrecord ( / ss LinesList acount en ed pt1 pt2 tempblock f )
;;Opens notepad wth lines coordinates
(defun LM:lst->str ( lst del / str )
(setq str (car lst))
(foreach itm (cdr lst) (setq str (strcat str del itm)))
str
)
;;Get entities
(setq ss (ssget '((0 . "LINE"))))
(if (not ss) ;check for nil selection set
(progn
(princ "Nothing selected.")
(exit)
) ;end progn
) ;end if
;;get list of entities
(setq LinesList (list))
(setq acount 0)
(while (< acount (sslength ss)) ;loop for every entity in the set
(setq en (ssname ss acount)) ;get entity name
(setq ed (entget en)) ;get entity definition
(setq pt1 (cdr (assoc 10 ed)))
(setq pt1 (list "list" (rtos (abs (car pt1)) 2 0) (rtos (abs (cadr pt1)) 2 0) ))
(setq pt2 (cdr (assoc 11 ed)))
(setq pt1 (append pt1 (list (rtos (abs (car pt2)) 2 0) (rtos (abs (cadr pt2)) 2 0) "TxCol")))
(setq LinesList (append LinesList (list pt1)) )
(setq acount (+ acount 1))
) ;;end while
;;write to a temp file
(if (strcat (getvar "TEMPPREFIX") "Thumbnail.txt")(vl-file-delete (strcat (getvar "TEMPPREFIX") "Thumbnail.txt")))
(setq tempblock (strcat (getvar "TEMPPREFIX") "Thumbnail.txt")) ;;add check if this exists
(setq f (open tempblock "w")) ;;open file
(write-line " (Defun Sel--**FUNCTIONNAME**-- ( origin BgCol TxCol ImgTile Control / BlkList return) " f)
(write-line " (if (= Control \"Vector\") " f)
(write-line " (progn " f)
(write-line " (start_image ImgTile) " f)
(write-line " (fill_image (- origin 0) 0 (+ origin 85) 85 BgCol) " f)
(write-line " (setq BlkList (list " f)
(setq acount 0)
(while (< acount (length LinesList))
(write-line (strcat "(" (LM:lst->str (nth acount LinesList) " ") ")" ) f)
(setq acount (+ acount 1))
)
(write-line " )) ; end setq end list" f)
(write-line " (setq Xoff 0)(setq YOff 0)" f)
(write-line " (CreateVector BlkList XOff YOff TxCol)" f)
(write-line " (end_image)" f)
(write-line " ); end progn" f)
(write-line " (setq Return \"--**FUNCTION NAME TO INSERT BLOCK**--\")" f)
(write-line " ) ; end if" f)
(write-line " )" f)
(write-line "" f)
(write-line "; -OK- ;" f)
(close f)
;;open notepad & file
;; (startapp "c:/windows/notepad.exe" tempblock)
(vl-catch-all-apply
(function
(lambda ()
(setq obj (vlax-get-or-create-object "WScript.Shell"))
(vlax-invoke obj 'Run (strcat "c:/windows/notepad.exe \"" tempblock "\"")) ;; or notepad++ if that is used.
(setvar 'cmdecho 0)
(vlax-invoke obj 'AppActivate "Notepad") ; Title bar name of application. ++ for notepad++ but still works?
)
)
)
(if obj (vlax-release-object obj))
(princ)
)
These should make it possible to easily get the coordinates to make something like this as a thumbnail:
(The Engineers keep asking me to add a legend.... so I do)
The second LISP makes up the code I need for my block selection routine, thumbnail graphic, saved in the code, see the image I like, click and paste