明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 948|回复: 3

选择集:定点、角度动态4镜像(源码)

[复制链接]
发表于 2022-12-18 10:16 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2022-12-18 10:45 编辑

分享函数,灵活运用,可以做出非常玄的效果
  • ;移除嵌套表中的所有nil元素----(一级)------
  • ;;(remove-nil '("毛主席" (1 nil 2 nil 3) nil (nil nil (nil) )))
  • (defun remove-nil (lst)
  •   (if (= (type lst) 'list)
  •     (vl-remove nil (mapcar 'remove-nil (vl-remove nil lst)))
  •     lst
  •   )
  • )
  • ;;存储系统变量-------(一级)--------------
  • ;;lis 系统变量表 '("osmode" "cmdecho" "ORTHOMODE")
  • (defun sysvar (lis / n)
  •   (setq e_lst (remove-nil (mapcar (function (lambda (n) (if (getvar n) (list 'setvar n (getvar n))))) lis)))
  •   e_lst
  • )
  • ;;4等分象限函数-----(一级)-------
  • ;;p0 定点  p1 位置落在不同象限,返回 1 2 3 4
  • (defun sl-4p (p0 p1 / x0 y0 x1 y1) ;;象限
  •   (setq x0 (car p0) y0 (cadr p0) x1 (car p1) y1 (cadr p1))
  •   (if (> x1 x0)
  •     (if (> y1 y0) (setq xx 1) (setq xx 4))
  •     (if (> y1 y0) (setq xx 2) (setq xx 3))
  •   )
  •   xx
  • )
  • ;;动态选择集 基点 角度 MIRROR------(一级)-----
  • ;ang 为初始角度
  • (defun dtmirr (ss p0 ang / gr p1 e_lst px py dqxx xx)   
  •   (setq e_lst (sysvar '("osmode" "cmdecho" "ORTHOMODE")))  
  •   (setvar "cmdecho" 0)
  •   (setvar "OSMODE" 0) ;;捕捉关闭
  •   (setvar "ORTHOMODE" 0) ;;正交关闭
  •   (if (= p0 nil)
  •     (setq p0 (cadr (grread 5))) ;0点为nil时,取选择集中心,测试失败,原因不明
  •   )
  •   (setq px (polar p0 ang 50) py (polar p0 (+ ang pi2) 50) dqxx 1)
  •   (while (and (setq gr (grread t 15 2) p1 (cadr gr)) (= (car gr) 5))
  •     (setq xx (sl-4p p0 p1))
  •     (redraw)
  •     (grdraw p0 p1 3 2)
  •     ;;(slslx p0 ang) ;点p0处,以ang角度显示交叉矢量线
  •     (if (/= dqxx xx)
  •       (progn
  •         (if (= dqxx 1)
  •           (cond
  •             ((= xx 2)(command "mirror" ss "" p0 py "y"))
  •             ((= xx 3)(command "mirror" ss "" p0 py "y")(command "mirror" ss "" p0 px "y"))
  •             ((= xx 4)(command "mirror" ss "" p0 px "y"))
  •           )
  •         )
  •         (if (= dqxx 2)
  •           (cond
  •             ((= xx 1)(command "mirror" ss "" p0 py "y"))
  •             ((= xx 3)(command "mirror" ss "" p0 px "y"))
  •             ((= xx 4)(command "mirror" ss "" p0 py "y")(command "mirror" ss "" p0 px "y"))
  •           )
  •         )
  •         (if (= dqxx 3)
  •           (cond
  •             ((= xx 1)(command "mirror" ss "" p0 py "y")(command "mirror" ss "" p0 px "y"))
  •             ((= xx 2)(command "mirror" ss "" p0 px "y"))
  •             ((= xx 4)(command "mirror" ss "" p0 py "y"))
  •           )
  •         )
  •         (if (= dqxx 4)
  •           (cond
  •             ((= xx 1)(command "mirror" ss "" p0 px "y"))
  •             ((= xx 2)(command "mirror" ss "" p0 py "y")(command "mirror" ss "" p0 px "y"))
  •             ((= xx 3)(command "mirror" ss "" p0 py "y"))
  •           )
  •         )
  •       )
  •     )
  •     (setq dqxx xx)
  •   )
  •   (redraw)
  •   (mapcar 'eval e_lst)
  •   (princ)
  • )











本帖子中包含更多资源

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

x
发表于 2023-8-17 14:13 | 显示全部楼层
感谢楼主分享,非常好的功能函数
发表于 2023-8-17 16:35 | 显示全部楼层
大师,能不能给个完整的图块原地镜像的例子,我这边写的不成功,参数少
  1. (DEFUN C:tt6 (/obj p0 ang1)
  2.   (princ "\n选择对象定点角度动态镜像:")
  3.   (setq obj (ssget))                  
  4.   (setq ang1 0)
  5.   (dtmirr obj p0 ang1)
  6. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 00:05 , Processed in 0.249519 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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