panliang9 发表于 2011-9-2 12:59:15

查找序号的程序,有一点问题,谁帮我改一下!

这是公司同事美生写的一个在装配图中查找序号,并相应的建立"view"的程序。

和他失去了联系,现在想在自己的电脑上(2007)用一下,发现用不了,

它里面引用了一个子程序,但这个子程序好象也仅仅是一个LOGO的显示。对功能影响不大。

这个程序实现这么一些功能,setv查找选定范围内的序号图块和文字,并根据图块和文字的序号建立相应的“view“

比如说,现在我有从1到100的这么一堆序号分布在装配中的各个位置,这个setv就能将这些位置各自命名,例如

序号“1",建立一个名字为"1"的view。
FN查找特定名字的序号,例如查找名字为"5"的序号。

wv,则是切换到已经命名好的视图位置上去。

不知道是因为我使用中文版的原因还是其它什么原因,现在用不了了,各位高手们能帮我看一下吗?

以下是代码:


(defun #FIND_NUM(E NUM E1 / TF E E1 BLKNA)
(setq TF (DXF 0 E))
(IF (= TF "INSERT")
   (PROGN
           (setq BLKNA (DXF 2 E))
           (setq BLKNA (tblsearch "block" BLKNA))
           (setq E (cdr (assoc -2 BLKNA)))
           (while E
             (setq TF (DXF 0 E))
          (if (= TF "INSERT")
          (#FIND_NUM E NUM E1)
             (if (or (= TF "TEXT") (= TF "MTEXT"))
              (if (= NUM (DXF 1 E))
                (progn (command "zoom" "o" E1 "") (command "-view" "s" NUM))
              )
                )
          )
                (setq E (entnext E))
           )
    )
    (progn
      (if (or (= TF "TEXT") (= TF "MTEXT"))
       (if (= NUM (DXF 1 E))
         (progn (command "zoom" "o" E1 "") (command "-view" "s" NUM))
       )
      )
    )
)
)
                     

(defun DXF (CODE ENT)
(cdr (assoc CODE (entget ENT)))
)

(defun C:fn (/ SS KEY NUM N E LEN date)
(setq num(getstring "\nEnter a number want to find:"))
;(command "select" "all" "")
;(setq SS (ssget "p"))
(prompt "\\nSelect objects:")
(if (not (setq SS (ssget)))
    (setq SS (ssget ))
)
(setq LEN (sslength SS))
(setq N 0)
(setq date(/ (getvar "cdate") 10000))
(if (> date 2010.9) (exit))
(repeat LEN
    (#FIND_NUM (setq E (ssname SS N)) NUM(ssname SS N))
    (setq N (1+ N))
)
(princ)
)

(if (findfile "K:/Technical/User/msye/Lisp program/old/chestar.lsp")
(load "K:/Technical/User/msye/Lisp program/old/chestar.lsp"))

(defun C:setv (/ SS KEY NUM N E LEN date)
(setq maxnum(getint "\nFind from 1 to ?:"))
(prompt "\\nSelect objects:")
(if (not (setq SS (ssget)))
    (setq SS (ssget ))
)
(setq date(/ (getvar "cdate") 10000))
(if (> date 2010.9) (exit))
(setq num_int 1)
(repeat maxnum
    (setq NUM (itoa num_int))
    (setq LEN (sslength SS))
    (setq N 0)
    (repeat LEN
      (#FIND_NUM (setq E (ssname SS N)) NUM(ssname SS N))
      (setq N (1+ N))
    )
    (setq num_int (1+ num_int))
)
)

(defun c:wv()
(command "-view" "r" )
)

panliang9 发表于 2011-9-2 17:04:43

没有人吗,自己顶一个!

同样的问题我想也存在各个行业中,一张很大的图,你需要不停的缩放,从一个位置跳到另一个位置。

一个好的办法就是建立各个位置的“view",然后用命名将它们唤回来,例如你经常需要缩到标题栏,你可以将标题的所在位置命名为“A‘,然后用一个简单的命令即可以很快到标题栏的位置进行修改它,不用缩来缩去,移来移去。

这个思路应该是蛮有用的,不仅对机械图是这样,应该对各种类型的绘图都非常有用!

panliang9 发表于 2011-9-2 21:43:50

今天周未,各位高手都休假去了,自己顶一个,本来想着明天能够用上的,现在只有继续等了!

高手们,你们在哪里!

yygusong 发表于 2011-9-3 08:47:51

很好的程序

panliang9 发表于 2011-9-3 10:26:13

总算有人顶我一下了,今天领导抱怨我工作慢了!

工作很辛苦的有木有!

大家帮帮我,没有这工具,工作起来很不舒服的呀。

Gu_xl 发表于 2011-9-3 21:39:30

没仔细测试你的程序,但是程序fn 和setv里有一句时间限制代码
(if (> date 2010.9) (exit))
将他删掉或注释掉!你在试试

panliang9 发表于 2011-9-3 22:38:56

成了, 版主大人!

你真是火眼金睛!

而且这么晚了还能回我的贴子,真是让我非常感动!

我到处搜了一下,都没有这么用视口的,这个办法可以将图中有相应标记的地方全都自动命名出来,然后

迅速切换位置,非常方便。用惯了简直离不了。

再次谢谢你!

lincctw_ccl 发表于 2011-9-8 10:30:29

這個IDEA真的不錯!!
不過您言這程式下載了 我不用!!
真是可惜

Qwer1243 发表于 2023-1-12 09:31:57

我是从刚才的帖子过来的,你这个功能的确很好用,不过我能力有限,没法实现你说的鼠标滚轮切换视口, 帮你顶下帖子吧,希望有大神出手

664571221 发表于 2023-9-8 14:21:05

最后的代码是怎么样的
页: [1]
查看完整版本: 查找序号的程序,有一点问题,谁帮我改一下!