找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1378|回复: 24

[LISP函数]:做了一画剖面符号的程序请大家指教

[复制链接]
发表于 2004-12-10 22:34:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本人做了一画剖面符号的程序,带有预先指示方向功能,但是输入终点的时候不能使用正交、极轴、捕捉的功能,还请大家赐教!!
------------------------------------------------------------------------------
2004-12-15[/COLOR]
感谢xyp1964的支持,改变了设计思路,重新上传了一个,下载请到9楼,[/COLOR]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-11 20:08:34 | 显示全部楼层
太复杂,看起来太费事。还是属性块简单一些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-13 13:18:39 | 显示全部楼层
grread期间恐怕不能使用捕捉等,我曾经发过贴,没有人回答,现在只好认为是不能捕捉了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-14 21:06:04 | 显示全部楼层
请问还有好办法没有?比如这样:在选取剖面符号的两个定位点后,再提示选取一点来判断投影方向,就像OFFSET命令一样,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-14 21:39:55 | 显示全部楼层
对grread不熟悉,看看这个原始的:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-14 21:50:13 | 显示全部楼层
非常感谢你的指导,我的水平还不够,还得研究一阵子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-15 07:19:39 | 显示全部楼层
最初由 yjtdkj 发布
[B]请问还有好办法没有?比如这样:在选取剖面符号的两个定位点后,再提示选取一点来判断投影方向,就像OFFSET命令一样, [/B]

可以使用对话框实现文字的位置交互,看看我的这个程序:
http://www.xdcad.net/forum/showthread.php?s=&threadid=309611
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3123个

财富等级: 富可敌国

发表于 2004-12-15 16:45:04 | 显示全部楼层
两位的都下载了,回去好好看看,学一点思路
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-15 18:53:48 | 显示全部楼层
感谢xyp1964的支持,改变了设计思路,重新上传了一个,和大家交流一下,如果觉得可以就支持我一下吧

  1.   [FONT=courier new]
  2. (defun pset (sym do str / @@@)
  3.   (princ (strcat str "<"))
  4.   (princ (eval sym))
  5.   (setq @@@ (eval (do ">:")))
  6.   (if (or (not @@@) (equal @@@ ""))
  7.     (eval sym)
  8.     (set sym @@@)
  9.   ) ;_ 结束if
  10. ) ;_ 结束defun
  11. ;;;----------------------------------------------------------------------------------------
  12. (defun setlay (name color)
  13.   (if (tblsearch "layer" name)
  14.     (progn (command "layer" "s" name ""))
  15.     (progn (command "layer" "m" name "c" color "" ""))
  16.   ) ;_ 结束if
  17. ) ;_ 结束defun
  18. ;;;----------------------------------------------------------------------------------------
  19. (defun c:sectional (/ a             ang    dir           h          oldcla olderr        oldosm
  20.                       oldpli pt1    pt2           pt3          pt4         pt5        pt6
  21.                       pt7    pt8    sc           w          whi         ANG2        ANG3
  22.                       ANG4   P3            P3A           P3B          PO3         PO3_1        PO3_2
  23.                       PO3_3  PO4    PO4_1  PO4_2  PO4_3
  24.                      ) ;_ 结束/
  25.   (princ
  26.     "\n剖面&断面符号绘制小程序v1.0\n-----------------------yjtdkj8156262@163.com-----------------------"
  27.   ) ;_ 结束princ

  28. ;;;---------------------------------------------------------------------------------------
  29.   (defun myerror (msg)
  30.     (if        (= msg "函数被取消")
  31.       (princ "\n老大!干嘛取消呀?")
  32.       (princ "\n*******程序异常退出*******")
  33.     ) ;_ 结束if
  34.     (setvar "osmode" oldosm)                ;恢复捕捉
  35.     (setvar "plinewid" oldpli)                ;恢复多义线宽
  36.     (setvar "CLAYER" oldcla)                ;恢复图层
  37.     (setq *error* olderr)                ;恢复原来的出错函数
  38.     (princ)
  39.   ) ;_ 结束defun
  40.   (setq        olderr        *error*                        ;保存旧的
  41.         *error*        myerror                        ;设置新的
  42.   ) ;_ 结束setq
  43.   (setq oldosm (getvar "osmode"))
  44.   (setq oldpli (getvar "plinewid"))
  45.   (setq oldcla (getvar "CLAYER"))
  46.   (command "_.undo" "_Group")
  47. ;;;----------------------------------------------------------------------------------------
  48.   (if (not #section_scale#);储存绘图比例的变量
  49.     (progn (setq #section_scale# 15);绘图比例默认值15
  50.            (setq sc #section_scale#)
  51.     ) ;_ 结束progn
  52.     (setq sc #section_scale#)
  53.   ) ;_ 结束if
  54.   (if (not #section_dir#);储存剖面(1)&断面(2)符号的变量
  55.     (progn (setq #section_dir# "1");剖面(1)&断面(2)符号默认值1
  56.            (setq dir #section_dir#)
  57.     ) ;_ 结束progn
  58.     (setq dir #section_dir#)
  59.   ) ;_ 结束if
  60. ;;;----------------------------------------------------------------------
  61.   (setq pt1 (getpoint "\n起点: "))
  62.   (princ (strcat "\n当前绘图比例1: "
  63.                  (rtos #section_scale#)
  64.                  " ; 当前剖面(1)&断面(2)符号: "
  65.                  #section_dir#

  66.          )                                ;strcat
  67.   )                                        ;princ
  68.   (while (not whi)
  69.     (initget 127 "S E W")
  70.     (setq pt2 (getpoint pt1 "\n指定终点或[绘图比例(S)/剖面&断面(E)]: "))
  71.     (cond
  72.       ((equal pt2 "S")
  73.        (pset '#section_scale# getreal "\n请输入绘图比例")
  74.        (setq sc #section_scale#)
  75.       )                                        ;cond #1
  76.       ((equal pt2 "E")
  77.        (initget 0 "1 2")
  78.        (pset '#section_dir#
  79.              getkword
  80.              "\n请选择剖面(1)/断面(2)?"
  81.        ) ;_ 结束pset
  82.        (setq dir #section_dir#)
  83.       )                                        ;cond #2
  84.       ((equal (type pt2) 'LIST)
  85.        (setq whi T)
  86.       )                                        ;cond #4
  87.       (T
  88.        (princ
  89.          "\n无效输入. 需要一个点或设置默认值:绘图比例/剖面&断面."
  90.        ) ;_ 结束princ
  91.       )                                        ;cond #5
  92.     )                                        ;cond close
  93.   )                                        ;while
  94. (grvecs (list 256 pt1 pt2))
  95. ;;;----------------------------------------------------------------------
  96.   (setq p3 (getpoint "\n点取剖视方向 : "))
  97.   (setq        ang  (angle pt1 pt2)
  98.         p3a  (polar p3 (- ang (* pi 0.5)) 1000)
  99.         p3b  (inters pt1 pt2 p3 p3a nil)
  100.                                         ;dist (distance p3b p3)
  101.         ang2 (angle p3b p3)
  102.         ang3 (- ang ang2)
  103.   ) ;_ 结束setq
  104.   (if (or (> ang3 0) (< ang3 (- 0 pi)))
  105.     (setq ang4 0)
  106.     (setq ang4 pi)
  107.   ) ;_ 结束if
  108. ;;;----------------------------------------------------------------------
  109.   (setq
  110.     w (* 0.7 sc)
  111.     h (* 5 sc)

  112.   ) ;_ 结束setq
  113.   (setq
  114.     po3          (polar pt1 (+ ang (* 1.5 pi) ang4) (* 20 sc))
  115.     po4          (polar pt2 (+ ang (* 1.5 pi) ang4) (* 20 sc))
  116.     po3_3 (polar pt1 (+ ang (* 1.5 pi) ang4) (* 10 sc))
  117.     po4_3 (polar pt2 (+ ang (* 1.5 pi) ang4) (* 10 sc))
  118.     po3_1 (polar po3_3 (+ ang (* 1.0 pi)) (* 2.8 sc))
  119.     po4_1 (polar po4_3 (+ ang (* 1.0 pi)) (* 2.8 sc))
  120.     po3_2 (polar po3_3 ang (* 2.8 sc))
  121.     po4_2 (polar po4_3 ang (* 2.8 sc))
  122.   ) ;_ 结束setq

  123.   (grvecs (list        256    pt1    po3    256    pt2           po4          256         po3
  124.                 po3_1  256    po3    po3_2  256           po3_1  po3_2         256
  125.                 po4    po4_1  256    po4    po4_2  256          po4_1         po4_2
  126.                ) ;_ 结束list
  127. ;_ 结束list
  128.   ) ;_ 结束grvecs
  129.    ;;;----------------------------------------------------------------------

  130.   (if (not #section_a#)
  131.     (setq #section_a# "1")
  132.   ) ;_ 结束if
  133.   (pset '#section_a# getstring "\n输入剖面号")
  134.   (setq a #section_a#)
  135.   ;;----------------------------------------------------------------------
  136.   
  137.   (setvar "plinewid" w)
  138.   (setvar "osmode" 0)
  139.   ;;----------------------------------------------------------------------
  140.   (cond        ((eq dir "1")
  141.          (setq
  142.            pt3 (polar pt1 (+ ang (* 1.5 pi) ang4) (* 4 sc))
  143.            pt4 (polar pt2 (+ ang (* 1.5 pi) ang4) (* 4 sc))
  144.            pt5 (polar pt1 ang (* 6 sc))
  145.            pt6 (polar pt2 (+ ang (* 1.0 pi)) (* 6 sc))
  146.            pt7 (polar pt1 (+ ang (* 1.5 pi) ang4) (* 8 sc))
  147.            pt8 (polar pt2 (+ ang (* 1.5 pi) ang4) (* 8 sc))
  148.          ) ;_ 结束setq
  149.          (setlay "PUB_DIM" 136)
  150.          (command "pline" pt5 pt1 pt3 "")
  151.          (command "pline" pt6 pt2 pt4 "")
  152.          (setlay "PUB_text" 7)
  153.          (command "text" "j" "mc" pt7 h "0" a)
  154.          (command "text" "j" "mc" pt8 h "0" a)
  155.         )
  156.         ((eq dir "2")
  157.          (setq
  158.            pt3 (polar pt1 (+ ang (* 1.0 pi)) (* 4 sc))
  159.            pt4 (polar pt2 ang (* 4 sc))
  160.            pt5 (polar pt1 ang (* 4 sc))
  161.            pt6 (polar pt2 (+ ang (* 1.0 pi)) (* 4 sc))
  162.            pt7 (polar pt1 (+ ang (* 1.5 pi) ang4) (* 4 sc))
  163.            pt8 (polar pt2 (+ ang (* 1.5 pi) ang4) (* 4 sc))
  164.          ) ;_ 结束setq
  165.          (setlay "PUB_DIM" 136)
  166.          (command "pline" pt5 pt3 "")
  167.          (command "pline" pt6 pt4 "")
  168.          (setlay "PUB_text" 7)
  169.          (command "text" "j" "mc" pt7 h "0" a)
  170.          (command "text" "j" "mc" pt8 h "0" a)
  171.         )
  172.   ) ;_ 结束cond
  173.   ;;-------------------------------------------------------------------------------
  174.   (command "_.undo" "_end")
  175.   (setq *error* olderr)                        ;正常结束程序时恢复默认
  176.   (setvar "osmode" oldosm)
  177.   (setvar "plinewid" oldpli)
  178.   (setvar "CLAYER" oldcla)
  179.   (princ
  180.     "\n谢谢使用!!--------------------------yjtdkj8156262@163.com"
  181.   ) ;_ 结束princ
  182.   (PRINC)
  183. ) ;_ 结束defun



  184.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-15 20:02:02 | 显示全部楼层
程序测试通过可以用。
改进:可以考虑增加类似“建施-1”的文本功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-15 22:02:21 | 显示全部楼层
这样的话就必须对“建施-5”等文本有个对齐方式的判断,不然的话文字很容易跑到剖切符号上去,你看看我的思路对不对?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-15 22:11:08 | 显示全部楼层
如果嫌程序判断麻烦,可以提示输入内容,再让用户指定放置位置。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-12-15 22:23:11 | 显示全部楼层
没必要搞那么复杂,越复杂越不好用

其实预览过程就只要是画线(command "line") 这样中间undo就直接了
画完了,给个方向,改成剖切符号.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-15 22:28:19 | 显示全部楼层
那就须要在指定位置时对文字有个预览的功能了,我还比较菜,请大侠多多指教!!^_^
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-12-15 22:32:18 | 显示全部楼层
文字有个预览?
给完方向再文字吧,程序中难道还点出文字的点?
肯定是完了再调整一下.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 19:23 , Processed in 0.249691 second(s), 61 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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