明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6497|回复: 25

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

  [复制链接]
发表于 2012-7-23 20:31:49 | 显示全部楼层 |阅读模式
本帖最后由 moshouhot 于 2012-7-23 20:35 编辑

我在论坛里搜索了一个LSP程序,已经能部分实现我想要的功能,但希望各位大侠能把这段代码完善一下,谢谢各位了:
  1. ;;;“赖版”程序作一点小小的修改;;;
  2. ;;;---------------;;;
  3. (defun C:OFFSETS (/ A S N PT1 AA AAA AL)
  4.   (setq A "")
  5.   (while (= A "")
  6.     (setq A (getstring "\nSpecify offset distance :"))
  7.                     ;;输入如:2/6/23…..
  8.   )
  9.   (setq A (strcat A "/"))
  10.   (prompt "\nSelect object to offset: ")
  11.   (while (= AA nil)
  12.     (setq AA (entsel))
  13.   )
  14.   (initget 1)
  15.   (setq PT1 (getpoint "\nSpecify point on side to offset: "))
  16.   (setq AL (+ (strlen A) 1))
  17.   (setq N 1)
  18.   (setq S "" S0 0)
  19.   (setq AAA (car AA))
  20.   (while (not (= N AL))
  21.     (if    (= (substr A N 1) "/")
  22.       (progn
  23. (setq s0 (+ s0 (atof s)))
  24.     (command "_.offset" S0 AAA PT1 "")
  25.     (setq S "")
  26.       )
  27.       (setq S (strcat S (substr A N 1)))
  28.     )
  29.     (setq N (1+ N))
  30.   )
  31.   (princ)
  32. )


这个LSP可以根据我输入的如:2/6/23,将线段进行几次偏移。
1、因为我要做一条道路,全线都要偏移,能不能把第一次输入的值记录下来,第二次使用的时候作为默认值对下一个线段进行偏移。
2、偏移的时候,它会提示选择偏移的方向,可不可以在选项里面加一个,如果不选择方向直接空格就默认两侧都进行偏移。
3、还有个小小的请求,能实现最好。就是输入数值的时候可不可以用空格代替“/”,如2 6 23这样,不能实现也没事,关键是前面2个。


"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-1-16 14:24:17 | 显示全部楼层
yanchao316 发表于 2016-6-14 09:36
大神,请问能自己加入预设数据不?比如第一次加载必需输入一个值,我想第一次加载后就能默认一组数据比如

读写外部文件,read-line write-line

或者用词典
(if (not (setq dis-c2v2 (vlax-ldata-get "dict" "dis-c2v2")))
    (setq dis-c2v2 "1")
  )
(vlax-ldata-put "dict" "dis-c2v2" "6")
发表于 2019-6-8 20:08:06 | 显示全部楼层
有时会出现:AutoCAD 变量设置被拒绝: "osmode" nil
发表于 2012-7-23 20:45:30 | 显示全部楼层
试试e派工具箱里的批量偏移功能:plpy
发表于 2012-7-23 22:11:46 | 显示全部楼层
本帖最后由 Andyhon 于 2012-7-24 09:08 编辑

For test only

  1. ;;;「賴版」程序作一點小小的修改;;;
  2. ;;;---------------;;;

  3. (Defun Off_Aux (ddL pnt)
  4.   (setq Hdd 0)
  5.   (while (setq dd (car ddL))
  6.     (setq Hdd (+ Hdd dd))
  7.     (command "_.offset" Hdd ee Pnt "")
  8.     (setq ddL (cdr ddL))
  9.   )
  10. )

  11. (defun C:OFFSETS ()
  12.   (if *HddLst*
  13.     (progn
  14.       (princ "\nOffsetDists ==> ")
  15.       (princ *HddLst*)
  16.       (initget "Yes No")
  17.       (setq Kwd (GetKword "\nSame as above <Yes> / No : "))
  18.     )
  19.     (setq Kwd "No")
  20.   )

  21.   (cond
  22.     ((= Kwd "No")
  23.      (setq A "")
  24.      (while (= A "")
  25.        (setq A (getstring "\nSpecify offset distance : " T))
  26.        ;; 輸入如: 2 6 23…..
  27.      )
  28.      (setq *HddLst* a)
  29.     )
  30.     (T
  31.      (setq a *HddLst*)
  32.     )
  33.   )
  34.   ;; (setq *HddLst* Hddlst)
  35.   (setq ddLst (read (strcat "(" a ")")))
  36.   (prompt "\nSelect object to offset: ")
  37.   (while (not (setq ee (entsel))))

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

  39.   (cond
  40.     ((null pt1)
  41.      (setq p5  (osnap (cadr ee) "Mid")
  42.            pa  (osnap (cadr ee) "end")
  43.            vv  (angle pa p5)
  44.            pt1 (polar p5 (+ vv 1.5) 8)
  45.            pt2 (polar p5 (- vv 1.5) 8)
  46.      )
  47.     )
  48.     (T (setq pt2 nil))
  49.   )

  50.   (Off_Aux ddLst pt1)
  51.   (if pt2
  52.     (Off_Aux ddLst pt2)
  53.   )
  54.   (princ)
  55. )
得依实务完善之 ...

评分

参与人数 1明经币 +1 收起 理由
vlisp2012 + 1 很给力!非常好的程序

查看全部评分

 楼主| 发表于 2012-7-24 08:45:56 | 显示全部楼层
xyp1964 发表于 2012-7-23 20:45
试试e派工具箱里的批量偏移功能:plpy

恩,我在贱人工具箱也找到类似的功能,但是不能同时两侧偏移是个遗憾。
 楼主| 发表于 2012-7-24 08:48:23 | 显示全部楼层
Andyhon 发表于 2012-7-23 22:11
For test only得依实务完善之 ...

大侠,你的代码很棒,美中不足的是不能实现两侧偏移,另外我在运行你的代码的时候提示“Specify point on side to offset: ; 错误: no function definition: SIO”的错误,希望能进一步完善,谢谢了。
发表于 2012-7-24 09:11:57 | 显示全部楼层
Sorry 3# 已订正

在这句
Specify point on side to offset:
[Enter] 空回应即可实现两侧偏移
发表于 2012-7-24 13:13:36 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2012-7-24 20:21:51 | 显示全部楼层
很好 很强大~~
 楼主| 发表于 2012-7-25 09:36:26 | 显示全部楼层
xyp1964 发表于 2012-7-24 13:13

院长的工具也挺好的,但不能完全满足我的要求,我是想让它根据一组设定值(如:3.5 4 6)来进行评议
 楼主| 发表于 2012-7-25 09:46:52 | 显示全部楼层
Andyhon 发表于 2012-7-24 09:11
Sorry 3# 已订正

在这句

Andyhon大侠果然厉害,看来最佳答案非你莫属了,还有个2个小小的问题
1、如果已经提前选中线段,输入命令后,还要让我再选一次线段,能不能把之前选中的线段默认为需要偏移的线段
2、第二次偏移的时候,您的程序确实存储了第一次偏移的设定值,但显示的方法可不可以优化一下:能不能改成“Specify offset distance or<2 6 23>:”。这样就节省了一个敲No,然后输入设定值的步骤。

最后万分感谢Andyhon大侠的相助,你是最棒的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-10-24 04:11 , Processed in 0.225128 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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