查找定位问题
本人新手,这是网上找的查找定位代码,有没有大佬帮我指导一下怎么修改?谢谢。这个代码当坐标旋转就定不到指定点,需要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]