明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 970|回复: 5

[已解答] 想做个快速命令选择对象的程序,请大虾们完善一下,谢谢!

[复制链接]
发表于 2016-1-18 17:22 | 显示全部楼层 |阅读模式
缺少了一些判断、错误处理的方法,但又不知道怎么合理地添加,请大虾们帮我完善一下!我是新手
以下是程序:
(defun c:ssg1(/ ent)
    (setq ent (getstring "\n请输入选项 [BO图层(B)/颜色(C)/标注(D)/填充(H)/文本(T)] <B>:"))
    (if (= ent "") (setq ent "B"))
    (cond
        ((= (strcase ent) "B") (princ "\n选择[BO图层(B)]:") (ssget '((8 . "边界线(BO)"))))
        ((= (strcase ent) "C") (princ "\n选择[颜色(C)]:")   (ssget (list '(-4 . "<OR") (cons 62 (getINT "\n颜色号<0-256>:")) '(-4 . "OR>"))))
        ((= (strcase ent) "D") (princ "\n选择[标注(D)]:")   (ssget '((0 . "DIMENSION"))))
        ((= (strcase ent) "H") (princ "\n选择[填充(H)]:")   (ssget '((0 . "HATCH"))))
        ((= (strcase ent) "T") (princ "\n选择[文本(T)]:")   (ssget '((0 . "*TEXT"))))
        (t (princ "\n输入有误,操作退出!") (exit))
    )
    (setq moco (getstring "\n[移动(A)/复制(C)] <A>:"))
    (if (= moco "") (setq moco "A"))
    (cond
        ((= (strcase moco) "A") (command "move" "p" ""))
        ((= (strcase moco) "C") (command "copy" "p" ""))
        (t (princ "\n输入有误,操作退出!") (exit))
    )
    (princ)
)

发表于 2016-1-19 11:35 | 显示全部楼层
  1. ;;;;2016.1.19琴剑江山编写
  2. (defun c:ss (/ EN ENT GET SEL SS)
  3.     (vl-load-com)
  4.     (initget "D H T")
  5.     (setq ent (getkword "\n请输入选项 [标注(D)/填充(H)/文本(T)] 默认<颜色或图层>:"))   
  6.     (cond      
  7.       ((= ent "D") (setq en '(0 . "DIMENSION") ss "\n过滤选择标注"))
  8.       ((= ent "H") (setq en '(0 . "HATCH") ss "\n过滤选择填充"))
  9.       ((= ent "T") (setq en '(0 . "*TEXT") ss "\n过滤选择文字"))
  10.       (t
  11.   (and (setq sel (entsel "\n选择参照对象 <退出>:"))
  12.        (setq en (vla-get-Color (vlax-ename->vla-object (car sel))))
  13.        (if (= en 256)
  14.          (setq en  (cons 8 (vla-get-Layer (vlax-ename->vla-object (car sel))))
  15.          ss  "\n过滤选择图层")
  16.          (setq en  (cons 62 en)
  17.          ss  "\n过滤选择颜色")
  18.        );if
  19.   );and
  20.       )
  21.      );cond
  22.        (and en
  23.       (princ ss)
  24.       (setq get (ssget (list en)))
  25.       (sssetfirst nil get)
  26.        )
  27.   (princ)
  28.   )
  29.    

;;这个是帮你选中对象,夹头显示出来,然后你还要做其它的操作,比如删除,移动,复制等,直接用CAD命令就行了
 楼主| 发表于 2016-1-19 15:24 | 显示全部楼层
琴剑江山_10184 发表于 2016-1-19 11:35
;;这个是帮你选中对象,夹头显示出来,然后你还要做其它的操作,比如删除,移动,复制等,直接用CAD命令就 ...

谢谢分享,我研究研究下!
 楼主| 发表于 2016-1-19 16:02 | 显示全部楼层
琴剑江山_10184 发表于 2016-1-19 11:35
;;这个是帮你选中对象,夹头显示出来,然后你还要做其它的操作,比如删除,移动,复制等,直接用CAD命令就 ...

再请教一下
下面的简单程序怎么可以“夹头显示出来”
(defun C:t1 (/ ent)
  (setq ent (ssget '((0 . "*TEXT"))))
)
发表于 2016-1-19 17:26 | 显示全部楼层
uvyx 发表于 2016-1-19 16:02
再请教一下
下面的简单程序怎么可以“夹头显示出来”
(defun C:t1 (/ ent)

(defun C:t1 (/ ent)
  (sssetfirst nil (ssget '((0 . "*TEXT"))))
)
 楼主| 发表于 2016-1-19 17:49 | 显示全部楼层
琴剑江山_10184 发表于 2016-1-19 17:26
(defun C:t1 (/ ent)
  (sssetfirst nil (ssget '((0 . "*TEXT"))))
)

谢谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 17:34 , Processed in 1.983549 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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