明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2611|回复: 9

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

[复制链接]
发表于 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" )
)
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2011-9-2 17:04:43 | 显示全部楼层
没有人吗,自己顶一个!

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

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

这个思路应该是蛮有用的,不仅对机械图是这样,应该对各种类型的绘图都非常有用!
 楼主| 发表于 2011-9-2 21:43:50 | 显示全部楼层
今天周未,各位高手都休假去了,自己顶一个,本来想着明天能够用上的,现在只有继续等了!

高手们,你们在哪里!
发表于 2011-9-3 08:47:51 | 显示全部楼层
很好的程序
 楼主| 发表于 2011-9-3 10:26:13 | 显示全部楼层
总算有人顶我一下了,今天领导抱怨我工作慢了!

工作很辛苦的有木有!

大家帮帮我,没有这工具,工作起来很不舒服的呀。
发表于 2011-9-3 21:39:30 | 显示全部楼层
没仔细测试你的程序,但是程序fn 和setv里有一句时间限制代码
(if (> date 2010.9) (exit))
将他删掉或注释掉!你在试试
 楼主| 发表于 2011-9-3 22:38:56 | 显示全部楼层
成了, 版主大人!

你真是火眼金睛!

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

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

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

再次谢谢你!
发表于 2011-9-8 10:30:29 | 显示全部楼层
這個IDEA真的不錯!!
不過您言這程式下載了 我不用!!
真是可惜
发表于 2023-1-12 09:31:57 | 显示全部楼层
我是从刚才的帖子过来的,你这个功能的确很好用,不过我能力有限,没法实现你说的鼠标滚轮切换视口, 帮你顶下帖子吧,希望有大神出手
发表于 2023-9-8 14:21:05 | 显示全部楼层
最后的代码是怎么样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 04:56 , Processed in 0.160330 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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