找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7258|回复: 37

[求助] 求能按参数选择“动态块”的lisp

[复制链接]

已领礼包: 1077个

财富等级: 财源广进

发表于 2013-8-7 19:02:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
       我做了很多结构专业方面的“动态块”,用起来很方便,可是有一个问题一直很困扰我。那就是如何通过指定我自己定义的动态块参数快速选择出我想要的块。比如下图这个块的特性。
无标题.gif

      “暗柱名称”这个是属性值,我直接通过find命令就可以找出来。可是如果我想找“暗柱长”为400且“暗柱宽”为“200”的动态块呢?
     我把这个对应的dwg文件传上,CAD2012创建,希望高手解决。
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:动态块.rar 
下载次数:164  文件大小:33.23 KB 
下载权限: 不限 以上  [免费赚D豆]


    如果这个很难,也请高手们直接告知,我就不抱这个希望了....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1757个

财富等级: 堆金积玉

发表于 2013-8-8 08:41:22 | 显示全部楼层
不受版本限制
RTX截图未命名.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-8 00:44:44 | 显示全部楼层
hardthinking 发表于 2013-8-8 00:01
辛苦啦~~不过要是能研究出来那真是...太有价值了..

试验了下,仅适用 2011+ 及LZ的例图
  1. (defun c:tt (/ l w sl i e ss s)
  2.   (princ "\n暗柱动态块过滤选择....")
  3.   (if (and
  4.         (setq l (getreal "\n暗柱长: "))
  5.         (setq w (getreal "\n暗柱宽: "))
  6.         (setq ss (ssget "x" '((0 . "Insert"))))
  7.       )
  8.     (progn
  9.       (setq sl (sslength ss)
  10.             i -1
  11.             s (ssadd)
  12.       )
  13.       (repeat sl
  14.         (setq e (ssname ss (setq i (1+ i))))
  15.         (if (and
  16.               (= (getpropertyvalue e "IsDynamicBlock") 1)
  17.               (member "暗柱宽" (mapcar
  18.                                  'vla-get-propertyname
  19.                                  (safearray-value (variant-value (vla-GetDynamicBlockProperties
  20.                                                                                                 (vlax-ename->vla-object e)
  21.                                                                  )
  22.                                                   )
  23.                                  )
  24.                                )
  25.               )
  26.               (equal (getpropertyvalue e "AcDbDynBlockProperty暗柱宽") w)
  27.               (equal (getpropertyvalue e "AcDbDynBlockProperty暗柱长") l)
  28.             )
  29.           (ssadd e s)
  30.         )
  31.       )
  32.       (if (zerop (sslength s))
  33.         nil
  34.         (sssetfirst nil s)
  35.       )
  36.     )
  37.   )
  38.   (princ)
  39. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-7 23:53:01 | 显示全部楼层
ucuc2003 发表于 2013-8-7 23:43
按动态块的各种属性选择块的程序好像还没有

目前没有找到直接过滤方法,有了这个 Getpropertyvalue 遍历起来方便多了,可惜只适用 2011+
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-7 19:04:36 | 显示全部楼层
看你用这个,你LISP应该不只是会用COMMAND,你另外的问题朋友帮你解答了,可以没啊,去回复下大家吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-7 19:17:14 | 显示全部楼层
XDSoft 发表于 2013-8-7 19:04
看你用这个,你LISP应该不只是会用COMMAND,你另外的问题朋友帮你解答了,可以没啊,去回复下大家吧。

哈,不好意思,失礼了,,,我这就回复~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2013-8-7 20:11:14 | 显示全部楼层
楼主,一直想学动态块,能给大家讲讲动态块有什么好处不?你结构专业用这个动态块优点在哪?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-7 20:51:04 | 显示全部楼层
Lisphk 发表于 2013-8-7 20:11
楼主,一直想学动态块,能给大家讲讲动态块有什么好处不?你结构专业用这个动态块优点在哪?

    优点很多,而且我相信,不光是结构专业,任何专业都能有它的用武之地。
    优点1:实现“参数化”绘图。
          你自己做的块的参数都在对应的特性列表中,在特性列表修改参数,对应的图形就发生了变化,修改迅速,还能保证画图精度。
          举例说明:比如我事先做好一个柱帽的图块,以后画图我只需要插入这个图块,改改它的参数,对应的精准柱帽就画好了。是不是很方便?            

    优点2:可“急速”批量改图。(说“迅速”不足以表达我的心情)
           其实是优点一的延伸。还是参数绘图,只不过呢,是一下修改好多图块。还是举“柱帽”的例子说明,比如我已经按照要求绘制好了一张车库的柱帽平面布置图。可审图的一看说了,你做的太大,改小点。我的妈呀,一个大车库上百个柱子呢,一个一个改累死不说,关键它费时间啊。但如果你用“动态块”就没这么复杂。你只需要把所有柱帽“框选”出来,在弹出的特性栏中,修改下参数,这n白个柱帽大小就一下改好了。
    优点3:可自动计算图形参数。
           这个优点需要你做块的时候自己设计。我给你看个我做好的“一字型暗柱”的特性就明白了。如下图:
            无标题.gif
           这个纵筋配筋率,就是根据填写的参数,程序自动算出来的。我做结构设计必须保证暗柱配筋率大于1%,一看暗柱特性,我自然就知道有没有满足规范要求了。
     优点4:根据“自定义特性”快速筛选出符合条件的"动态块"。
           比如我想筛选出配筋率小于1%的暗柱...
           额.....好吧,其实这个优点4 我还没有实现,至少CAD自带的功能实现不了,但我知道肯定是可以实现的,就是困难程度,,不会编程的我肯定是搞不定了,把这个问题留给 晓东论坛 的大侠们吧,,,



点评

你的这个配筋的暗柱动态块能传上来学习学习吗?  发表于 2013-11-10 22:58

评分

参与人数 1D豆 +5 收起 理由
Lispboy + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-7 21:20:11 来自手机 | 显示全部楼层
lz说用find,这个怎么找?来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-7 21:32:30 | 显示全部楼层
st788796 发表于 2013-8-7 21:20
lz说用find,这个怎么找?

    额,我说的不是编程什么之类的find,就是CAD自带的查找功能“find”命令,输入命令后,弹出“查找与替换”对话框,然后勾选“列出结果”,输入想查找的内容,比如我找“AZ1”,单击“查找”,CAD列出所有含AZ1的对象。我再通过点“对象类型”把“块”集中到一起,在列表中框选出我要的对象就行了。
    额,其实也没这么麻烦,我做的东西其实“层”很分明,只要只显示要找的“块”所在层,然后find,列出结果全选,就可以了,,,

点评

呵呵,又学了一招,以前从没有用过Find这个功能, 在2011以上有一个函数很好用 命令: (getpropertyvalue (car (entsel)) "AcDbDynBlockProperty暗柱宽") 选择对象: 180.0  详情 回复 发表于 2013-8-7 22:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-7 22:17:34 | 显示全部楼层
hardthinking 发表于 2013-8-7 21:32
额,我说的不是编程什么之类的find,就是CAD自带的查找功能“find”命令,输入命令后,弹出“查找与 ...

呵呵,又学了一招,以前从没有用过Find这个功能,
在2011以上有一个函数很好用
命令: (getpropertyvalue (car (entsel)) "AcDbDynBlockProperty暗柱宽")
选择对象: 180.0
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-7 22:23:34 | 显示全部楼层
本帖最后由 st788796 于 2013-8-7 22:24 编辑

用这个检查属性
命令: (dumpallproperties (car (entsel)))

选择对象: Begin dumping object (class: AcDbBlockReference)
AcDbDynBlockPropertyOrigin/X (type: double)  (RO) = 0.000000
AcDbDynBlockPropertyOrigin/Y (type: double)  (RO) = 100.000000
AcDbDynBlockPropertyOrigin/Z (type: double)  (RO) = 0.000000
AcDbDynBlockProperty暗柱宽 (type: double)  (LocalName: 暗柱宽) = 200.000000
AcDbDynBlockProperty暗柱长 (type: double)  (LocalName: 暗柱长) = 400.000000
Annotative (type: bool)  (RO)  (LocalName: 注释性) = 0
AnnotativeScale (type: AcString)  (RO)  (LocalName: 注释性比例) = Failed to get value
AnonymousBlockTableRecord (type: AcDbObjectId)  (RO) = 7ef038d8
AttributeCollection (type: AcDbObjectId)  (RO)
Item 0:
    ClassName (type: AcString)  (RO) =
    IsA (type: AcRxClass*)  (RO) = AcRxBoxedValueOnStack
    LocalizedName (type: AcString)  (RO) =
BlockId (type: AcDbObjectId)  (RO) = 7ef01cf8
BlockTableRecord (type: AcDbObjectId)  (RO)  (LocalName: 名称) = 7ef03798
BlockTableRecord/BlockScaling (type: AcDbBlockTableRecord::BlockScaling) = 0
BlockTableRecord/PathName (type: const ACHAR*) =
BlockTableRecord/UnitFactor (type: double)  (RO)  (LocalName: 单位因子) = 1.000000
BlockTableRecord/Units (type: AcString)  (RO)  (LocalName: 块单位) = 无单位
BlockTransform (type: AcGeMatrix3d) = ((1.000000 0.000000 0.000000 0.000000)(0.000000 1.000000 0.000000 0.000000) (0.000000 0.000000 1.000000 0.000000) (14276.046363 6888.584388 0.000000 1.000000))
CastShadows (type: bool) = 1
ClassName (type: AcString)  (RO) =
CollisionType (type: AcDb::CollisionType)  (RO) = 1
Color (type: AcCmColor)  (LocalName: 颜色) = BYLAYER
DynamicBlockReferencePropertyCollection (type: AcDbDynBlockReferenceProperty)  (RO)
DynamicBlockTableRecord (type: AcDbObjectId)  (RO) = 7ef03798
ExtensionDictionary (type: AcDbObjectId)  (RO) = 7ef08060
ExternalPath (type: AcString)  (RO)  (LocalName: 路径) = Failed to get value
Handle (type: AcDbHandle)  (RO) = 72b
HasFields (type: bool)  (RO) = 0
HasSaveVersionOverride (type: bool) = 0
Hyperlinks (type: AcDbHyperlink*)
IsA (type: AcRxClass*)  (RO) = AcDbBlockReference
IsAProxy (type: bool)  (RO) = 0
IsCancelling (type: bool)  (RO) = 0
IsDynamicBlock (type: bool)  (RO) = 1
IsEraseStatusToggled (type: bool)  (RO) = 0
IsErased (type: bool)  (RO) = 0
IsModified (type: bool)  (RO) = 0
IsModifiedGraphics (type: bool)  (RO) = 0
IsModifiedXData (type: bool)  (RO) = 0
IsNewObject (type: bool)  (RO) = 0
IsNotifyEnabled (type: bool)  (RO) = 0
IsNotifying (type: bool)  (RO) = 0
IsObjectIdsInFlux (type: bool)  (RO) = 0
IsPersistent (type: bool)  (RO) = 1
IsPlanar (type: bool)  (RO) = 1
IsReadEnabled (type: bool)  (RO) = 1
IsReallyClosing (type: bool)  (RO) = 1
IsTransactionResident (type: bool)  (RO) = 0
IsUndoing (type: bool)  (RO) = 0
IsWriteEnabled (type: bool)  (RO) = 0
LayerId (type: AcDbObjectId)  (LocalName: 图层) = 7ef03f00
LineWeight (type: AcDb::LineWeight)  (LocalName: 线宽) = -1
LinetypeId (type: AcDbObjectId)  (LocalName: 线型) = 7ef01ca8
LinetypeScale (type: double)  (RO)  (LocalName: 线型比例) = 1.000000
LocalizedName (type: AcString)  (RO) = 块参照
MatchOrientationToLayout (type: bool)  (LocalName: 使方向与布局匹配) = Failed to get value
MaterialId (type: AcDbObjectId)  (LocalName: 材质) = 7ef01f60
MergeStyle (type: AcDb::DuplicateRecordCloning)  (RO) = 1
Normal/X (type: double) = 0.000000
Normal/Y (type: double) = 0.000000
Normal/Z (type: double) = 1.000000
ObjectId (type: AcDbObjectId)  (RO) = 7ef08058
OwnerId (type: AcDbObjectId)  (RO) = 7ef01cf8
PlotStyleName (type: AcString)  (LocalName: 打印样式) = ByLayer
Position/X (type: double)  (LocalName: 插入点 X 坐标) = 14276.046363
Position/Y (type: double)  (LocalName: 插入点 Y 坐标) = 6888.584388
Position/Z (type: double)  (LocalName: 插入点 Z 坐标) = 0.000000
ReceiveShadows (type: bool) = 1
Rotation (type: double)  (LocalName: 旋转) = 0.000000
ScaleFactors/UniformScale (type: double)  (LocalName: 比例) = Failed to get value
ScaleFactors/X (type: double)  (LocalName: X 比例) = 1.000000
ScaleFactors/Y (type: double)  (LocalName: Y 比例) = 1.000000
ScaleFactors/Z (type: double)  (LocalName: Z 比例) = 1.000000
ShadowDisplay (type: AcDb::ShadowFlags)  (RO)  (LocalName: 阴影显示) = Failed to get value
Transparency (type: AcCmTransparency)  (LocalName: 透明度) = 0
TreatAsBlockRefForExplode (type: bool)  (RO) = 0
Visible (type: AcDb::Visibility) = 0
暗柱编号 (type: AcString)  (LocalName: 暗柱编号) = AZ-1
End object dump
nil
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-8-7 22:41:10 | 显示全部楼层
楼主这个帖子对我启发很大。一直对动态块不感冒,看了楼主图文并茂的讲解,茅塞顿开。

这个是ACAD解决图块放大后,带宽度等线也跟着放大等问题

优点:
1、 图块作为容器组织实体,便于选择
2、 可以同时更新所有INSERT
3、 同比例情况下,修改参数,图块变化,但带宽度等实体该多宽还多宽,属性不变。没试验线型,估计线型肯定也不变。这东西能解决不同比例画详图啊。

应用前景无限。

只是好奇,ACAD从哪个版本开始有这个的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-7 23:43:20 | 显示全部楼层
按动态块的各种属性选择块的程序好像还没有
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-7 23:56:01 | 显示全部楼层
Lispboy 发表于 2013-8-7 22:41
楼主这个帖子对我启发很大。一直对动态块不感冒,看了楼主图文并茂的讲解,茅塞顿开。

这个是ACAD解决图 ...

我也记不清,但10版肯定就有了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-8-7 23:57:34 | 显示全部楼层
API准备介入{:soso_e113:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-8 00:01:38 | 显示全部楼层
st788796 发表于 2013-8-7 23:53
目前没有找到直接过滤方法,有了这个 Getpropertyvalue 遍历起来方便多了,可惜只适用 2011+

辛苦啦~~不过要是能研究出来那真是...太有价值了..

点评

试验了下,仅适用 2011+ 及LZ的例图  详情 回复 发表于 2013-8-8 00:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-26 23:15 , Processed in 0.494170 second(s), 75 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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