找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 494|回复: 2

[求助] 多段线标注问题

[复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2017-12-25 21:43:54 | 显示全部楼层 |阅读模式

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

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

×
(defun c:pdim (/ plSet pLlst vLst oldOsn cAng cDis cPt)
  (princ "\n<<< Select LwPolyline for dimensioning >>> ")
  (if (setq plSet (ssget '((0 . "LWPOLYLINE"))))
    (progn
      (setq pLlst (vl-remove-if
                    'listp
                    (mapcar 'cadr (ssnamex plSet))
                  )
      )
      (setvar "OSMODE" 0)
      (setvar "CMDECHO" 0)
      (foreach pl pLlst
        (setq vLst   (mapcar 'cdr
                             (vl-remove-if-not
                               '(lambda (x) (= 10 (car x)))
                               (entget pl)
                             )
                     )
              oldOsn (getvar "OSMODE")
        )                                ; end setq
        (while (< 1 (length vLst))
          (setq        cAng (angle (car vLst) (cadr vLst))
                cDis (/ (distance (car vLst) (cadr vLst)) 2)
                cPt  (polar (polar (car vLst) cAng cDis)
                            (+ cAng (/ pi 2))
                            (* 2 (getvar "DIMTXT"))
                     )
          )                                ; end setq
          (command "_.dimaligned" (car vLst) (cadr vLst) cPt)
          (setq vLst (cdr vLst))
        )                                ; end while
      )                                        ; end foreach
      (setvar "OSMODE" oldOsn)
      (setvar "CMDECHO" 1)
    )                                        ; end progn
  )                                        ; end if
  (princ)
)                                        ; end of c:pdim








这里的'(lambda (x) (= 10 (car x)))是什么意思
还有foreach函数是怎么用的

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

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-12-25 21:59:07 | 显示全部楼层
  1. (vl-remove-if-not '(lambda (x)
  2.                      (= 10 (car x))
  3.                    ) (entget pl)
  4. )



这是完整的一个括号,
1、(entget pl) 是个数据表,把表中的 每个元素(子表)做lambda的参数,就是 x 是数据表中的每个元素,
2、判断 子表 的CAR 是否是10,如果不是,删除vl-remove-if-not

结果就是只保留祖玛是10的子表。

下面代码,你自己输入执行,选择LWPOLYLINE,

  1. (vl-remove-if-not '(lambda (x)
  2.                      (= 10 (car x))
  3.                    ) (entget (car entsel))
  4. )



看看结果是什么。


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

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 22:35 , Processed in 0.311957 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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