明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: moshouhot

求一个根据一组设定值进行偏移的LSP程序

  [复制链接]
发表于 2012-7-25 10:25:13 | 显示全部楼层
... 如果已经提前选中线段 ...

(setq ss (ssgetfirst)
      ee (ssname (cadr ss) 0)
)

但如此会少了点选时的那个 选取点
得先知道 图元类别是什么,才好写出对映的代码 ...
 楼主| 发表于 2012-7-26 21:18:20 | 显示全部楼层
Andyhon 发表于 2012-7-25 10:25
... 如果已经提前选中线段 ...

(setq ss (ssgetfirst)

大侠,如果第一个请求如果很难实现,第二个请求:“在第二次偏移的时候,您的程序确实存储了第一次偏移的设定值,但显示的方法可不可以优化一下:能不能改成“Specify offset distance or<2 6 23>:”。这样就节省了一个敲No,然后输入设定值的步骤。”有实现的可能么?谢谢了
发表于 2012-7-26 22:10:07 | 显示全部楼层


  1. (defun ustr (bit msg def spflag / inp nval)
  2.   (if (and def (/= def ""))
  3.     (setq msg (strcat "\n" msg " <" def ">: ")
  4.           inp (getstring msg spflag)
  5.           inp (if (= inp "")
  6.                 def
  7.                 inp
  8.               )
  9.     )
  10.     (progn
  11.       (if (= " " (substr msg (strlen msg) 1))
  12.         (setq msg (strcat "\n" (substr msg 1 (1- (strlen msg))) ": "))
  13.         (setq msg (strcat "\n" msg ": "))
  14.       )
  15.       (if (= bit 1)
  16.         (while (= "" (setq inp (getstring msg spflag)))
  17.           (prompt "\nInvalid string.")
  18.         )
  19.         (setq inp (getstring msg spflag))
  20.       )
  21.     )
  22.   )
  23. )

  24. (Defun Off_Aux (ddL pnt)
  25.   (setq Hdd 0)
  26.   (while (setq dd (car ddL))
  27.     (setq Hdd (+ Hdd dd))
  28.     (command "_.offset" Hdd ee Pnt "")
  29.     (setq ddL (cdr ddL))
  30.   )
  31. )

  32. (defun C:OFFSETS ()
  33.   (setq a (uStr 0 "\nSpecify offset distance" *HddLst* T))
  34.   (setq *HddLst* a)
  35.   (setq ddLst (read (strcat "(" a ")")))
  36.   (cond
  37.     ;|
  38.     ((setq ss (cadr (ssgetfirst)))
  39.      (setq ee (ssname ss 0))
  40.     )
  41.     |;
  42.     (T
  43.      (prompt "\nSelect object to offset: ")
  44.      (while (not (setq ee (entsel))))
  45.     )
  46.   )

  47.   (setq Pt1 (getpoint "\nSpecify point on side to offset: "))

  48.   (cond
  49.     ((null pt1)
  50.      (setq p5  (osnap (cadr ee) "Mid")
  51.            pa  (osnap (cadr ee) "end")
  52.            vv  (angle pa p5)
  53.            pt1 (polar p5 (+ vv 1.5) 8)
  54.            pt2 (polar p5 (- vv 1.5) 8)
  55.      )
  56.     )
  57.     (T (setq pt2 nil))
  58.   )
  59.   (Off_Aux ddLst pt1)
  60.   (if pt2
  61.     (Off_Aux ddLst pt2)
  62.   )
  63.   (princ)
  64. )

评分

参与人数 2明经币 +2 收起 理由
moshouhot + 1 太棒了!
自贡黄明儒 + 1 很给力!

查看全部评分

发表于 2012-7-27 08:34:24 | 显示全部楼层
cad自带的偏移就可以记得值啊(我是06cad)另外,贱人工具箱5.7里面有个双向偏移,希望对你有帮助
 楼主| 发表于 2012-7-27 17:24:05 | 显示全部楼层
Andyhon 发表于 2012-7-26 22:10

太棒了,看出来您是重新写了代码的。我测试了下针对直线、圆弧、多段线都很好用,但不能很好支持多义线。另外之前当出现Specify point on side to offset: <4 3 2>时,点空格不能正常进入下一步操作,可不可以侦测到空格就进入下一步,侦测到数字就输入新的数字呢?
发表于 2012-7-27 17:52:04 | 显示全部楼层
本帖最后由 Andyhon 于 2012-7-27 17:52 编辑

(setq Pt1 (getpoint "\nSpecify point on side to offset: "))
何來 <4 3 2>
 楼主| 发表于 2012-7-29 22:40:37 | 显示全部楼层
Andyhon 发表于 2012-7-27 17:52
(setq Pt1 (getpoint "\nSpecify point on side to offset: "))
何來

可能你误解了我的意思。我的意思是第二次使用OFFSETS的时候,默认是使用第一次输入的值,第二次使用时到达“Specify point on side to offset”这一步时,因为有以前输入的值,这时候我用空格是不能进入下一步操作的,而回车却可以。总感觉是个小BUG,这个问题能帮忙解决下么?
发表于 2012-7-30 08:07:33 | 显示全部楼层
   ...用空格是不能进入下一步操作的,而回车却可以...
您用的 CAD 版号是?   

Command: (ver)
"Visual LISP 2004 (en)"

Command: (setq Pt1 (getpoint "\nSpecify point on side to offset: "))
Specify point on side to offset:  nil
(此处以按 Space bar 回应 ---> nil Enter(回车) 同)
发表于 2012-9-27 09:33:44 | 显示全部楼层
好程序,学习了!
发表于 2014-6-17 15:09:18 | 显示全部楼层
Andyhon 发表于 2012-7-26 22:10

太棒了 支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 22:57 , Processed in 0.193295 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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