乐筑天下

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

[编程交流] 将数据附着到块创建

[复制链接]

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 11:43:12 | 显示全部楼层
嗨,李,
 
我理解你的回答,这可能是我的理解方式。
 
使用代码后,我将多段线转换为块,并使用(setq nHandle(vla get handle block))将实体句柄添加到TAG1,这将图形50FC作为实体句柄。
 
如果我在命令行发出以下命令
(setq en(car(entsel))[选择新块]
 
然后
 
(entget en)
 
返回所有数据,包括(5。“5103”)
 
 
这是我无法解决的问题,因为我想检查附加到块的nHandle值是否正确,目前似乎不正确。
 
希望这能让事情变得更清楚一点。
 
约翰
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:45:27 | 显示全部楼层
但是,您是在检索块表或insert中的块定义句柄吗?
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 11:47:14 | 显示全部楼层
嗨,李,
 
我以为我得到了插入物,或者更确切地说,我希望我得到的是插入块。是否有一种方法可以同时达到这两个目的,或者这取决于我在代码中的什么位置获得句柄?
 
我会做更多的调查,因为我确信我就快到了,但任何的指示都会受到欢迎。
 
约翰
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:51:09 | 显示全部楼层
这是一个正确的方向:
 
  1. (defun c:MakeSpace ( / *error* BLOCK CEN DOC FLG ID NME OBJS SPC SS )
  2. (vl-load-com)
  3. ;; Lee Mac  ~  18.05.10
  4. (setq id "SPACE-")
  5. (defun *error* ( msg )
  6.    (and flg (vla-EndUndoMark doc))
  7.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  8.        (princ (strcat "\n** Error: " msg " **")))
  9.    (princ)
  10. )
  11. (setq spc
  12.    (if
  13.      (or
  14.        (eq AcModelSpace
  15.          (vla-get-ActiveSpace
  16.            (setq doc
  17.              (vla-get-ActiveDocument
  18.                (vlax-get-acad-object)
  19.              )
  20.            )
  21.          )
  22.        )
  23.        (eq :vlax-true (vla-get-MSpace doc))
  24.      )
  25.      (vla-get-ModelSpace doc)
  26.      (vla-get-PaperSpace doc)
  27.    )
  28. )
  29. (initget 1)
  30. (setq nme (getstring "\nPlease Enter Space ID: "))
  31. (cond
  32.    (
  33.      (tblsearch "BLOCK" (strcat id nme))
  34.      (princ "\n** Block Already Exists **")
  35.    )
  36.    (
  37.      (not (setq ss (ssget "_:L")))
  38.    )
  39.    (
  40.      (setq flg (not (vla-StartUndoMark doc)))
  41.      (setq block
  42.        (vla-Add (vla-get-Blocks doc)
  43.          (vlax-3D-point
  44.            (setq cen
  45.              (apply (function mapcar)
  46.                (cons
  47.                  (function
  48.                    (lambda ( x y )
  49.                      (/ (+ x y) 2.)
  50.                    )
  51.                  )
  52.                  (SSBoundingBox ss)
  53.                )
  54.              )
  55.            )
  56.          )
  57.          (strcat id nme)
  58.        )
  59.      )
  60.      (vla-copyObjects doc
  61.        (ObjectVariant (setq objs (ss->vla ss))) block
  62.      )
  63.      (mapcar
  64.        (function
  65.          (lambda ( prmpt pt tag )
  66.            (vla-AddAttribute block (getvar 'TEXTSIZE) 0 prmpt
  67.              (vlax-3D-point pt) tag ""
  68.            )
  69.          )
  70.        )
  71.        (list "Tag 1: " "Tag 2: " "Tag 3: ")
  72.        (list cen
  73.          (polar cen (/ (* 3 pi) 2.) (* 1.5 (getvar 'TEXTSIZE)))
  74.          (polar cen (/ (* 3 pi) 2.) (* 3.0 (getvar 'TEXTSIZE)))
  75.        )
  76.        (list "TAG1" "TAG2" "TAG3")
  77.      )
  78.      (if
  79.        (vl-catch-all-error-p
  80.          (setq bObj
  81.            (vl-catch-all-apply (function vla-InsertBlock)
  82.              (list spc (vlax-3D-point cen) (strcat id nme) 1. 1. 1. 0.)
  83.            )
  84.          )
  85.        )
  86.        (princ "\n** Error Inserting Block **")
  87.        (foreach att (vlax-invoke bObj 'GetAttributes)
  88.          (vla-put-TextString att (vla-get-Handle bObj))
  89.        )
  90.      )
  91.      (mapcar (function vla-erase) objs)
  92.      (setq flg (vla-EndUndoMark doc))
  93.    )
  94. )
  95. (princ)
  96. )
  97. (defun ObjectVariant ( lst )
  98. (vlax-make-variant
  99.    (vlax-safearray-fill
  100.      (vlax-make-safearray vlax-vbObject
  101.        (cons 0 (1- (length lst)))
  102.      )
  103.      lst
  104.    )
  105. )
  106. )
  107. (defun SSBoundingBox ( ss / ent ll ur bBoxs )
  108. ;; Lee Mac  ~  18.03.10
  109. (  (lambda ( i )
  110.       
  111.       (while (setq ent (ssname ss (setq i (1+ i))))
  112.         (vla-getBoundingBox (vlax-ename->vla-object ent) 'll 'ur)
  113.         (setq bBoxs (cons (vlax-safearray->list ur)
  114.                           (cons (vlax-safearray->list ll) bBoxs)))
  115.       )
  116.     )   
  117. -1
  118. )
  119. (mapcar
  120.    (function
  121.      (lambda (operation)
  122.        (apply (function mapcar)
  123.          (cons operation bBoxs)
  124.        )
  125.      )
  126.    )
  127.    '(min max)
  128. )
  129. )
  130. (defun ss->vla ( ss )
  131. (if ss
  132.    (
  133.      (lambda ( i / e l )
  134.        (while (setq e (ssname ss (setq i (1+ i))))
  135.          (setq l
  136.            (cons
  137.              (vlax-ename->vla-object e) l
  138.            )
  139.          )
  140.        )
  141.        l
  142.      )
  143.      -1
  144.    )
  145. )
  146. )
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 11:55:56 | 显示全部楼层
嗨,李,
 
非常感谢你的帮助。我刚刚掌握了visual Lisp。我可以看到代码的去向。
 
明天早上我会试一试的。
 
当做
约翰
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:57:53 | 显示全部楼层
太好了-如果你卡住了,请告诉我
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:00:30 | 显示全部楼层
嗨,李,
 
我尝试了您建议的代码,但出现了一个错误。如果我将bObj更改为Variable block,则ActiveX服务器返回错误未知名称“GETATTRIBUTES”。我确信block是正确的,因为这是刚刚插入的块。
 
如果我将bObj更改为Obj(我认为这是一个集合,所以它是错误的),那么我会得到错误,错误的参数类型是VLA-OBJECT nil
 
我确信block是正确的,但不确定为什么会出错,我想我可能只是把对象弄错了。
 
 
对不起,这么讨厌。
 
你能推荐一本好的visual lisp参考书吗?
 
非常感谢
 
约翰
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:04:46 | 显示全部楼层
为什么要更改变量“bObj”?变量“block”指向块表中的块定义,而不是插入的块引用(INSERT)。'Objs是VLA对象的列表。
 
你想要实现什么?
 
至于这本书,我推荐Visual LISP帮助文件——你可以从中学到很多东西(另外,它们是免费的)。
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:07:57 | 显示全部楼层
嗨,李,
 
对不起,我没有让brian启动,我错过了阅读插入块行,以为这只是Obj而不是bObj。
 
很抱歉。
 
我将通读帮助文件,这似乎是一个很好的起点。
 
非常感谢
回复

使用道具 举报

4

主题

19

帖子

15

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 12:10:43 | 显示全部楼层
嗨,李,
 
非常感谢您的帮助和支持。我现在有它的工作,它做了我需要的一切。你的帮助和指点起了很大的作用。
 
非常感谢
约翰
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 11:31 , Processed in 0.414176 second(s), 70 queries .

© 2020-2025 乐筑天下

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