明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2480|回复: 6

[求助][LISP],菜鸟请各位高手帮编一个标Y值的程序,先谢谢您了

[复制链接]
发表于 2004-1-10 10:17 | 显示全部楼层 |阅读模式
为表达清楚:设定小写yn为第n点在当前坐标下的真实y值,大写Yn为欲标注的第n点的Y值。欲求程序如下:
点取第1点,自动标注Y1值为0.000
点取第2点,标注其Y2值等于(y2-y1)/10
点取第3点,标注其Y3值等于(y3-y1)/10
点取第4点,标注其Y4值等于(y4-y1)/10
以此类推
请注意:标注的Yn值直接在点取选点处显示数值,不用带其它符号,数值取三位小数点,数值的文字方向为90度(与Y轴平行),字高为2.5(或取当前CAD默认字高)。
以上不知小弟表述清楚了没有,小弟没接触过lisp,恳请各位高手帮忙编写,在下谢谢您了!
发表于 2004-1-10 12:15 | 显示全部楼层
本帖最后由 作者 于 2004-1-10 13:49:19 编辑

注意画斜杠注释部分说明

  1. ;直接点取要标注的点,右键结束

  2. (defun MakeText(pt1 str h / ptInsert TextDxf)
  3.   (setq TextDxf '(
  4.              (0 . "MTEXT")
  5.              (100 . "AcDbEntity")             ; 需要所有 R12 之后版本的图元
  6.              (100 . "AcDbMText")                ; 将图元标记为 MTEXT
  7.              )
  8.   )
  9.   (setq TextDxf (append TextDxf (list
  10.                                   (cons 10 pt1)
  11.                                   (cons 1 str)
  12.                                   (cons 40 h)
  13.                                   (cons 50  (/ pi 2))
  14.                                 )
  15.                 )
  16.   )
  17.   (entmake TextDxf)
  18.   (princ)
  19. )
  20. (defun err(msg)
  21.   (princ msg)
  22.   (setq *error* errtmp)
  23.   (setvar "dimzin" zin)
  24.   (princ)
  25. )
  26. (defun C:dimy( / i pt y1 y)
  27.   (setq errtmp *error*)
  28.   (setq *error* err)
  29.   (setq zin (getvar "dimzin"))
  30.   (setvar "dimzin" 1)
  31.   (setq i 1)
  32.   (setq y1 nil)
  33.   (while (setq pt (getpoint (strcat "\n点取第" (itoa i) "点:")))
  34.     (if (not y1)
  35.       (progn
  36.         (setq y1 (cadr pt))
  37.         (setq y 0)
  38.       )
  39.       (setq y (/ (- (cadr pt) y1) 10.0))
  40.     )
  41.     (MakeText (list;///////////////////////////此处供修改标注点位置////////////////////////
  42.                 (+ (car pt) 0);正数表示沿x正方向移,否则就是负方向//////////////////////////
  43.                 (+ (cadr pt) 0);正数表示沿x正方向移,否则就是负方向/////////////////////////
  44.               );///////////////////////////此处供修改标注点位置////////////////////////////
  45.               (rtos y 2 3)
  46.               2.5
  47.              )
  48.     (setq i (1+ i))
  49.   )
  50.   (setq *error* errtmp)
  51.   (setvar "dimzin" zin)
  52. )
 楼主| 发表于 2004-1-10 16:47 | 显示全部楼层
非常感谢好心的meflying版主!非常好用,偶期望的功能全能实现,并且版主还很周到的给出了让我通过修改正负数值来修改标注位置的功能,真是非常感谢!
发表于 2004-1-11 10:03 | 显示全部楼层
不知你應用在什麼地方呢?
 楼主| 发表于 2004-1-11 11:32 | 显示全部楼层
BDYCAD发表于2004-1-11 10:03:00不知你應用在什麼地方呢?


标注管线标高:)
各位版主及其他高手,我想在保持meflying超级版主编写的程序基础上,请各位大侠帮我新增一个功能:
获取第n点的Y值后,再另点取任一点以将该第n点的Y值标在这另点的位置上。
---巨贪的菜鸟谢谢各位好心的高手!
发表于 2004-1-11 12:02 | 显示全部楼层
你的意思是不是取点的位置和标注点的位置不同,而且没什么规律是吗?
这样改:
选位置时,如果直接点右件或回车,则在取点位置标注

  1.                                         ;直接点取要标注的点,右键结束

  2. (defun MakeText        (pt1 str h / ptInsert TextDxf)
  3.   (setq        TextDxf        '(
  4.                   (0 . "MTEXT")
  5.                   (100 . "AcDbEntity")        ; 需要所有 R12 之后版本的图元
  6.                   (100 . "AcDbMText")        ; 将图元标记为 MTEXT
  7.                  )
  8.   )
  9.   (setq        TextDxf        (append        TextDxf
  10.                         (list
  11.                           (cons 10 pt1)
  12.                           (cons 1 str)
  13.                           (cons 40 h)
  14.                           (cons 50 (/ pi 2))
  15.                         )
  16.                 )
  17.   )
  18.   (entmake TextDxf)
  19.   (princ)
  20. )
  21. (defun err (msg)
  22.   (princ msg)
  23.   (setq *error* errtmp)
  24.   (setvar "dimzin" zin)
  25.   (princ)
  26. )
  27. (defun C:dimy (/ i pt pt2 y1 y)
  28.   (setq errtmp *error*)
  29.   (setq *error* err)
  30.   (setq zin (getvar "dimzin"))
  31.   (setvar "dimzin" 1)
  32.   (setq i 1)
  33.   (setq y1 nil)
  34.   (while (setq pt (getpoint (strcat "\n点取第" (itoa i) "点:")))
  35.     (if        (not y1)
  36.       (progn
  37.         (setq y1 (cadr pt))
  38.         (setq y 0)
  39.       )
  40.       (setq y (/ (- (cadr pt) y1) 10.0))
  41.     )
  42.     (setq pt2 (getpoint "\n选择标注位置:"))
  43.     (if (not pt2) (setq pt2 pt))
  44.     (MakeText (list                        ;///////////////////////////此处供修改标注点位置////////////////////////
  45.                 (+ (car pt2) 0)                ;正数表示沿x正方向移,否则就是负方向//////////////////////////
  46.                 (+ (cadr pt2) 0)                ;正数表示沿x正方向移,否则就是负方向/////////////////////////
  47.               )                                ;///////////////////////////此处供修改标注点位置////////////////////////////
  48.               (rtos y 2 3)
  49.               2.5
  50.     )
  51.     (setq i (1+ i))
  52.   )
  53.   (setq *error* errtmp)
  54.   (setvar "dimzin" zin)
  55.   (princ)
  56. )


 楼主| 发表于 2004-1-11 12:31 | 显示全部楼层
再次感谢好心的meflying版主(90度鞠躬)!
我试了一下,正是这样,非常好用!再次深表感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-23 16:53 , Processed in 1.163450 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表