明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1676|回复: 7

[提问] 块内图元的坐标定位[已解决]感谢版主

[复制链接]
发表于 2019-3-24 01:02 | 显示全部楼层 |阅读模式
本帖最后由 CAD新军 于 2019-3-24 23:21 编辑



我想弄一个搜索指定文字,然后引线的脚本。块内图元定位总是不正确,求高手指导一下。我发现了,无论块怎么移动、复制,定位都是按块最初插入的位置来的。源码附。

因为注释写得不多,而且是从自己写的一个图层控制里面拷过来的通用函数,简单说一下几个函数的用途

  1. C:TT
  2. HLJ:DXF
  3. HLJ:BLKQ
  4. HLJ:ITERSS
  5. HLJ:SS2SETS
复制代码



TT是调用函数

DXF ( id item ) 取得图元指定项属性的,如这里核心是 (DXF 10 k) 取得图元坐标
SS2SETS( ss )  把TT函数里面的ssget选定的所有图元生成一张图元表,然后扔给迭代函数ITERSS
ITERSS(set) 接力SS2SETS,按需要改写,把图元表里面的所有图元遍历,按需要选中一批生成另外一张表,如果遇到块,会送到BLKQ()迭代块里面的元素
BLKQ() 当ITERSS遇到块时,送进这里处理,返回块里的所有元素,再进行一次ITERSS


本帖子中包含更多资源

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

x
发表于 2019-3-24 18:58 | 显示全部楼层
  1. (defun c:tt ()
  2.   (princ "\n请选择范围")
  3.   (if (setq ss (ssget '((0 . "text,insert"))))
  4.     (mapcar '(lambda (x)
  5.                (cond ((= (hlj-dxf 0 x) "TEXT")
  6.                       (command "LINE" (hlj-dxf 10 x) '(0 0) "")
  7.                      )
  8.                      ((= (hlj-dxf 0 x) "INSERT")
  9.                       (setq p0 (hlj-dxf 10 x)
  10.                             aa (vl-remove-if
  11.                                  '(lambda (y) (/= (hlj-dxf 0 y) "TEXT"))
  12.                                  (hlj-blkQ (hlj-dxf 2 x))
  13.                                )
  14.                       )
  15.                       (foreach a aa
  16.                         (setq p1 (hlj-dxf 10 a)
  17.                               p1 (mapcar '(lambda (x y) (+ y x)) p1 p0)
  18.                         )
  19.                         (command "LINE" p1 '(0 0) "")
  20.                       )
  21.                      )
  22.                )
  23.              )
  24.             (ss2list ss)
  25.     )
  26.   )
  27.   (princ)
  28. )

  29. ;; 次级函数
  30. (defun hlj-dxf (n s1) (cdr (assoc n (entget s1))))

  31. ;; 枚举块中的图元 (hlj-blkQ (hlj-dxf 2 (entget blkname)))
  32. ;; (setq blkname (car (entsel "\n选择: ")))
  33. (defun hlj-blkQ        (blkname / a lst)
  34.   (setq        a   (cdr (assoc -2 (tblsearch "BLOCK" blkname)))
  35.         lst (cons a lst)
  36.   )
  37.   (while (setq a (entnext a))
  38.     (setq lst (cons a lst))
  39.   )
  40.   lst
  41. )

  42. ;; 下面部分ssget选择集初始化成图元表
  43. (defun ss2list (ss / sets itemlist i ent ent)
  44.   (setq        sets (list)
  45.         n    (sslength ss)
  46.   )
  47.   (setq i (- n 1))
  48.   (repeat n
  49.     (setq ent  (ssname ss i)
  50.           sets (cons ent sets)
  51.           i    (1- i)
  52.     )
  53.   )
  54.   sets
  55. )
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2019-3-24 01:07 | 显示全部楼层
哦,对了,代码只会对单行文字引线,测试就是弄一个文字,然后做成快,TT,选中块和不是块内的文字观察区别
发表于 2019-3-24 15:09 | 显示全部楼层
画线的时候把捕捉关了没
 楼主| 发表于 2019-3-24 15:56 | 显示全部楼层
start4444 发表于 2019-3-24 15:09
画线的时候把捕捉关了没

关了也没变化。而且你可以看到,非块内图元线是正确的,就是从文字图元坐标至原点
发表于 2019-3-24 17:30 | 显示全部楼层
你发的代码对块无反应
 楼主| 发表于 2019-3-24 23:18 | 显示全部楼层

感谢大神,完全能用!我学习一下怎么实现的
发表于 2019-3-28 16:08 | 显示全部楼层
学学看看如何制作
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-27 08:36 , Processed in 0.320865 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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