找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 884|回复: 6

[编程申请]:一个偏移直线一定距离得到xline的程序

[复制链接]
发表于 2006-9-29 21:08:52 | 显示全部楼层 |阅读模式

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

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

×
选择一条直线,
使用getdist方法,建构一xline和所选择的线平行,且两者的距离是整数(fix)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-9-29 22:23:24 | 显示全部楼层
  1. [FONT=courier new](defun c:test ()
  2.   (CMDLA0)
  3.   (if (null dist)
  4.     (setq dist 100)
  5.   )
  6.   (setq        s1   (car (USEL 0 "LINE" "LINE线"))
  7.         pt10 (xyp-get-dxf 10 s1)
  8.         dist (UDIST 1 "" "距离<输入或鼠标直接量取>" dist nil)
  9.         dist (fix dist)
  10.         pt   (UPOINT 1 "" "点" PT pt10)
  11.   )
  12.   (setvar "OFFSETDIST" dist)
  13.   (command "offset" "" s1 pt "")
  14.   (setq        s1   (entlast)
  15.         pt10 (xyp-get-dxf 10 s1)
  16.         pt11 (xyp-get-dxf 11 s1)
  17.   )
  18.   (entdel s1)
  19.   (command "xline" pt10 pt11 "")
  20.   (CMDLA1)
  21. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-29 23:49:41 | 显示全部楼层
命令: 'VLIDE
命令:
命令: ss ; 错误: *error* 函数中出错无函数定义: REERR

(defun c:ss ()
  (CMDLA0)
  (if (null dist)
    (setq dist 100)
  )
  (setq        s1   (car (USEL 0 "LINE" "LINE线"))
        pt10 (xyp-get-dxf 10 s1)
        dist (UDIST 1 "" "距离<输入或鼠标直接量取>" dist nil)
        dist (fix dist)
        pt   (UPOINT 1 "" "点" PT pt10)
  )
  (setvar "OFFSETDIST" dist)
  (command "offset" "" s1 pt "")
  (setq        s1   (entlast)
        pt10 (xyp-get-dxf 10 s1)
        pt11 (xyp-get-dxf 11 s1)
  )
  (entdel s1)
  (command "xline" pt10 pt11 "")
  (CMDLA1)
)


;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun CMDLA0 ()
  (defun *error* (msg)
    (princ "错误 : ")
    (princ msg)
    (CMDLA1)
  )
  (SetQ        **SysVarNL**
         '("AUNITS"         "AUPREC"      "ATTDIA"             "BLIPMODE"
           "CECOLOR"         "CELTYPE"     "CLAYER"             "CMDECHO"
           "DIMZIN"         "EXPERT"      "HIGHLIGHT"   "LUNITS"
           "LUPREC"         "OSMODE"      "ORTHOMODE"   "TEXTSTYLE"
           "PLINEWID"         "dimdec"      "dimadec"     "regenmode"
           "pickbox"
          )
  )
  (SetIErr)
  (command "ucs" "")
  (xyp-jzhz)
  (command ".undo" "BE")
  (princ)
)
(Defun SetIErr (/ sv)
  (If (= 'LIST (Type *error*))
    (Alert "错误:最后一个(SetIErr)函数没有配对的(ReErr)!")
    (Progn
      (SetQ **svarl** '())
      (ForEach sv **SysVarNL**
        (SetQ **svarl** (Cons (GetVar sv) **svarl**))
      )
      (ForEach sv '("ATTDIA"           "BLIPMODE"          "CMDECHO"
                    "ORTHOMODE"           "DIMZIN"          "plinewid"
                    "regenmode"           "ucsfollow"
                   )
        (SetVar sv 0)
      )
      (setvar "ATTREQ" 1)
      (SetVar "EXPERT" 5)
      (setvar "pickbox" 5)
      (setvar "pickadd" 1)
      (setvar "aperture" 5)
      (Defun-Q *error* (st) (ReErr))
    )
  )
)


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

使用道具 举报

发表于 2006-9-30 00:28:05 | 显示全部楼层
  1. [FONT=courier new](load "xyp_lib.vlx")
  2. ;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
  3. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  4. ★1·在acad.lsp中增加(load"xyp_lib.vlx")
  5. ■2·在每个程序内增加(load"xyp_lib.vlx")
  6. ■3·在command下,输入(load"xyp_lib.vlx")
  7. ■4·在菜单.mnl中增加(load"xyp_lib.vlx")
  8. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  9. [COLOR=red] ★通用函数下载地址:[/COLOR]
  10. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  11. [url]http://free.ys168.com/?xyp1964[/url]
  12. |;

  13. (defun c:test ()
  14.   (CMDLA0)
  15.   (if (null dist)
  16.     (setq dist 100)
  17.   )
  18.   (setq        s1   (car (USEL 0 "LINE" "LINE线"))
  19.         dist (fix (UDIST 1 "" "距离<输入或鼠标直接量取>" dist nil))
  20.         pt   (UPOINT 1 "" "方向点" PT (xyp-get-dxf 10 s1))
  21.   )
  22.   (setvar "OFFSETDIST" dist)
  23.   (command "offset" "" s1 pt "")
  24.   (setq s1 (entlast))
  25.   (command "xline" (xyp-get-dxf 10 s1) (xyp-get-dxf 11 s1) "")
  26.   (entdel s1)
  27.   (CMDLA1)
  28. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-30 00:37:30 | 显示全部楼层
谢谢,能不能修改下,变成
在getdist时判断了偏移方向,省去给方向点的步骤。
另:我所选择的直线都是竖直线或水平线,故希望能实现通过dxf码获得直线的任一端点值,将之设置为getdist的基准。
程序相当实用,可以记录上次偏移的数值。

提个不情之请,能否做成不loadxyp_lib.VLX的。

对了,有个问题老早就想问了,
如果程序函数是定义成c:test
则有时会提示
分配给保护的符号:
c:test
是否进入中断循环?
最近经常出现,无论是lisplink还是visual lisp,有办法避免或忽略么?

问题的提出是,我为了方便测试程序,将test命令做成了按钮,但是如果老是提示这个东东,会有点烦。

命令: ap
APPLOAD 已成功加载 xyp_lib.VLX。


命令:
命令:
命令: ss
选择LINE线 :
距离<输入或鼠标直接量取><100.00>: 指定第二点:
方向点:
程序执行完毕!

命令: *取消*

命令: l LINE 指定第一点:
指定下一点或 [放弃(U)]:
指定下一点或 [放弃(U)]: *取消*

命令: ss
选择LINE线 :
距离<输入或鼠标直接量取><194.00>: 指定第二点:
方向点<1801.65, 1272.19, 0.00>:
程序执行完毕!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2006-9-30 01:15:32 | 显示全部楼层
要睡觉了,明天再试。

操作方式变了,程序变得通用了(最后才选线)不过对于我就不是很实用了,因为没法先选直线,获得其端点将之设置为getdist的基准。减小操作次数。

而有个问题就是,getdist时也关闭了捕捉,我得再启用一次。

在某些程序启用捕捉会导致问题,如果是按先选直线,获得将之设置为getdist的基准的方法,我估计应该是没问题的,事实上,不需要去修改捕捉设置。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-21 02:49 , Processed in 0.187206 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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