乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 105|回复: 6

在布局选项卡中的现有块上方插入新块

[复制链接]

3

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
17
发表于 2016-1-4 17:53:21 | 显示全部楼层 |阅读模式
我只是一个初学者,但有很大的愿望和目标。我正在寻找一种一次将修订块添加到多个布局选项卡(单个. dwg文件)的方法。
每个项目,我们在一个. dwg文件中以2D设计我们的产品。AutoCAD 2013。
我们将布局选项卡用于模型空间中对象的多个视图,(每个布局选项卡上都有项目标题块,但每个布局选项卡都有自己的修订块集。)
我们将修订块“堆叠”在Y方向,请参阅第一个截图)
在项目中,有时所有布局选项卡都需要相同的修订描述。例如,用于构建的问题、P. E.注释、As Built...等。这以前是通过插入修订块、编辑属性、复制基点、切换到每个布局选项卡并粘贴在现有RevBlk上方来完成的。
因此,我们希望能够使用对话框或excel将修订块插入每个布局选项卡。
简单地(希望)解释:例程会找到具有最大Y值的修订块(RevBlk)(因为我们将修订块“堆叠”在Y方向,请参阅示例)并在其上方插入一个新的修订块(RevBlk)。块的高度(Y方向)是.1271,因此新的RevBlk需要它的插入点@0,.1271,0相对于具有最高Y值的现有RevBlk。请参阅第一个屏幕截图:
我们的布局选项卡标签遵循以下顺序:
遵循该编号顺序,这些是可能的,但不那么频繁:
如果我们可以控制从对话框中插入新修订,那就太好了:
(例程需要检测哪些选项卡可用?)
我很抱歉它看起来的样子,我知道如何制作一个的唯一方法是在Excel的VBA
这个例程将是其他序列的子部分,但我需要在它变得更大之前从这里开始。
所以我希望这个较小的任务能帮助我完成更大的努力。
***
我在几个地方寻求帮助,但无济于事。
这是不是太雄心勃勃了?
也许我可以把它拼凑起来?
1.在所有布局选项卡中找到特定块的插入点。(块名称永远不会改变:RevBlk)
2.
在所有布局选项卡中,在另一个RevBlk+.1271的最大Y值处3.Insert相同的块(RevBlk,它将已经加载到绘图中)。
绊倒我的部分是“跨越所有布局选项卡”
如果没有可用的代码解决方案;示例、教程、类似情况的链接,任何东西都有帮助。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2016-1-5 10:24:31 | 显示全部楼层
欢迎来到TheSwamp。。下面是一个没有用户输入的快速示例,说明如何复制和增加每个布局选项卡上的修订块值。我添加了注释,以便您可以从中学习。
  1. (defun c:revs ;; Localized variables & functions
  2.               (/ _dxf _copy _getattval _setattval blks co o rev ss)
  3.   (vl-load-com)
  4.   ;;
  5.   (defun _dxf (code ename)
  6.     (if (and ename (= (type ename) 'ename))
  7.       (cdr (assoc code (entget ename '("*"))))
  8.     )
  9.   )
  10.   (defun _getattval (block tag / att out)
  11.     (foreach att (vlax-invoke block 'getattributes)
  12.       (if (eq (strcase tag) (strcase (vla-get-tagstring att)))
  13.         (setq out (vla-get-textstring att))
  14.       )
  15.     )
  16.     out
  17.   )
  18.   (defun _setattval (block tag value / att out)
  19.     (foreach att (vlax-invoke block 'getattributes)
  20.       (if (eq (strcase tag) (strcase (vla-get-tagstring att)))
  21.         (setq out (vla-put-textstring att value))
  22.       )
  23.     )
  24.     out
  25.   )
  26.   (defun _copy (obj from to / out)
  27.     (cond ((setq out (vlax-invoke obj 'copy)) (vlax-invoke out 'move from to) (vla-update out) out))
  28.   )
  29.   ;; Helper functions \ >
  30.   ;;
  31.   ;; Foreach paperspace tab
  32.   (foreach tab (layoutlist)
  33.     ;; If we find 'revblk'(s) on that tab
  34.     (if (and (setq ss (ssget "_X" (list '(0 . "insert") (cons 410 tab) '(2 . "RevBlk"))))
  35.              ;; Convert the selection set to a list
  36.              (setq ss (mapcar 'cadr (ssnamex ss)))
  37.              ;; Sort the blocks by greatest Y value & grab the first item
  38.              (setq ss (car (vl-sort ss '(lambda (a b) (> (caddr (_dxf 10 a)) (caddr (_dxf 10 a)))))))
  39.              ;; Add the first item ( greatest Y ) to a 'blks' list
  40.              (setq blks (cons ss blks))
  41.         )
  42.       ;; Iterate the 'blks' list
  43.       (foreach blk blks
  44.         (if (and ;; Convert block from 'ename' to vla-object
  45.                  (setq o (vlax-ename->vla-object blk))
  46.                  ;; Make a copy + 0.127148 in the Y
  47.                  (setq co (_copy o '(0.0 0.0 0.0) '(0.0 0.127148 0.0)))
  48.             )
  49.           (progn ;; Check that the att value is a number
  50.                  (or (and (setq rev (_getattval o "R#"))
  51.                           (numberp (read rev))
  52.                           ;; Increment the value by 1
  53.                           (setq rev (itoa (1+ (atoi rev))))
  54.                      )
  55.                      ;; Or set it to 0
  56.                      (setq rev "0")
  57.                  )
  58.                  ;; Set new attribute values in the copied block
  59.                  (_setattval co "R#" rev)
  60.                  (_setattval co "REVl1" (strcat "DESCRIPTION FOR REV - " rev))
  61.                  (_setattval co "REVB" "YODA")
  62.                  (_setattval co "REVD" (menucmd "M=$(edtime,$(getvar,date),M"/"YY)"))
  63.           )
  64.         )
  65.       )
  66.     )
  67.   )
  68.   (princ)
  69. )
回复

使用道具 举报

3

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
17
发表于 2016-1-6 17:45:59 | 显示全部楼层
哇,罗恩,太好了!而且效果非常好
Ron,当我运行它时:它将在现有块上放置一个新块(RevBlk),但也将放置#。#是布局选项卡的数量
因此,如果有6个布局选项卡,将插入6个块。我正在学习/筛选它,以找到发生这种情况的地方<谢谢你的欢迎,我在这里潜伏了一段时间,现在是我更多参与的时候了。我对尽可能多地学习感到兴奋。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2016-1-6 23:39:05 | 显示全部楼层
请原谅这可能是一个愚蠢的问题,但是您是否考虑过简单地使用图纸集管理器(SSM)自定义特性,用字段填充您的属性化标题栏等?干杯
回复

使用道具 举报

3

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
17
发表于 2016-1-7 14:24:46 | 显示全部楼层
我的新朋友们,我有一些坏消息。
我被告知我将被解雇。我要完成我目前的设计/工程项目,大约2周后,我需要找到一个新的雇主。
因此,我暂时无法在这个项目上投入太多精力(如果有的话)。如果你对这个项目感兴趣,请订阅它。
至于这个项目线程,我将创建我在OP中引用的DCL,然后我们可以从那里开始?
感谢您迄今为止的帮助。我不会放弃这个项目,但我不能像我希望的那样在接下来的几周内投入时间。
我知道我会回到这个项目中来,我觉得这个项目太多才多艺,太有用了,不能让它就这样结束。
我希望能尽快回来发布。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2016-1-7 14:48:07 | 显示全部楼层
很抱歉听到这个消息
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2016-1-7 15:00:02 | 显示全部楼层
这是非常不幸的。祝你求职好运。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:27 , Processed in 0.859183 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表