明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 107036|回复: 389

[讨论] 【e派】工具箱函数再揭秘及应用实例

    [复制链接]
发表于 2012-7-21 01:18 | 显示全部楼层 |阅读模式
本帖最后由 xyp1964 于 2017-11-20 22:01 编辑

  1. ;; 很多函数都是嵌套的,可能部分函数给得不全,就慢慢完善吧……
  2. ;; xyp-SubUpd 更改图元DXF组码以修改实体属性 (xyp-SubUpd ename code newvalue)
  3. ;|
  4. 功能 : 更改图元、图元表、选择集DXF组码以修改实体属性
  5. 方式 : (xyp-SubUpd 实体名 DXF码 新值)
  6. 实例1 : 改圆半径为500
  7. (xyp-SubUpd (car(entsel"\n选择圆: ")) 40 500)
  8. 实例2 : 改文本为"明经通道"
  9. (xyp-SubUpd (car(entsel"\n选择文本: ")) 1 "明经通道")
  10. 实例3 : 改块的插入点为(0 0 0)
  11. (xyp-SubUpd (car(entsel"\n选择图块: ")) 10 '(0 0 0))
  12. (xyp-SubUpd (ssget) 62 1)
  13. |;
  14. (defun xyp-SubUpd (ename code val / ent x y i s1)
  15.   (cond ((= (type ename) 'ENAME)
  16.   (setq ent (entget ename))
  17.   (if (and (= (type code) 'LIST) (= (type val) 'LIST))
  18.     (mapcar '(lambda (x y) (xyp-SubUpd ename x y)) code val)
  19.     (progn
  20.       (if (= (xyp-dxf code ename) nil)
  21.         (entmod (append ent (list (cons code val))))
  22.         (entmod (subst (cons code val) (assoc code ent) ent))
  23.       )
  24.       (entupd ename)
  25.     )
  26.   )
  27. )
  28. ((= (type ename) 'PICKSET)
  29.   (setq i -1)
  30.   (while (setq s1 (ssname ename (setq i (1+ i))))
  31.     (xyp-SubUpd s1 code val)
  32.   )
  33. )
  34. ((= (type ename) 'LIST)
  35.   (foreach s1 ename (xyp-SubUpd s1 code val))
  36. )
  37.   )
  38.   ename
  39. )


;;实例:
;; 选择集变红色
(xyp-SubUpd (ssget) 62 1)

;; 批量字高改500
(xyp-SubUpd (ssget '((0 . "text"))) 40 500)

;; 直线起点改到原点
(xyp-SubUpd (ssget '((0 . "line"))) 10 '(0 0 0))


本帖子中包含更多资源

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

x

点评

(setq ss (ssget '((0 . "line")))) (repeat (sslength SS) (setq i 0 lst (cons (ssname ss i)lst) i (1+ i))) (mapcar '(lambda (x)(xyp-SubUpd x 62 1)) lst) 只对第一个图元变色,(xyp-SubUpd ss 62   发表于 2012-7-21 11:21

评分

参与人数 15明经币 +15 金钱 +171 收起 理由
BaoWSE + 1 + 20 图文并茂 ,很给力!
林霄云 + 1 + 20 评给第一个。大侠乃集大成者,院长便是。
caoliu023 + 1 + 20 赞一个!
繁花落叶 + 20 很给力!
500w008 + 1 期待院长的全部函数库
luyu9635 + 1 直接加分,其它都是假的
czykx613 + 1 + 5 赞一个!
1993063 + 1
【KAIXIN】 + 2 + 24 很给力!
xiaxiang + 1 好!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2012-8-22 20:10 | 显示全部楼层
请教院长这个函数xyp-sc能公开吗?

点评

xyp-sc是个全局变量,与图纸出图比例相关联  发表于 2012-8-22 20:45
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2018-11-16 20:59 | 显示全部楼层
  1. ;; xyp-Sort-PList 点集实体排序 (xyp-Sort-Plist lst mode) mode 1~10
  2. (defun xyp-Sort-PList (lst mode / x y)
  3.   (defun aaa (lst fun1 fun2 / x y x1 x2 y1 y2)
  4.     (vl-sort lst
  5.              '(lambda (x y)
  6.                 (setq x (trans (car x) 0 1)
  7.                       y         (trans (car y) 0 1)
  8.                       x1 (car x)
  9.                       x2 (car y)
  10.                       y1 (cadr x)
  11.                       y2 (cadr y)
  12.                 )
  13.                 (cond ((and (= x1 x2) (= y1 y2) (> (caddr x) (caddr y))) T)
  14.                       ((and (= y1 y2) (fun1 x1 x2)) T)
  15.                       ((fun2 y1 y2) T)
  16.                       (T nil)
  17.                 )
  18.               )
  19.     )
  20.   )
  21.   (defun bbb (lst fun1 fun2 / x y x1 x2 y1 y2)
  22.     (vl-sort lst
  23.              '(lambda (x y)
  24.                 (setq x (trans (car x) 0 1)
  25.                       y         (trans (car y) 0 1)
  26.                       x1 (car x)
  27.                       x2 (car y)
  28.                       y1 (cadr x)
  29.                       y2 (cadr y)
  30.                 )
  31.                 (cond ((and (= x1 x2) (= y1 y2) (> (caddr x) (caddr y))) T)
  32.                       ((and (= x1 x2) (fun1 y1 y2)) T)
  33.                       ((fun2 x1 x2) T)
  34.                       (T nil)
  35.                 )
  36.               )
  37.     )
  38.   )
  39.   (cond ((= mode 1) (aaa lst < >))                  ; 上→下,左→右
  40.         ((= mode 2) (aaa lst > >))                  ; 上→下,右→左
  41.         ((= mode 3) (aaa lst < <))                  ; 下→上,左→右
  42.         ((= mode 4) (aaa lst > <))                  ; 下→上,右→左
  43.         ((= mode 5) (bbb lst > <))                  ; 左→右,上→下
  44.         ((= mode 6) (bbb lst < <))                  ; 左→右,下→上
  45.         ((= mode 7) (bbb lst > >))                  ; 右→左,上→下
  46.         ((= mode 8) (bbb lst < >))                  ; 右→左,下→上
  47.         ((= mode 9) (vl-sort lst '<))                  ; 单一数值从小到大
  48.         ((= mode 10) (vl-sort lst '>))                  ; 单一数值从大到小
  49.   )
  50. )
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2013-11-15 08:45 | 显示全部楼层
本帖最后由 xyp1964 于 2017-11-20 21:50 编辑

  1. ;; 混合文本增减复制
  2. (defun c:test1417 ()
  3.   (xyp-CMDLA0)
  4.   (setq int (Uint 1 "" "步距" int))
  5.   (if (and (setq s1 (car (entsel "\n选择: ")))
  6.            (xyp-etype s1 "text")
  7.       )
  8.     (progn
  9.       (setq pt        (xyp-9pt s1 5)
  10.             lst        (xyp-Get-HzEngNum (xyp-DXF 1 s1) 0)
  11.       )
  12.       (while (setq p1 (getpoint pt "\n基点<退出>: "))
  13.         (setq lst (mapcar '(lambda (x)
  14.                              (cond ((setq a (distof x))
  15.                                     (xyp-2str (+ a int))
  16.                                    )
  17.                                    ((setq b (xyp-Get-HzEngNum x 2))
  18.                                     (setq b (vl-string->list (car b))
  19.                                           b (mapcar '(lambda (x) (+ x int)) b)
  20.                                           b (vl-list->string b)
  21.                                     )
  22.                                    )
  23.                                    (t x)
  24.                              )
  25.                            )
  26.                           lst
  27.                   )
  28.               s2  (xyp-copymove s1 pt p1)
  29.               s2  (xyp-SubUpd s2 1 (xyp-strcat lst ""))
  30.         )
  31.       )
  32.     )
  33.   )
  34.   (xyp-CMDLA1)
  35. )

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2013-4-19 23:29 | 显示全部楼层
xyp-get-DXF,有源码了,顶
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2012-7-21 01:23 | 显示全部楼层
本帖最后由 xyp1964 于 2017-11-20 22:02 编辑

  1. ;; xyp-DXF 实体dxf数据 (xyp-DXF code ename)
  2. (defun xyp-DXF (code ename / ent lst a)
  3.   (if (= (type code) 'LIST)
  4.     (progn
  5.       (setq ent   (entget ename)
  6.             lst  '()
  7.       )
  8.       (foreach a code
  9.         (setq lst (cons (list a (cdr (assoc a ent))) lst))
  10.       )
  11.       (reverse lst)
  12.     )
  13.     (if (= code -3)
  14.       (cdr (assoc code (entget ename '("*"))))
  15.       (cdr (assoc code (entget ename)))
  16.     )
  17.   )
  18. )
发表于 2012-7-21 01:32 | 显示全部楼层
来顶一下,这次真的是源码

点评

破解也怪累的!  发表于 2012-7-21 01:35
发表于 2012-7-21 01:36 | 显示全部楼层
无条件顶,院长的源码那是必须学习滴

点评

开个玩笑,不要介意  发表于 2012-7-21 02:10
属于伪源码的源代码  发表于 2012-7-21 01:42
发表于 2012-7-21 01:41 | 显示全部楼层
翻了个出来,这也是院长的么?
(defun sub_upd (ename code newvalue)
  (entmod (subst (cons code newvalue)
                 (assoc code (entget ename))
                 (entget ename)
          )
  )
  (entupd ename)
)

点评

属于老掉牙的东东……  发表于 2012-7-21 01:43
 楼主| 发表于 2012-7-21 01:51 | 显示全部楼层
本帖最后由 xyp1964 于 2017-11-20 22:02 编辑

  1. ;; xyp-Put VL方式修改 (xyp-Put keyname ename value)
  2. (defun xyp-Put (keyname ename value / obj i s1)
  3.   (cond ((= (type ename) 'ENAME)
  4.          (setq obj (vlax-ename->vla-object ename))
  5.          ((eval (read (strcat "vla-put-" keyname))) obj value)
  6.          (vla-update obj)
  7.         )
  8.         ((= (type ename) 'PICKSET)
  9.          (setq i -1)
  10.          (while (setq s1 (ssname ename (setq i (1+ i))))
  11.            (setq obj (vlax-ename->vla-object s1))
  12.            ((eval (read (strcat "vla-put-" keyname))) obj value)
  13.            (vla-update obj)
  14.          )
  15.         )
  16.         ((= (type ename) 'LIST)
  17.          (foreach x ename (xyp-Put keyname x value))
  18.         )
  19.   )
  20. )

  21. ;; 实例
  22. ;; 选择集改红色
  23. (xyp-Put "color" (ssget) 1)

点评

院长能不能发个删除重复点表的函数,允许有给定fuzz...  发表于 2012-7-21 01:57

评分

参与人数 1明经币 +1 收起 理由
yjr111 + 1

查看全部评分

发表于 2012-7-21 01:55 | 显示全部楼层
xyp1964 发表于 2012-7-21 01:51

能打个包不?

点评

做人要厚道  发表于 2012-7-21 01:59
已打包在e派工具箱 xcad.vlx 内……  发表于 2012-7-21 01:57
 楼主| 发表于 2012-7-21 02:44 | 显示全部楼层
本帖最后由 xyp1964 于 2017-11-20 22:03 编辑

  1. ;; CheckPtn 删除重复点表 (CheckPtn ptn 500)
  2. (defun CheckPtn (ptn fuzz / lst p1 lst-t pt)
  3.   (setq lst '())
  4.   (while (>= (length ptn) 2)
  5.     (setq p1 (car ptn)
  6.           ptn (cdr ptn)
  7.           lst (cons p1 lst)
  8.           lst-t '()
  9.     )
  10.     (foreach pt ptn
  11.       (if (>= (distance p1 pt) fuzz)
  12.         (setq lst-t (cons pt lst-t))
  13.       )
  14.     )
  15.     (setq ptn (reverse lst-t))
  16.   )
  17.   lst
  18. )

点评

函数简单了,来点劲爆的  发表于 2012-7-23 12:09
函数简单了,来点劲爆的  发表于 2012-7-23 12:09
不睡觉吗?同问。  发表于 2012-7-22 16:45
院长不睡觉么?  发表于 2012-7-21 02:55

评分

参与人数 1金钱 +30 收起 理由
yjr111 + 30 看得舒心,用得放心,谢谢院长提供!

查看全部评分

发表于 2012-7-21 05:14 | 显示全部楼层
好代码,谢谢院长
发表于 2012-7-21 05:31 | 显示全部楼层
支持院长
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 05:12 , Processed in 0.269641 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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