Tiger 发表于 2022-7-5 23:57:16

Lisp来放置文本-做什么

我有一个lisp,实际上我有几个版本的lisp,但它似乎有一个增长的一个错误或东西,因为它现在的行为不像以前那样。问题是,它将X-text和Y-text放在彼此的顶部,并且无法读取LISP,我不知道是什么变量控制它,有谁可以帮助我?
 
;;--------------------------------------------------------------------------
;; COORD.LSP                        PLACE CO-ORDINATE TEXT OF SELECTED POINT
;;==========================================================================
;;DESCRIPTION:This routine will place co-ordinate text alongside a defined
;;            (user selected) point.The `x' & `y' values of the selected
;;            point will be preceded with an `E' & `N' respectively. This
;;            routine also places a donut at the point.The co-ord text is
;;            then echoed to the screen alongside the selected point, and
;;            the user is prompted to select the desired location of the
;;            text.
;;
;;START COMMAND........   coord
;;
;;WRITTEN BY:   ALAN CULLEN         December 1994
;;
;;AMENDED:      August 1995         Error handler included
;;            November 1999         Modified to read text settings from
;;                                    configuration file "COORD.CFG"
;;            October 2007          Re-written for Tiger
;;
;;---------------------------ERROR HANDLER------------------------------
(defun clerr (s)
(if (/= s "Function cancelled")
(if (= s "quit / exit abort")
    (princ)
    (princ (strcat "\nError: " s))
)
)
(setvar "donutid" olid)
(setvar "donutod" olod)
(setvar "blipmode" olblip)
(setvar "LUPREC" oluprec)
;; (setvar "osmode" olsnap)
(setq el1 nil el2 nil)
(setvar "cmdecho" ocmd)
(setvar "ANGBASE" oangbase)       ;;Angle zero direction to "north"
(setvar "ANGDIR" oangdir)         ;;Clockwise angles
(setvar "dragmode" odrag)

(if olderr (setq *error* olderr))
(princ "\nERROR...CONSOLE BREAK...PREVIOUS DRAWING STATUS RESTORED...")
(princ)
)

;;-----------------------------MAIN PROGRAM------------------------------
(DEFUN C:cr()

(princ "\n PLACE POINT CO-ORDINATE TEXT-November1999 - Alan CULLEN")

(setq txtang 90)                               ;;*** Set orientation angle for text (set for 0 deg = North, angles measured clockwise)
(setq lnspace 1.5)                            ;;*** Set text line spacing factor (generally 1.
(setq olderr *error* *error* clerr)      ;;Set new error handler
(setq ocmd (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq olid (getvar "DONUTID"))
(setvar "donutid" 0)
(setq olod (getvar "DONUTOD"))
(setvar "donutod" 300.0)                     ;;*** Sätter ytterdiameter på donut
(setq oluprec (getvar "LUPREC"))
(setvar "LUPREC" 3)                           ;;*** Sätter antal decimaler
;; (setq olsnap (getvar "osmode"))
(setq ts 5)                                 ;;*** Sätter text storlek
(setq olblip (getvar "blipmode"))
(setvar "blipmode" 0)                     ;;*** Set BLIPMODE enviroment variable 0/1 ... 0=OFF, 1=ON
(setq oangbase (getvar "ANGBASE"))
(setvar "ANGBASE" (/ pi 2))                   ;;Angle zero direction to "north"
(setq oangdir (getvar "ANGDIR"))
(setvar "ANGDIR" 1)                           ;;Clockwise angles
(setq odrag (getvar "dragmode"))
(setvar "dragmode" 2)


(setq pt T)
(while pt
(princ "\n PLACE POINT CO-ORDINATE TEXT-November1999 - Alan CULLEN")
;; (setvar "osmode" 1)
(setq pt (getpoint "\n Välj Punkt - <RETURN> för att avsluta :"))                     
;; (setvar "osmode" 0)
(if (/= pt nil)
(progn
   (setq ptx (car pt) pty (cadr pt))
   (setq txtptx (/ptx 1000))
   (setq txtptx (strcat "Y: " (rtos txtptx)))
   (setq txtpty (/pty 1000))
   (setq txtpty (strcat "X: " (rtos txtpty)))
   (setq pt1 (list ptx pty 0))
   (setq txtpt1 (list ptx (+ pty (* lnspace ts)) 0))
   (command "doughnut" "" "" pt1 "")
   (command "text" txtpt1 ts txtang txtpty)
   (setq el1 (entlast))
   (command "text" pt1 ts txtang txtptx)
   (setq el2 (entlast))
   (prompt "\n   Välj Plats För Koordinattext ")
   (command "move" el1 el2 "" pt1 pause)
)))
(setvar "donutid" olid)
(setvar "donutod" olod)
(setvar "blipmode" olblip)
(setvar "LUPREC" oluprec)
;; (setvar "osmode" olsnap)
(setq el1 nil el2 nil)
(setq *error* olderr)             ;; Restore old error handler
(setvar "cmdecho" ocmd)
(setvar "ANGBASE" oangbase)
(setvar "ANGDIR" oangdir)
(setvar "dragmode" odrag)

(princ)
)

eldon 发表于 2022-7-6 00:02:58

AC可能在Ted上
 
不过,说真的,AC总是改变角度,使其成为测量角度,如果你不习惯,这会使事情变得复杂。
 
这里有两个简单的Lisp,它们将坐标(WC)写成米坐标中的文本。一个在图形单位为米时使用,另一个在图形单位为毫米时以米为单位写入坐标。没有错误检查,您必须在lisp中输入文本高度。看看他们能否给你一个主意。
 
;WC.LSP is a programme to write coordinates. eldon Nov 1999
(defun C:WC (/ pt0 e east eastin n north northin)
;here begins the loop that gets the actual positions
(while (setq pt0 (getpoint "\nPick co-ordinate point:"))
         (setq e (car pt0)      ;easting coord as number
               n (cadr pt0)       ;northing coord as number
               east (rtos e 2 3);easting coord as string
               north (rtos n 2 3);northing coord as string
               eastin (strcateast "mE" )
               northin (strcatnorth "mN")
         )
(command "TEXT" pt0 "0.1" "0" eastin);size of text changed manually
(command "TEXT" "" northin)
   )
   (princ)
)

;WCMM.LSP is a programme to write coordinates in m when dwg units are mm. eldon Nov 1999
(defun C:WCmm (/ pt0 e east eastin n north northin)
;here begins the loop that gets the actual positions
(while (setq pt0 (getpoint "\nPick co-ordinate point:"))
         (setq e (car pt0)      ;easting coord as number
               n (cadr pt0)       ;northing coord as number
               east (rtos (/ e 1000) 2 3);easting coord as string
               north (rtos (/ n 1000) 2 3);northing coord as string
               eastin (strcateast "mE" )
               northin (strcatnorth "mN")
         )
(command "TEXT" pt0 "500" "0" eastin);size of text changed manually
(command "TEXT" "" northin)
   )
   (princ)
)

Lee Mac 发表于 2022-7-6 00:04:50

嘿,老虎,
 
我会帮你看一下Lisp程序-但同时,这里有一些其他的可能会帮你:
 
http://www.cadtutor.net/forum/showthread.php?t=37762
http://www.cadtutor.net/forum/showthread.php?t=36668
http://www.cadtutor.net/forum/showthread.php?t=38525
http://www.cadtutor.net/forum/showthread.php?t=19666&page=4
http://www.cadtutor.net/forum/showthread.php?t=36328
http://www.cadtutor.net/forum/showthread.php?t=36808
 
有些可能比其他更相关。。。取自我的“链接库”lol
 
此外,VVA有一套很棒的任务程序:
http://www.cadtutor.net/forum/showthread.php?t=31653
 

 
编辑:
 
PS>Tiger,你确定要使用“甜甜圈”作为点-这使得从图形中提取点信息非常困难(与使用ACAD点相反)。只是一个想法

Lee Mac 发表于 2022-7-6 00:09:11

埃尔登,
 
只是一个提示-
 
我会小心使用TEXT命令-它有时可能会产生不想要的结果。TEXT命令的提示不一致,因此LISP有时会出错。我将使用entmake方法
 
另外,注意你的睡眠
 

Tiger 发表于 2022-7-6 00:12:47

 
AC总是在Ted:wink:
 
这是他为我使用和采用的,因此它采用了调查方式——我来看看你的,干杯!
 
李-不,我不太确定我需要的油炸圈饼,但我没有费心把它去掉,有时我很想知道我的意思是什么。

Lee Mac 发表于 2022-7-6 00:14:15

好的,如果你在这些链接中或者从Eldon提供的内容中找不到合适的东西,我很乐意用LISP帮助你(这种程序并不太复杂)

Tiger 发表于 2022-7-6 00:18:06

好的,看看你提供的链接,李,我似乎找不到一个能满足我需要的,大多数人似乎想把这些点导出到一个txt或excel文件,这对我来说是不需要的。
 
实际上,我发布的CR.lsp确实需要我想要的,它拾取一个点的坐标,这个特定版本以米为单位,即使图形以毫米为单位,它也可以让我将文本放置在我想要的位置,并且除了坐标之外,它不会添加任何其他文本。只是,无论我把文本放在哪里,它都会把X和Y文本放在彼此的顶部,这取决于我把文本放在哪里。我只是想弄清楚是什么变量影响。。。

NBC 发表于 2022-7-6 00:20:42

从初始代码Tiger开始,它使用el1作为y坐标,el2作为x坐标;然后使用定义为x和y坐标的pt1将x和y文本一起移动到同一点

Lee Mac 发表于 2022-7-6 00:25:42


 
试试这个。我花了比平时更长的时间来评论代码,这样你就知道“什么做什么”。
 
我试图使其与原始代码相似-但可能需要调整,因为原始代码有点小,我怎么能把它“关”。
 
(defunc:cr(/)(]setqdoc(vla get ActiveDocument(vlax get acad object]](defun*错误*(msgifdoc(vla ENDUDOMARKdoc(如果ov b](vl ov b](if(notwcmatch(msg)“*中断,*取消*,*退出*”(princ(strcat“\n**错误:msg”**“(]princ(setqlFac1.5;;

Lee Mac 发表于 2022-7-6 00:26:11

 
是的,我注意到您正在移动刚刚放置的文本-但我认为这是有意的,所以我将其保留在新代码中。
 
它很容易看到,必要时可以发表评论。
页: [1] 2
查看完整版本: Lisp来放置文本-做什么