ManAtWork 发表于 2022-7-6 11:42:22

请帮帮我


;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 PtCoord (getpoint "\nPick co-ordinate point:"))
          (setq
      xval (car PtCoord) 2 4)
            yval (cadr PtCoord) 2 4)
            zval (caddr PtCoord) 2 4)
      east (rtos xval 2 4)
            north (rtos yval 2 4)
            elev (rtos zval 2 4)
            xval (strcat   "X=" east)
            yval (strcat   "Y=" north)
            zval (strcat   "z=" elev)
         )
(command "TEXT" pt0 "0.5" "0" xval);size of text changed manually
(command "TEXT" "" yval)
(command "TEXT" "" zval)
   )
   (princ)
)

 
Z值不会写在屏幕上。。。。怎么了?
如何将引线指向入口点的文本放置?
 
我见过lisp这样的人,而且工作过。。。如果有人有一个,请为我释放它,请。

Lee Mac 发表于 2022-7-6 11:45:52

像这样的?
 

(defun c:mpt (/ M-Text pt)

(defun M-Text (pt val)
   (entmakex (list (cons 0 "MTEXT")
                   (cons 100 "AcDbEntity")
                   (cons 100 "AcDbMText")
                   (cons 10 (list (car pt) (cadr pt) 0.0))
                   (cons 1 val))))

(while (setq pt (getpoint "\nPick Point: "))
   (setq pt (trans pt 1 0))
   (M-Text pt
   (apply 'strcat
       (mapcar 'strcat '("X = " "\nY = " "\nZ = ") (mapcar 'rtos pt)))))

(princ))

rkmcswain 发表于 2022-7-6 11:50:28

 
上面发布的代码在任何版本中都不起作用。
 
由于李发布了一个更好的整体解决方案,因此不需要修复您的原始代码。
 
我向Lee的代码建议的唯一改进是,不管选择的点是什么,都可能将注释放置在标高0.0处,因为使用TTF的文本在非零标高处看起来模糊/扭曲。

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

很好,长官,代码更新了。

ManAtWork 发表于 2022-7-6 11:57:25

是这样的。。。嗯,就是。。。但是有一个领导者。。
此引线可以有一个文本位于的框。。。或z值的子行。。。你能这样对我吗?

Lee Mac 发表于 2022-7-6 11:59:03

我相信ASMI创建了一个LISP,我对其进行了轻微修改,这可能适合
 

;; ==================================================================== ;;
;;                                                                      ;;
;;ORDI.LSP - This lisp for labeling X,Y coordinates with            ;;
;;             standard _DIMORDINATE dimension. The dimension         ;;
;;             properties is defined by current dimension               ;;
;;             style and variables DIMSCALE, DIMLFAC                  ;;
;;             and DIMDEC.                                              ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;Command(s) to call: ORDI                                          ;;
;;                                                                      ;;
;;... and pick, pick, pick... till Esc is pressed.                  ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY    ;;
;;MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR      ;;
;;PARTS OF IT ABSOLUTELY FREE.                                        ;;
;;                                                                      ;;
;;THIS PROGRAM PROVIDES 'AS IS' WITH ALL FAULTS AND SPECIFICALLY      ;;
;;DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS      ;;
;;FOR A PARTICULAR USE.                                             ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;V1.3, 12 May, 2005, Riga, Latvia                                    ;;
;;© Aleksandr Smirnov (ASMI)                                          ;;
;;For AutoCAD 2000 - 2008 (isn't tested in a next versions)         ;;
;;                                                                      ;;
;;                           http://www.asmitools.com               ;;
;;                                                                      ;;
;;~ Modified by Lee Mac~14.02.10 ~                              ;;
;;                                                                      ;;
;; ==================================================================== ;;


(defun c:ordi (/ *error* fPt oldEcho dScl dFlc dDec)

(defun *error*(msg)
   (and oldEcho (setvar "CMDECHO" oldEcho))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ))

(princ (apply (function strcat)
               (mapcar (function strcat) '("\nDIMSCALE = " " DIMLFAC = " " DIMDEC = ")
                     (mapcar (function rtos)
                               (mapcar (function set) '(dScl dFlc dDec)
                                       (mapcar (function getvar)
                                             '("DIMSCALE" "DIMLFAC" "DIMDEC")))))))
(setq oldEcho (getvar "CMDECHO"))
(setvar "CMDECHO" 0) (terpri)
(while (setq fPt (getpoint "\rSpecify Point: "))
   (command "_.dimordinate" "_non" fPt "_t"
            (strcat    "X=" (rtos (* dFlc   (car fPt)) 2 dDec)
                  "\\XY=" (rtos (* dFlc(cadr fPt)) 2 dDec)) pause))

(setvar "CMDECHO" oldEcho)
(princ))

ManAtWork 发表于 2022-7-6 12:04:40

这很好,但没有给我z值。。。我是地形测量,我真的需要z值。
 
我尝试合并两个lisp:
 

(defun c:mpt (/ Text pt)

(defun Text (pt val)
(entmakex (list (cons 0 "MTEXT")
                   (cons 100 "AcDbEntity")
                   (cons 100 "AcDbMText")
                   (cons 10 (list (car pt) (cadr pt) 0.0))
                   (cons 1 val))))

(while (setq pt (getpoint "\nPick Point: "))
    (setq pt (trans pt 1 0))
    (setq midpt (getpoint pt))
    (setq endpt (getpoint midpt))
    (command "leader" pt midpt endpt "" "" "n")
    (Text pt
      (apply 'strcat
      (mapcar 'strcat '("X = " "\nY = " "\nZ = ") (mapcar 'rtos pt)))))

(princ))

 
 
...但正如你们将看到的,文本并没有停留在我想要的地方。
它应该保持在领导者中间点的顶部。。。但是用第一个点的坐标。。。你能按我想要的方式编辑这个吗?我真的很感激。
 
试着运行我刚刚在这里写的一个。。。这是一种混乱的结局。。但它会给你“想法”
 
 
ps:也编辑了你的。。。但无法将z值置于y值之下。。。我刚刚补充说:
 
“\\XZ=(rtos(*dFlc(caddr fPt))2 dDec))暂停)
 
它显示z值,但不低于Y值

eldon 发表于 2022-7-6 12:07:27

由于Lisp的Autor是在线程开始时发布的,我必须指出,自从我发布Lisp以来,它已经被修改了。
 
在第6、7和8行的末尾有一个盈余2 4),在第16行中,pt0应该读取PtCoord,它也没有被声明为局部变量。
 
从写作日期来看,那时候我一定很聪明。

Lee Mac 发表于 2022-7-6 12:10:13

 
问题是,当使用DIMORITY命令创建引线时,只能使用两条线(如果不使用多行文字)。
 
但是试试这个:
 

;; ==================================================================== ;;
;;                                                                      ;;
;;ORDI.LSP - This lisp for labeling X,Y coordinates with            ;;
;;             standard _DIMORDINATE dimension. The dimension         ;;
;;             properties is defined by current dimension               ;;
;;             style and variables DIMSCALE, DIMLFAC                  ;;
;;             and DIMDEC.                                              ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;Command(s) to call: ORDI                                          ;;
;;                                                                      ;;
;;... and pick, pick, pick... till Esc is pressed.                  ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;THIS PROGRAM AND PARTS OF IT MAY REPRODUCED BY ANY METHOD ON ANY    ;;
;;MEDIUM FOR ANY REASON. YOU CAN USE OR MODIFY THIS PROGRAM OR      ;;
;;PARTS OF IT ABSOLUTELY FREE.                                        ;;
;;                                                                      ;;
;;THIS PROGRAM PROVIDES 'AS IS' WITH ALL FAULTS AND SPECIFICALLY      ;;
;;DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS      ;;
;;FOR A PARTICULAR USE.                                             ;;
;;                                                                      ;;
;; ==================================================================== ;;
;;                                                                      ;;
;;V1.3, 12 May, 2005, Riga, Latvia                                    ;;
;;© Aleksandr Smirnov (ASMI)                                          ;;
;;For AutoCAD 2000 - 2008 (isn't tested in a next versions)         ;;
;;                                                                      ;;
;;                           http://www.asmitools.com               ;;
;;                                                                      ;;
;;~ Modified by Lee Mac~14.02.10 ~                              ;;
;;                                                                      ;;
;; ==================================================================== ;;


(defun c:ordi (/ *error* fPt oldEcho dScl dFlc dDec)

(defun *error*(msg)
   (and oldEcho (setvar "CMDECHO" oldEcho))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ))

(princ (apply (function strcat)
               (mapcar (function strcat) '("\nDIMSCALE = " " DIMLFAC = " " DIMDEC = ")
                     (mapcar (function rtos)
                               (mapcar (function set) '(dScl dFlc dDec)
                                       (mapcar (function getvar)
                                             '("DIMSCALE" "DIMLFAC" "DIMDEC")))))))
(setq oldEcho (getvar "CMDECHO"))
(setvar "CMDECHO" 0) (terpri)
(while (setq fPt (getpoint "\rSpecify Point: "))
   (command "_.dimordinate" "_non" fPt "_M"
            (strcat    "X=" (rtos (* dFlc   (car fPt)) 2 dDec)
                  "\\PY=" (rtos (* dFlc(cadr fPt)) 2 dDec)
                  "\\PZ=" (rtos (* dFlc (caddr fPt)) 2 dDec)) pause))

(setvar "CMDECHO" oldEcho)
(princ))

Lee Mac 发表于 2022-7-6 12:14:07

 
顺便说一句,Eldon,我意识到这可能是你的一个旧LISP,但我建议不要使用(命令)创建文本(以及ATTDEF)。
 
我之前可能已经提到过这一点,但我发现在各种图形中这一点非常不可靠,而且它也比entmake的替代方案慢得多。
 
为了更简单,我创建了这个线程
 
页: [1] 2
查看完整版本: 请帮帮我