要同时标明 X , y 坐标,可有大虾指点
要同时标明 X , y 坐标,可有大虾指点,形式如下:A=X 坐标
B=y 坐标
并有引线指向坐标点 要获得坐标是很简单的,但你的要求不够明确。如要获得怎样的点的坐标,如何选定,坐标标在什么位置等等。 其实并不困难,首先拾取点坐标,然后根据取点函数ads_getpoint鼠标操作,记录点值,根据这些点划线标注即可。我以前帮别人做过没什么难点 看看这个:
(defun c:ds ()<BR> (setvar "cmdecho" 0)<BR> (command "osnap" "end")<BR> (setq p1 (getpoint "Select line near endpoint"))<BR> (setq p2 (getpoint p1 "Select end of Leader"))<BR> (setq px (rtos (nth 0 p1 ) 2 4))<BR> (setq py (rtos (nth 1 p1 ) 2 4))<BR> (setq txt (strcat "X " px " , " "Y " py))<BR> (command "dim1" "leader" p1 p2 "" txt)<BR> (setvar "cmdecho" 1)<BR>)<BR>(princ) xjjy:
你所提供的程序很好用,但还是想请你帮忙改一下好吗?这样就更好了.
1.能否将命令行提示改为中文.
2.能否将X,Y标注不在同一行,如3楼所标注的那样.
再次表示谢意! 其实,大地坐标和CAD坐标X,Y刚好相反的,CAD里的X值要标Y=*而CAD里的y值要注X=* 本帖最后由 作者 于 2004-12-13 21:13:44 编辑 <br /><br /> 我是初学LISP。五楼的把CAD中的坐标系统和国家的大地坐标系统搞反了。我改了一下,发上来让大家看看。
(defun c:ds ()<BR> (setvar "cmdecho" 0)<BR> (command "osnap" "end")<BR> (setq p1 (getpoint "输入端点:"))<BR> (setq p2 (getpoint p1 "输入引导线位置"))<BR> (setq px (rtos (nth 0 p1 ) 2 4))<BR> (setq py (rtos (nth 1 p1 ) 2 4))<BR> (setq txt (strcat "X=" py "" "\nY=" px))<BR> (command "dim1" "leader" p1 p2 "" txt)<BR> (setvar "cmdecho" 1)<BR>)<BR>(princ)
大地坐标的X相当于CAD坐标的Y值。但按制图标准把两行字体在线中间打印,从理论上讲可以通过编程实现,但编程内容要肥了好多好多。我刚开始学,力不从心。还求大虾帮忙。但若通过。标注式样来更改的话,又麻烦了点。那样的话,还不如标好后手动把字体向下移动三分之五个字高单位来得更方便些。 本帖最后由 作者 于 2004-12-14 9:00:01 编辑
请问一下大虾,不知能不能求出当前字体设定的字高H。若能,LISP函数怎么写。若能求出来,那么上面的这个程序就能完整了。 如下图,把多行字体向下移三分之五个字体高度就更完美了。
这是完整的程序(DEFUN C:DS (/ OLDZIN P1 P2 PX PY H P3)
(SETVAR "CMDECHO" 0)
(SETQ OLDZIN (GETVAR "DIMZIN"))
(SETVAR "DIMZIN" 0)
(WHILE (SETQ P1 (GETPOINT "\nFirst Point 第一点 :"))
(IF (SETQ P2 (GETPOINT P1 "\nSecond Point 第二点 :")) (PROGN
(SETQ PX (STRCAT "X=" (RTOS (CAR P1) 2 4)))
(SETQ PY (STRCAT "Y=" (RTOS (CADR P1) 2 4)))
(SETQ H (* (GETVAR "DIMSCALE") (GETVAR "DIMTXT")))
(SETQ P3 (POLAR P2 (/ PI -2) (* H 1.6)))
(COMMAND "LEADER" P1 P2 "" PX PY "")
(COMMAND "STRETCH" "C" "END" P3 P2 "" "END" P3 (POLAR P2 (/ PI 2) (* 0.25 H)))
))
)
(SETVAR "DIMZIN" OLDZIN)
(SETVAR "CMDECHO" 1)
(PRINC)
)