masterlong 发表于 2019-3-6 22:54:44

发个gif




先发个gif

alexmai 发表于 2019-3-11 10:40:27

mikewolf2k 发表于 2019-3-11 09:01
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=32200&highlight=%B6%E0%D6%D8%CE%C4%B1%BE

谢谢!

我这里有段代码,只能用一次,请帮忙看看,究竟是什么问题,不能每次都重刷 ob_id吗 谢谢!



(defun ob_id (ent /)
   (setqs_na (cdr (assoc -1 tar))
          v-na (vlax-ename->vla-object s_na)
          n_na(vla-get-objectid v-na)
          nna   (itoa n_na)
      )
)

;;;刷视窗MV比例值
(Defun c:tt1 (/ src tar)
      (setq tar (car (entsel "\n选择对象(视口)")))
      (setq src (nentselp "\n 选择属性块 :"))
      (setq src (vlax-ename->vla-object (car src)))
      (vlax-property-available-p src "TextString")
      (null (redraw (vlax-vla-object->ename src) 3))
      (vla-put-textstring src
            (strcat "%<\\AcObjProp Object(%<\\_ObjId "
                           nna
                      ">%).CustomScale \\f \"1:%lu2%ct1%qf2816\">%"
            )
      )
      (command "_.Regen")
      (princ)
)

masterlong 发表于 2019-3-7 14:29:42

明白你的意思了
很好的想法
虽然我本身并不需要
但是两个功能结合起来也没啥冲突
代码实现也没难度
等空闲的时候可以加上这个

两种处理方式
对我而言其实有着不同的应用场景
SCR的批处理方式
主要用作批打印、图纸清理等
而打开文件的跨档操作
我更多的不是批量
而是指定文档进行切换
切换后执行指定操作

举个例子
我的一个程序获取当前文档所有图框信息
按工程名称、子项名称、图号分类
并形成列表显示于对话框中
点击列表的某一条目时
自动缩放窗口到对应的图框
这个功能以前只能应用于当前文档
利用dbx最多做到切换文档
但不能在切换后缩放
而现在就可以支持多文档任意切了


mikewolf2k 发表于 2019-3-7 10:38:30

masterlong 发表于 2019-3-7 10:17
我的批打印程序本身有一个设置
打印过程中PDF窗口和CAD窗口并列
打印结束后再改变两个窗口一个大一个小


你的要点是跨文档进行某种操作么?如果是这样,根据你的演示,似乎是当前打开的文档批量操作,如果这样的话,得事先打开需要处理的文档,文件数量多(成百上千)的话是不大现实的。建议在添加一个功能,能够按文档列表批处理,依次打开,处理,关闭。

依然小小鸟 发表于 2019-3-7 08:53:29

厉害 期待分享程序

mikewolf2k 发表于 2019-3-7 09:35:35

就是多文档批量替换嘛。
建议从excel读取替换列表,实现多关键字多文档批量替换。
我在源码共享版块放出了VBA版的。

masterlong 发表于 2019-3-7 10:01:34

本帖最后由 masterlong 于 2019-3-7 10:05 编辑

昨天晚上急着走
GIF录制的不好
采用文本替换作演示内容
效果猛一看
和用DBX技术操作其它文档差不多
重新录了一个GIF
这个应该不会引起误会了







masterlong 发表于 2019-3-7 10:17:26

我的批打印程序本身有一个设置
打印过程中PDF窗口和CAD窗口并列
打印结束后再改变两个窗口一个大一个小
所以演示中窗口在不时地变化
希望不会看花眼

提醒一下
文本替换或者批打印
其实都不是重点

masterlong 发表于 2019-3-7 11:17:22

你说对了
就是针对已打开图纸进行批量处理
非DBX方法
而是真实的切换文档后执行操作

批量打开、处理、关闭的批处理程序
早就有了
技术上没啥难度
无非建立一个SCR文件再执行

两种处理方式各有各的用途
比如
我不能为了要批量处理
就关闭所有已打开的图纸
批处理以后再打开吧
虽然文件集关闭再打开也能实现
总归是浪费时间啊


masterlong 发表于 2019-3-7 11:27:11

本帖最后由 masterlong 于 2019-3-7 11:36 编辑

这个跨档操作或者说切档操作
和DBX方式实现的跨档
最大的不同
是可以在操作代码中使用ssget
而DBX的跨档严格来说应该是读档
只能遍历所有图元进行判断

换句话说
很多已有的程序
不需要修改或者简单修改后就可以使用
而DBX则需要专门编写相应程序

陨落 发表于 2019-3-7 11:31:37

masterlong 发表于 2019-3-7 11:27
这个跨档操作或者说切档操作
和DBX方式实现的跨档
最大的不同


我知道vba可以,用excelvba可以通杀。但是lisp一直没有研究出来怎么跨文档
能否分享一下思路?

masterlong 发表于 2019-3-7 11:53:05

lisp的跨档操作我研究过很久
尝试过文档反应器
可能是水平不够
没有任何结果

现在能够实现
是借助了opendcl的OnDocActivated事件
结合vl-propagate函数进行参数控制
稍后我会另开一贴
放上源码并提供详细的编程思路
页: [1] 2 3
查看完整版本: 发个gif