找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1118|回复: 3

[原创] 在dbx里面处理图元的方法

[复制链接]
发表于 2020-9-2 11:37:55 | 显示全部楼层 |阅读模式
购买主题 已有 7 人购买  本主题需向作者支付 2 D豆 才能浏览
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2020-9-2 12:45:32 | 显示全部楼层
来一个示例:将块复制到dbx空间,炸开后返回多段线的dxf
  1. (DEFUN $dao-xian-line-pts$ (blocks / $ents>dbxmodel$ *dbxmodel blocks fzjg line-dxf obj objs vla vlas)
  2.                                         ;导线的多段线坐标
  3.   (defun $ents>dbxmodel$ (ents / *DBXmodel arr ent>array vla vrs)
  4.                                         ;记得释放对象 ,用vlax-release-object函数
  5.     (defun ent>array (ents)
  6.                                         ;图元转数组
  7.       (if (and ents
  8.                (= (type ents) 'list)
  9.                (setq ents (vl-remove nil ents))
  10.           )
  11.         (vl-catch-all-apply
  12.           'vlax-safearray-fill
  13.           (list
  14.             (vl-catch-all-apply
  15.               'vlax-make-safearray
  16.               (list
  17.                 vlax-vbobject
  18.                 (cons 0 (1- (length ents)))
  19.               )
  20.             )                                ;图元转数组
  21.             (mapcar '(lambda (x / a)
  22.                        (setq a (type x))
  23.                        (cond ((= 'ename a) (vlax-ename->vla-object x))
  24.                              ((= 'VLA-OBJECT a) x)
  25.                        )
  26.                      )
  27.                     ents
  28.             )
  29.           )
  30.         )
  31.       )
  32.     )
  33.     (if        (and (setq
  34.                *DBXmodel
  35.                 (vlax-get-property
  36.                   (vl-catch-all-apply
  37.                     'vla-getinterfaceobject
  38.                     (list (vlax-get-acad-object)
  39.                           (if (< (setq vrs (atoi (getvar 'acadver))) 16)
  40.                             "objectdbx.axdbdocument"
  41.                             (strcat "objectdbx.axdbdocument." (itoa vrs))
  42.                           )
  43.                     )
  44.                   )
  45.                   'Modelspace
  46.                 )
  47.              )                                ;获取dbx对象
  48.              (not (vl-catch-all-error-p *DBXmodel)) ;防止出错
  49.              (setq arr (ent>array ents)) ;将图元转换为数组
  50.              (not (vl-catch-all-error-p arr)) ;防止出错
  51.         )
  52.       (progn (setq vla (vl-catch-all-apply
  53.                          'vla-CopyObjects
  54.                          (list
  55.                            (vla-get-ActiveDocument (vlax-get-acad-object))
  56.                            arr
  57.                            *DBXmodel
  58.                          )
  59.                        )                ;复制到对象空间
  60.              )
  61.              (if (vl-catch-all-error-p vla) ;防止出错
  62.                (setq vla nil)
  63.              )
  64.       )
  65.     )
  66.     (list (cons "空间对象" *DBXmodel)
  67.           (cons "复制结果" vla)
  68.           (cons "备注" "记得释放*DBXmodel对象")
  69.     )                                        ;用中文形式返回,中国人能看懂的
  70.   )

  71.   (if (and blocks
  72.            (= (type blocks) 'list) ;图元列表矫正
  73.            (setq blocks (vl-remove nil blocks))
  74.                                         ;移除空值
  75.            (setq fzjg ($ents>dbxmodel$ blocks))
  76.                                         ;复制到db空间去,返回复制结果
  77.            (setq *DBXmodel (cdr (assoc "空间对象" fzjg)))
  78.                                         ;揪出对象,下面需要释放
  79.            (setq vla (cdr (assoc "复制结果" fzjg))) ;揪出复制结果
  80.            (setq vlas (vl-catch-all-apply 'vlax-variant-value (list vla)))
  81.                                         ;变体值
  82.            (not (vl-catch-all-error-p vlas)) ;防止出错
  83.            (setq vlas (vlax-safearray->list vlas)) ;转list
  84.            (not (vl-catch-all-error-p vlas)) ;防止出错
  85.            (setq obj (vla-explode (car vlas))) ;炸开第一个对象
  86.            (not (vl-catch-all-error-p obj)) ;防止出错
  87.            (setq objs (vlax-safearray->list (vlax-variant-value obj)))
  88.                                         ;转为list
  89.       )
  90.     (progn (setq LINE-DXF
  91.                   (mapcar
  92.                     (function (lambda (a / N DXF)
  93.                                 (setq n (vla-get-objectname a))
  94.                                         ;获取名字
  95.                                 (if (and n (WCMATCH N "[,AcDbPolyline,]"))
  96.                                         ;是否为多段线
  97.                                   (SETQ DXF (ENTGET (VLAX-VLA-OBJECT->ENAME A)))
  98.                                         ;获取祖玛
  99.                                 )
  100.                                 (vla-delete a)
  101.                                         ;从对象中删除当前这个图元
  102.                                 DXF        ;返回祖玛
  103.                               )
  104.                     )
  105.                     objs
  106.                   )
  107.            )
  108.            (setq LINE-DXF (vl-remove nil LINE-DXF)) ;删除空值
  109.     )
  110.   )
  111.   (vlax-release-object *DBXmodel)        ;释放对象
  112.   LINE-DXF
  113. )
  114. (setq dxf($dao-xian-line-pts$(list(car(entsel)))))

评分

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

查看全部评分

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

使用道具 举报

已领礼包: 226个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 5600个

财富等级: 富甲天下

发表于 2020-9-3 11:46:18 | 显示全部楼层
感谢楼主分享程序!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 04:23 , Processed in 0.196036 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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