明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1610|回复: 8

[函数] 如何选择并亮显线性比例不为1的标注,使用1040组码不全面

[复制链接]
发表于 2013-6-17 17:12 | 显示全部楼层 |阅读模式
1明经币
希望得到的如图1所示


但现在选择的是这样的,但其余的线性比例是1

双击左键,可以看到其线性比例为1,

但实际上这个图元的组码为
((-1 . <图元名: 7ec15a40>) (0 . "DIMENSION") (330 . <图元名:
7ef7ccf8>) (5 . "580") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"轮廓线") (62 . 7) (100 . "AcDbDimension") (2 . "*D40") (10 2117.65 591.909
0.0) (11 2126.0 592.424 0.0) (12 0.0 0.0 0.0) (70 . 32) (1 . "") (71 . 5) (72 .
1) (41 . 1.0) (42 . 16.7) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0) (210 0.0
0.0 1.0) (3 . "AM_GB$0") (100 . "AcDbAlignedDimension") (13 2134.35 613.604
0.0) (14 2117.65 606.655 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50
. 0.0) (100 . "AcDbRotatedDimension") (-3 ("ACAD" (1000 . "DSTYLE") (1002 .
"{") (1070 . 41) (1040 . 0.6) (1070 . 42) (1040 . 0.5) (1070 . 43) (1040 . 1.5)
(1070 . 44) (1040 . 0.5) (1070 . 47) (1040 . 0.05) (1070 . 48) (1040 . 0.05)
(1070 . 140) (1040 . 0.63) (1070 . 271) (1070 . 2) (1070 . 272) (1070 . 2)
(1002 . "}"))))
有7个1040组码

下面是我和程序,请教一下是什么原因造成这样,
;;;图元表转为选择集  http://bbs.mjtd.com/forum.php?mod=viewthread&tid=84780  作者 redcat
;;;格式:(ents->ss ents ss)
;;;如果选择集ss/=nil将ents表中的图元加入到ss中,并返回ss
;;;如果 ss=nil,新建一个选择集并返回.
;;;(ents->ss (sset->list (ssget) nil) nil)
(defun ents->ss (ents ss / ename)
  (if (= ss nil)
    (setq ss (ssadd))
  )
  (mapcar '(lambda (ename)
      (setq ss (ssadd ename ss))
    )
   ents
  )
  ss
)
(DEFUN C:ER (/ I N SS ENDATA KZSX XXBL NUM ss1 n endenlst)
  (setvar "cmdecho" 0)
  (SETQ SS (SSGET "X" '((0 . "DIMENSION")))
i  0
n  0
  )
  (repeat (sslength ss)
    (setq en (ssname ss i))
    (setq endata (entget en '("*")))
    (if (assoc -3 endata)
      (progn
(setq kzsx (cdr (nth 0 (cdr (assoc -3 endata)))))
(repeat (length kzsx)
   (setq num (nth n kzsx)
  n   (1+ n)
   )
   (if (= (car num) 1040)
     (setq xxbl (cdr num))
   )
)
(IF (or (/= XXBL nil) (/= XXBL 1))
   (setq endenlst (cons en endenlst))
)
      )
      (setq n 0)
    )
    (setq i (1+ i))
  )
  (sssetfirst (ents->ss endenlst ss1) (ents->ss endenlst ss1))
)
附件: 您需要 登录 才可以下载或查看,没有账号?注册

最佳答案

查看完整内容

你原代码太麻烦,我写了一个完整的。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-6-17 17:12 | 显示全部楼层
本帖最后由 namezg 于 2013-6-17 21:15 编辑

你原代码太麻烦,我写了一个完整的。

  1. ;获得标注图元的线性比例
  2. ;ename -- 标注图元名
  3. ;(zg-get-dimlfac (setq ename (car (entsel "\n选择标注对象: "))))
  4. ;方法一
  5. (defun zg-get-dimlfac (ename / dxf dat lst dimlfac DimstyleName)
  6. (if (and ename
  7.    (setq dxf (entget ename '("*")))
  8.    (= (cdr (assoc 0 dxf)) "DIMENSION")
  9.   )
  10.   (if (and (setq dat (assoc -3 dxf))
  11.     (setq lst (cadr dat))
  12.     (setq lst (member (cons 1070 144) lst))
  13.    )
  14.    (setq dimlfac (cdadr lst))
  15.    (progn
  16.     (setq DimstyleName (cdr (assoc 3 dxf)))
  17.     (setq lst (tblsearch "dimstyle" DimstyleName))
  18.     (setq dimlfac (cdr (assoc 144 lst)))
  19.    )
  20.   )
  21. )
  22. )
  23. ;|
  24. ;获得标注图元的线性比例
  25. ;ename -- 标注图元名
  26. ;(zg-get-dimlfac (setq ename (car (entsel "\n选择标注对象: "))))
  27. ;方法二:
  28. (defun zg-get-dimlfac (ename / dxf obj dimlfac)
  29. (if (and ename
  30.    (setq dxf (entget ename '("*")))
  31.    (= (cdr (assoc 0 dxf)) "DIMENSION")
  32.   )
  33.   (setq dimlfac (vla-get-LinearScaleFactor (vlax-ename->vla-object ename)))
  34. )
  35. )
  36. |;
  37. ;选取并亮显线性比例不为1的标注对象
  38. (defun c:er (/ ss i en ss1)
  39. (setq ss (ssget "x" '((0 . "dimension"))))
  40. (setq i 0)
  41. (setq ss1 (ssadd))
  42. (repeat (sslength ss)
  43.   (setq en (ssname ss i))
  44.   (if (/= (zg-get-dimlfac en) 1.0)
  45.    (ssadd en ss1)
  46.   )
  47.   (setq i (1+ i))
  48. )
  49. (sssetfirst nil ss1)
  50. )

评分

参与人数 1明经币 +1 收起 理由
革天明 + 1 赞一个!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-6-17 17:21 | 显示全部楼层
上传测试图

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2013-6-17 18:33 | 显示全部楼层
vla-get-LinearScaleFactor最简单
回复

使用道具 举报

发表于 2013-6-17 19:24 | 显示全部楼层
  1. ;获得标注图元的线性比例
  2. ;ename -- 标注图元名
  3. ;(zg-get-dimlfac (setq ename (car (entsel "\n选择标注对象: "))))
  4. ;方法一:
  5. (defun zg-get-dimlfac (ename / dxf dat lst dimlfac DimstyleName)
  6.         (if (and ename
  7.                         (setq dxf (entget ename '("*")))
  8.                         (= (cdr (assoc 0 dxf)) "DIMENSION")
  9.                 )
  10.                 (if (and (setq dat (assoc -3 dxf))
  11.                                 (setq lst (cadr dat))
  12.                                 (setq lst (member (cons 1070 144) lst))
  13.                         )
  14.                         (setq dimlfac (cdadr lst))
  15.                         (progn
  16.                                 (setq DimstyleName (cdr (assoc 3 dxf)))
  17.                                 (setq lst (tblsearch "dimstyle" DimstyleName))
  18.                                 (setq dimlfac (cdr (assoc 144 lst)))
  19.                         )
  20.                 )
  21.         )
  22. )

点评

cons 1070 144 这些组码的意义可以从哪里查询?  发表于 2013-6-18 10:01
回复

使用道具 举报

发表于 2013-6-17 19:25 | 显示全部楼层
本帖最后由 namezg 于 2013-6-17 19:27 编辑
  1. ;获得标注图元的线性比例
  2. ;ename -- 标注图元名
  3. ;(zg-get-dimlfac (setq ename (car (entsel "\n选择标注对象: "))))
  4. ;方法二:
  5. (defun zg-get-dimlfac (ename / dxf obj dimlfac)
  6.         (if (and ename
  7.                         (setq dxf (entget ename '("*")))
  8.                         (= (cdr (assoc 0 dxf)) "DIMENSION")
  9.                 )
  10.                 (setq dimlfac (vla-get-LinearScaleFactor (vlax-ename->vla-object ename)))
  11.         )
  12. )

评分

参与人数 1明经币 +1 收起 理由
革天明 + 1 (cons 1070 144)这对组码的意义?

查看全部评分

回复

使用道具 举报

发表于 2013-6-17 19:42 | 显示全部楼层
谢谢众位坛友代码分享!
回复

使用道具 举报

发表于 2013-6-17 21:41 | 显示全部楼层
namezg 发表于 2013-6-17 19:25

       受教了!!!
回复

使用道具 举报

发表于 2014-2-18 14:33 | 显示全部楼层
怎样获取线图元的线性比例呢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 14:48 , Processed in 0.398209 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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