请帮帮我
;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这样的人,而且工作过。。。如果有人有一个,请为我释放它,请。 像这样的?
(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))
上面发布的代码在任何版本中都不起作用。
由于李发布了一个更好的整体解决方案,因此不需要修复您的原始代码。
我向Lee的代码建议的唯一改进是,不管选择的点是什么,都可能将注释放置在标高0.0处,因为使用TTF的文本在非零标高处看起来模糊/扭曲。 很好,长官,代码更新了。 是这样的。。。嗯,就是。。。但是有一个领导者。。
此引线可以有一个文本位于的框。。。或z值的子行。。。你能这样对我吗? 我相信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))
这很好,但没有给我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值 由于Lisp的Autor是在线程开始时发布的,我必须指出,自从我发布Lisp以来,它已经被修改了。
在第6、7和8行的末尾有一个盈余2 4),在第16行中,pt0应该读取PtCoord,它也没有被声明为局部变量。
从写作日期来看,那时候我一定很聪明。
问题是,当使用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))
顺便说一句,Eldon,我意识到这可能是你的一个旧LISP,但我建议不要使用(命令)创建文本(以及ATTDEF)。
我之前可能已经提到过这一点,但我发现在各种图形中这一点非常不可靠,而且它也比entmake的替代方案慢得多。
为了更简单,我创建了这个线程
李
页:
[1]
2