明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1434|回复: 8

百叶窗关于捕捉点及记忆功能

[复制链接]
发表于 2020-8-5 16:42:47 | 显示全部楼层 |阅读模式
本帖最后由 999999 于 2020-8-5 17:25 编辑

各路大神,以下是春婵大神提供的百叶窗源码改动了一点:
目前遇到的问题就是(运行命令生成百叶完成后,捕捉点可以还原(如图1),但是运行命令后,我中途取消命令(则变成了图2))
麻烦大神帮忙更改一下代码:1.就是如果中途退出捕捉点还原为(生成百叶后的捕捉点状态)2.就是宽度值和分隔近似值增加记忆功能
(defun c:by ()
  (setvar "CMDECHO" 0)
  (command "_undo" "be")
  (setq os (getvar "osmode"))
  (setvar "osmode" 33)
  (setq pt1 (getpoint "\n框选范围:")
pt3 (getcorner pt1)
pt2 (list (car pt1) (cadr pt3))
  )
  (setq kd (getreal "\n百叶框和条宽度<90>: "))
  (if (null kd)
    (setq kd 90)
  )
  (setq jd (getreal "\n百叶分隔近似值间距<108>: "))
  (if (null jd)
    (setq jd 108)
  )
  (setq dd  (- (distance pt1 pt2) kd)
nmb (/ dd (+ kd jd))
nmb (atoi (rtos nmb 2 0))
dst (/ dd nmb)
ang (angle pt2 pt1)
nmb (1- nmb)
  )
  (setvar "osmode" 0)
  (setq p1 (list (+ kd (car pt2)) (+ kd (cadr pt2))))
  (setq p2 (list (- (car pt3) kd) (+ dst (cadr pt3))))
  (command ".rectang" "_non" pt1 "_non" pt3)
  (xlr_submod (entlast) 8 "layer2")
  (command ".rectang" "_non" p1 "_non" p2)
  (xlr_submod (entlast) 8 "layer7")
  (setq recSS (entlast))
  (command ".chprop" recSS "" "c" Bylayer "")
  (command "_.COPY" recSS "" "M" p1)
  (repeat nmb
    (command (setq p1 (polar p1 ang dst)))
  )
  (command "")
  (setvar "osmode" os)
  (command "_undo" "e")
  (setvar "CMDECHO" 1)
  (princ)
)
(defun xlr_submod (ename code newvalue / a el)
  (if (setq a (assoc code (setq el (entget ename))))
    (entmod (subst (cons code newvalue)
     a
     el
     )
    )
    (entmod (append el (list (cons code newvalue))))
  )
  (entupd ename)
  ename
)
(princ "\n本程序版权所有 盗用必究!")
(princ "\n本程序命令:BY")
(princ)

本帖子中包含更多资源

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

x
发表于 2020-8-6 20:18:18 | 显示全部楼层
代码已经修改实现你提出的2个问题,里面错误和中途退出时恢复捕捉的函数,还是常用的代码开头的写法,可以直接复制使用,代码最后还有些小问题,我没有改了,我的春婵百叶现在已经用对话框形式了,代码中有记忆的写法也可以写到其他的程序中。
  附件下载

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-6 10:13:29 | 显示全部楼层
1. 你需要在error handle 函数中恢复原有的sysvar的值。
2. 关于用到的数值的保存与读取,简单点你就用注册表。
 楼主| 发表于 2020-8-6 11:48:06 | 显示全部楼层
e2002 发表于 2020-8-6 10:13
1. 你需要在error handle 函数中恢复原有的sysvar的值。
2. 关于用到的数值的保存与读取,简单点你就用注 ...

谢谢大神,我不懂你说的这些,本人是小白一枚
发表于 2020-8-6 13:18:46 | 显示全部楼层

是个很好地方法  感谢分享
发表于 2020-8-6 20:19:06 | 显示全部楼层
第一次输入数值后,后面的都有记忆了
 楼主| 发表于 2020-8-6 21:03:24 | 显示全部楼层
hhh454 发表于 2020-8-6 20:18
代码已经修改实现你提出的2个问题,里面有错误和中途退出时恢复捕捉的函数,还是常用的代码开头的写法,可 ...

谢谢大神,已经下载使用了,很好用
发表于 2022-10-31 23:45:54 来自手机 | 显示全部楼层
hhh454 发表于 2020-8-6 20:18
代码已经修改实现你提出的2个问题,里面有错误和中途退出时恢复捕捉的函数,还是常用的代码开头的写法,可 ...

来学习来学习
发表于 2022-12-2 21:14:57 | 显示全部楼层
good idea,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 09:31 , Processed in 0.170474 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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