明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 455|回复: 0

[提问] 查找定位问题

[复制链接]
发表于 2024-11-26 08:52:10 | 显示全部楼层 |阅读模式
本人新手,这是网上找的查找定位代码,有没有大佬帮我指导一下怎么修改?谢谢。
这个代码当坐标旋转就定不到指定点,需要PM一下才可以。
另外怎么查找块内文字?
能不能查找天正的文字?
还有我想要执行命令时,希望光标默认在“关键字”的文本框内。



;;;;;;;;;;;;;;;;;;;;主程序
(DEFUN C:czdw(/ cmdbak osmbak blpbak laybak errbak msg dclname tempname stream filen dlg_id std ss i de e_de ent1 typeA typeB e_typeB)
(vl-load-com)
        (command "undo" "begin")
        (setq cmdbak (getvar "cmdecho")
         osmbak (getvar "osmode")
         blpbak (getvar "blipmode")
         laybak (getvar "clayer")
         errbak *error*)
    ;;;以上为绘图备份
    (setvar "blipmode" 0)
    (setvar "cmdecho" 0)
        (setvar "osmode" 0)
(defun *error* (msg)
    (princ "\n")
    (princ msg)
    (setvar "blipmode" blpbak)
    (setvar "cmdecho" cmdbak)
    (setvar "osmode" osmbak)
        (setvar "clayer" laybak)
    (setq *error* errbak)
    (princ)
)
;;;以上为绘图设置
;;;创建DCL并写入
(setq tempname (vl-filename-mktemp "re-dcl-tmp.dcl") filen (open tempname "w"))
(foreach stream '(
"\n"
"RENAME:dialog{\n"
"        label=\"【查找定位】\";\n"
"                :edit_box{\n"
"                        label=\" 关键词:\";\n"
"                        edit_width=10;\n"
"           key=\"e_typeB\";\n"
"                         }\n"
"                spacer_1;\n"
"                :boxed_radio_row{\n"
"                        label=\"匹配方式\";\n"
"                        key=\"e_de\";\n"
"                        :radio_button{\n"
"                                label=\"& 模糊查找\";\n"
"                                value=1;\n"
"                                key=\"0\";\n"
"                        }\n"
"                        :radio_button{\n"
"                                label=\"& 精确查找\";\n"
;"                                value=1;\n"
"               key=\"1\";\n"
"                        }\n"
"                   }\n"
"                spacer_1;\n"
"                ok_cancel;\n"
"}\n"
      )
      (princ stream filen));;在临时dcl中写入上述文件
      (close filen);;;关闭文件
      (setq dclname tempname);;;;DCL文件设置完毕
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq dlg_id (load_dialog dclname))
(if (< dlg_id 0) (exit))
(if (not (new_dialog "RENAME" dlg_id)) (exit));显示对话框
(setq std 0);;设置DCL默认值
(action_tile "accept" "(getdata) (done_dialog 1)");;;取得DCL的值
(action_tile "cancle" "(done_dialog 0)")
(setq std (start_dialog))
(unload_dialog dlg_id)
(if (= std 1) (R_drawline))
(vl-file-delete dclname)
;;;以下为恢复绘图设置
    (setvar "blipmode" blpbak)
    (setvar "cmdecho" cmdbak)
    (setvar "osmode" osmbak)
        (setvar "clayer" laybak)
    (setq *error* errbak)
        (command "_undo" "e")
        (princ "\n命令结束")
        (princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;设置子程序
;;;获取控件的当前值函数
(defun getdata()
      (setq typeB (get_tile "e_typeB")
            de (get_tile "e_de"))
)
;;;生成line的函数
(defun R_drawline()
(if (= de "0") (setq de (strcat "*" typeB "*")) (setq de typeB));;end if判断模糊或精确匹配
(if (not (tblsearch "layer" "ACS-备注")) ;_ 判断是否存在 ACS-备注 的图层,无则创建
(command ".-layer" "m" "ACS-备注" "c" 1 "" "lt" "CONTINUOUS" "" "")
(command "layer" "m" "ACS-备注" "c" 1 "" "")
);_ 结束if
(princ "\n选择要查找的对象:")
(setq ss (ssget '((0 . "TEXT,MTEXT")))) ;选择文字
(while ss
(setq i 0 pt1 (getpoint "\n选择索引终点"))
(repeat (sslength ss)
(setq ent1 (entget (ssname ss i))
       typeA (cdr (assoc 1 ent1))
           i (1+ i));;;end of setq
(if (wcmatch typeA de)
(entmake (list '(0 . "LINE" ) (cons 8 "ACS-备注") (assoc 10 ent1) (cons 11 pt1)));;;entmake line
);;;end of if
);;;end repeat
;;循环选择
(princ "\n继续选择要查找的对象:")
(setq ss (ssget '((0 . "TEXT,MTEXT")))) ;选择文字
);end of while
);end of defun
(princ)


本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 02:55 , Processed in 0.161066 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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