明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1481|回复: 14

[提问] 已解决(求助)以下百叶窗源码是春婵大神写的,现在请教一下各位大神,能否帮忙改成90度

[复制链接]
发表于 2020-12-16 17:28:50 | 显示全部楼层 |阅读模式
本帖最后由 999999 于 2020-12-18 18:18 编辑

麻烦各位大神出手,看一下是否能够把以下百叶的源码改成90度的,小弟在此谢谢各位大神啦
;百叶窗
(vl-load-com)
(defun c:by(/ osmode_bak clayer_bak pt1 pt3 pt2 kd jd dd nmb dst ang p1 p2 recss bylayer)
(defun *MYERR* (MSG)
(setvar "CMDECHO" CMD_OLD)
(setvar "OSMODE" OS_OLD)
(setq *ERROR* *OLDERR*)
(if (= MSG "春婵程序完美退出,谢谢使用。")
(princ (strcat "\\n>>>" MSG))
(princ "\\n>>>虽然中途退出了,对象捕捉已经被恢复。")
)
(princ)
)
(setq *OLDERR* *ERROR*
       *ERROR*  *MYERR*
       OS_OLD   (getvar "OSMODE")
       CMD_OLD  (getvar "CMDECHO")
)
;----开始系统变量备份----
(setvar "cmdecho" 0);_关闭命令提示
(command "._undo" "_begin")
(setq osmode_bak (getvar "osmode"));_记录捕捉
(setvar "osmode" 0);_关闭捕捉
(setq clayer_bak (getvar "clayer"));_记录当前图层
;----绘制部分开始----
  (setvar "osmode" 2065)
  (setq pt1 (getpoint "\n框选范围:")
        pt3 (getcorner pt1)
        pt2 (list (car pt1) (cadr pt3))
  )
  (if *kd* (setq Newkd (getreal (strcat  "\n百叶框和条宽度:<" (rtos *kd* 2 2) ">:") ) )
      (setq Newkd (getreal  "\n百叶框和条宽度:")))
  (if (null Newkd) (setq Newkd *kd*) (setq *kd* Newkd));记忆宽
  (if *jd* (setq Newjd (getreal (strcat  "\n百叶分隔近似值间距:<" (rtos *jd* 2 2) ">:") ) )
      (setq Newjd (getreal  "\n百叶分隔近似值间距:")))
  (if (null Newjd) (setq Newjd *jd*) (setq *jd* Newjd));记忆间距
  (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" osmode_bak);_还原捕捉
(setvar "clayer" clayer_bak);_还原图层
(command "._undo" "_end")
(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**********春婵程序加载完成,启动命令:by **********")
(princ "\n")
发表于 2020-12-17 22:45:02 | 显示全部楼层
本帖最后由 muwind 于 2020-12-17 22:55 编辑
999999 发表于 2020-12-17 08:50
您好,我这边用您的代码替换了,可是没有作用呢,我这边猜测是不是这一行代码的问题,可是我不知道怎么表 ...

我试过了 可以的,就是不知道是不是你要的效果(command "") 这个会造成 重复 by命令

啰嗦下算法:这个就是获取一个矩形框的pt1和pt3 (对角)
原程序根据pt1的X和pt3的Y求了个pt2 也就是矩形的做下角
我修改后求的是右上角的点,
用左下角的点其实也可以绘制,主要是为了将就原来的代码求得 PT1和PT2的距离用来计算百叶的数量

利用PT1和PT2的距离用来计算百叶的数量后就是绘制矩形框了,然后就是复制矩形
整个算法非常的简单,也很单纯,很容易出问题。


本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
999999 + 1 赞一个!

查看全部评分

回复 支持 2 反对 0

使用道具 举报

发表于 2020-12-20 20:08:21 | 显示全部楼层
999999 发表于 2020-12-19 08:07
春婵大神,果然还是更新了呀,,您的工具箱啥时候,准备发布呀非常期待 ...

初略完善了下,这工作量绝对值一个币了修改特性的我删除了,有需要可以自行加上

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-19 00:05:08 | 显示全部楼层

回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-17 10:55:43 | 显示全部楼层

http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTEyMzAzfGQ3ZGMwZWM4MzNiMjFiOGJkM2YzZDkxZmNiNmJjYjU4fDE3NDc0NTMzNDk%3D&request=yes&_f=.gif

本帖子中包含更多资源

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

x

点评

院长的这个才是好工具,不规则图形,厉害  发表于 2020-12-18 23:40
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-16 23:39:30 | 显示全部楼层
只能从左上右下的拾取,很不随性啊。只要修改如下部分就可以实现你的要求(不需要更改的未列出),不过建议楼主自我研究下
  1.   
  2. .......
  3. (setq pt1 (getpoint "\n框选范围:")
  4.         pt3 (getcorner pt1)
  5.         pt2 (list (car pt3) (cadr pt1))
  6.   )
  7.        
  8. ..........
  9.   (setvar "osmode" 0)
  10.   (setq p1 (list (-  (car pt2) *kd*) (-  (cadr pt2) *kd*)))
  11.   (setq p2 (list (-  (car pt3) dst)  (+   (cadr pt3) *kd*)))
  12. .....

 楼主| 发表于 2020-12-17 08:50:40 | 显示全部楼层
muwind 发表于 2020-12-16 23:39
只能从左上右下的拾取,很不随性啊。只要修改如下部分就可以实现你的要求(不需要更改的未列出),不过建议 ...

您好,我这边用您的代码替换了,可是没有作用呢,我这边猜测是不是这一行代码的问题,可是我不知道怎么表达90度,
ang (angle pt2 pt1)

本帖子中包含更多资源

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

x
 楼主| 发表于 2020-12-17 11:02:24 | 显示全部楼层
xyp1964 发表于 2020-12-17 10:55
http://bbs.mjtd.com/forum.php?mod=attachment&aid=MTEyMzAzfGQ3ZGMwZWM4MzNiMjFiOGJkM2YzZDkxZmNiNmJjYjU4fDE3NDc0NTMzNDk%3D&request=yes&_f=.gif

您好,院长大人,下载了您的工具箱,没有看到那个百叶窗的插件呢

本帖子中包含更多资源

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

x

点评

在模型工具里,或命令搜索 “百叶窗”  发表于 2020-12-17 14:58
 楼主| 发表于 2020-12-18 08:21:43 | 显示全部楼层
muwind 发表于 2020-12-17 22:45
我试过了 可以的,就是不知道是不是你要的效果(command "") 这个会造成 重复 by命令

啰嗦下算法:这个 ...

谢谢大神了,,真的有用
 楼主| 发表于 2020-12-19 08:07:26 | 显示全部楼层

春婵大神,果然还是更新了呀,,您的工具箱啥时候,准备发布呀非常期待哟
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-17 11:42 , Processed in 0.188586 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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