angei83 发表于 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)


页: [1]
查看完整版本: 查找定位问题