明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13451|回复: 58

按色选择与动态线型比例的完美结合,(作者zhynt大师)

  [复制链接]
发表于 2011-6-27 23:15 | 显示全部楼层 |阅读模式
本帖最后由 669423907 于 2011-7-6 07:47 编辑

如题所述,以下分别是 “按色选择对象” 程序与 “动态修改线型比例”程序,如何合并呢?
;选择相同类型、相同图层、相同颜色的(全部)对象 ( zml84 于 2009-03-28)
(defun C:sxs(/ SS ENT LST)
(if (setq SS (entsel "\n点取对象:"))
(progn
;获取对象组码列表
(setq ENT (entget (car SS)))
;创建过滤列表
(if (assoc 62 ENT)
(setq LST (list (assoc 62 ENT)))
(setq LST (list (cons 62 256))))
(setq LST (cons (assoc 8 ENT) LST)
LST (cons (assoc 0 ENT) LST))
;筛选对象
(setq SS (ssget LST));选择全部ssget "x" LST
;显示信息
(princ (strcat "\n**共选择到 "
(itoa (sslength SS)) " 个对象。"))
;设置为当前选择
(sssetfirst NIL SS)))
(princ))



动态修改线型比例(zhynt)2011-6-23 02:07
(defun c:sf(/ ss alts pt gr s1 lt newscale)
;(prompt "\n请选择非Contiiuous线型: ")
(setq ss (ssget) alts (getvar "LTSCALE") pt (getpoint "\n请指定一个点: "))
(while (= (car (setq gr (grread nil 5 0))) 5)
(redraw)(grdraw (cadr gr) pt 1 1)(setq i -1)
(while (setq s1 (ssname ss (setq i (1  i))))
(if (setq lt (cdr (assoc 6 (entget s1))))(progn
(setq zq (cdr (assoc 40 (tblsearch "ltype" lt))))
(if (/= zq 0)
(setq newscale (/ (distance (cadr gr) pt) zq alts 1.))
(setq newscale 1)))
(progn (setq zq (cdr (assoc 40 (tblsearch "ltype"
(cdr (assoc 6
(tblsearch "layer" (cdr (assoc 8 (entget s1))))))))))
(if (/= zq 0)(setq newscale (/ (distance (cadr gr) pt) zq alts 1.))
(setq newscale 1))))
(vla-put-LinetypeScale (vlax-ename->vla-object s1) newscale)))
(redraw)(princ))

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2011-6-28 12:52 | 显示全部楼层
ok,好了。不用按什么快捷键。

本帖子中包含更多资源

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

x

评分

参与人数 1金钱 +10 收起 理由
zwqgdhl + 10

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 2023-10-24 20:44 | 显示全部楼层
(while (setq s1 (ssname ss (setq i (1  i))))
应该改为(while (setq s1 (ssname ss (setq i (1+  i))))
发表于 2021-5-30 15:43 | 显示全部楼层
zhynt 发表于 2011-7-22 11:27
回复 pb.v@163.com 的帖子

大神!可以把这个改成先填充指定图案再动态调整填充比例吗?
发表于 2011-6-27 23:47 | 显示全部楼层

  1. (defun C:sxs (/ SS ENT LST)
  2.   (if (setq SS (entsel "\n点取对象:"))
  3.     (progn
  4.       (setq ENT (entget (car SS)))
  5.       (if (assoc 62 ENT)
  6.         (setq LST (list (assoc 62 ENT)))
  7.         (setq LST (list (cons 62 256)))
  8.       )
  9.       (setq LST        (cons (assoc 8 ENT) LST)
  10.             LST        (cons (assoc 0 ENT) LST)
  11.       )
  12.       (setq SS (ssget LST))
  13.     )                                        ;选择全部ssget "x" LST
  14.   )
  15.   (setq        alts (getvar "LTSCALE")
  16.         pt   (getpoint "\n请指定一个点: ")
  17.   )
  18.   (while (= (car (setq gr (grread nil 5 0))) 5)
  19.     (redraw)
  20.     (grdraw (cadr gr) pt 1 1)
  21.     (setq i -1)
  22.     (while (setq s1 (ssname ss (setq i (1+ i))))
  23.       (if (setq lt (cdr (assoc 6 (entget s1))))
  24.         (progn
  25.           (setq zq (cdr (assoc 40 (tblsearch "ltype" lt))))
  26.           (if (/= zq 0)
  27.             (setq newscale (/ (distance (cadr gr) pt) zq alts 1.))
  28.             (setq newscale 1)
  29.           )
  30.         )
  31.         (progn (setq zq
  32.                       (cdr
  33.                         (assoc
  34.                           40
  35.                           (tblsearch
  36.                             "ltype"
  37.                             (cdr
  38.                               (assoc
  39.                                 6
  40.                                 (tblsearch "layer" (cdr (assoc 8 (entget s1))))
  41.                               )
  42.                             )
  43.                           )
  44.                         )
  45.                       )
  46.                )
  47.                (if (/= zq 0)
  48.                  (setq newscale (/ (distance (cadr gr) pt) zq alts 1.))
  49.                  (setq newscale 1)
  50.                )
  51.         )
  52.       )
  53.       (vla-put-LinetypeScale (vlax-ename->vla-object s1) newscale)
  54.     )
  55.   )
  56.   (redraw)
  57.   (princ)
  58. )
 楼主| 发表于 2011-6-28 11:50 | 显示全部楼层

标题

回复 zhynt 的帖子

哈哈,又是你吖,zhynt 大师,非常感谢啦。
刚才用了你改的程序,感觉很好用。
现在有一个疑问:可不可以多加一个功能

在选择对象之后,在右键确认之前,如果按了一个命令(如m,mi,s,或者其他 lsp 的快捷键)再右键确认,就执行这个命令,不执行修改线型比例的命令。否则就执行修改线型比例命令。

此完美程序,就有劳 zhynt 大师啦!
 楼主| 发表于 2011-6-28 14:02 | 显示全部楼层
手机上下不了!晚上先!再次感谢 zhynt 大师!
发表于 2011-6-28 15:01 | 显示全部楼层
已经给你解决了呀!!
 楼主| 发表于 2011-6-29 08:08 | 显示全部楼层

标题

回复 zhynt 的帖子

程序非常好,非常完美,非常给力!非常非常感谢 zhynt 大师非常非常热情的帮助!
发表于 2011-6-29 10:23 | 显示全部楼层
收藏了,谢谢!
发表于 2011-6-29 22:41 | 显示全部楼层
回复 zhynt 的帖子

是这样的,我现在用的工具插件里就有这样动态调整线性比例和填充比例的,zhynt 大师能修改一下可以调整线性比例和填充比例通用的LSP吗?不胜感谢您无私的分享精神!
发表于 2011-7-4 09:32 | 显示全部楼层
真是完美程序!牛!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-8 21:17 , Processed in 0.251616 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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