明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6476|回复: 16

[讨论] 插入块

[复制链接]
发表于 2013-6-8 18:23:09 | 显示全部楼层 |阅读模式
本帖最后由 OWEN7 于 2013-6-9 10:35 编辑

  • (defun c:T1 (/ blk-name)
  •   (while (NOT (setq blk-name
  •                      (ssget ":s:e" '((0 . "insert")))
  •               )
  •          )
  •   )
  •   (setq blk-name (cdr (assoc 2 (entget (ssname blk-name 0)))))
  •   (mapcar
  •     '(lambda (x)
  •        (command "insert" blk-name "none" x "1" "1" "0")
  •      )
  •     (mapcar '(lambda (x) (trans (cdr (assoc 10 (entget x))) 0 1))
  •             (cdr (reverse
  •                    (mapcar 'cadr (ssnamex (ssget '((0 . "CIRCLE")))))
  •                  )
  •             )
  •     )
  •   )
  •   (princ)
  • )

点评

觉得MCCAD是个很负责人的社会有责任感的人士  发表于 2013-6-9 08:37
你这种做法是很不负责任。你提出问题,大家在下面回答讨论,然后最后答案完成了。本身这个过程可以做为以后其它人碰到同类问题时搜索找到方法。你把帖子给改成这样,这个帖子的意义都没有,这是很不好的做,请改回来  发表于 2013-6-9 08:12
发表于 2019-12-4 22:20:21 | 显示全部楼层
wowan1314 发表于 2013-6-9 09:58
楼主,发帖后如无必要,不要去改帖子。 这样方便后来人从你的问题中找到各自的答案。

我还帮你精简了下 ...

(cdr (reverse
       (mapcar 'cadr (ssnamex (ssget '((0 . "CIRCLE")))))
     )
)
上面这句 可不可以这样:
(vl-remove-if
    '(lambda (x) (listp x))
    (mapcar 'cadr (ssnamex (ssget '((0 . "CIRCLE")))))
  )
我也不知道,才学
发表于 2018-9-30 03:10:33 | 显示全部楼层
能否把圆心改为形心,矩形的形心
发表于 2013-6-8 19:05:27 | 显示全部楼层
圆心很简单的,直接遍历组码40对应的坐标,插入块就行
发表于 2013-6-8 19:47:24 | 显示全部楼层
上面程序最主要的就是求PT_LST。。

最后的mapcar意思是按pt_lst这个点表来插入块。

所以你把pt_lst换成圆的插入点的表就可以了。
 楼主| 发表于 2013-6-8 20:19:32 | 显示全部楼层
;;框选交点布块 Written by carrot1983 2009-02-01
(defun C:TT2 (/              BLOCK_NAME        E         ELIST          ENAMES
             E_LINE   I               PT        PT_INTERS          PT_LIST
             SS              V10      V11        V5
            )
  (setvar "CMDECHO" 0)
  (if (and (setq E_LINE (car (entsel "\n单选轴线角度执行UCS命令: ")))
           (= (cdr (assoc 0 (entget E_LINE))) "LINE")
      )
    (command "_.UCS" "NEW" "OBJECT" E_LINE)
  )
  (if (and (setq E (car (entsel "\n单选块: ")))
           (setq ELIST (entget E))
           (= (cdr (assoc 0 ELIST)) "INSERT")
           (setq BLOCK_NAME (cdr (assoc 2 ELIST))) ;_块名
           (princ (strcat "块名为 " BLOCK_NAME))
           (princ "\n选择形心")
           (setq SS (ssget '((0 . "circle"))))
      )
    (progn

      (repeat (setq I (sslength SS))
        (setq ENAMES (cons (ssname SS (setq I (1- I))) ENAMES))
      )

      (foreach E1 ENAMES
        (setq ELIST (entget E1))
        (setq cen_list(cdr(assoc 10 ELIST)))
         )

      (mapcar '(lambda (PT)
                 (command ".-INSERT"
                          BLOCK_NAME
                          "NONE"
                          (trans PT 0 1)
                          "1"
                          "1"
                          "0"
                 )
               )
             cen_list
      )

    )
  )
  (command "_.UCS" "WORLD")
  (setvar "CMDECHO" 1)
  (princ)
)



结果不行,为什么。
发表于 2013-6-8 20:26:06 | 显示全部楼层
(setq cen_list(cdr(assoc 10 ELIST)))==>
(setq cen_list (cons (cdr(assoc 10 ELIST)) cen_list))
 楼主| 发表于 2013-6-8 20:29:54 | 显示全部楼层
(setq cen_list (cons (cdr(assoc 10 ELIST)) cen_list)) 搞定, 编程真痛苦,稍微忽略一点点,被告失败。谢谢wowan高手。
 楼主| 发表于 2013-6-8 21:28:16 | 显示全部楼层
为什么布置了3个块,  检查不出问题。。。
发表于 2013-6-8 23:43:05 来自手机 | 显示全部楼层
手机路过,什么也看不到,只能看回复
发表于 2013-6-9 09:03:13 | 显示全部楼层
许久不回帖了,看到楼主这个贴忍不住回一下。
什么叫“搞好了,封贴 ”?
如果是这样的话,论坛大部分贴子都该被封了,因为问题都得到了解决,
不论是自己给的还是别人给的答案。
那还不如请坛主设置一个解决后自动删除的功能,但这还叫论坛吗?
不成了私密会所了吗?
发表于 2013-6-9 09:15:29 | 显示全部楼层
这种做法确实很不妥,别人提问后,最终在大家帮助、努力下会贴出完整代码,这才是论坛!
而现在连主题都改了,以后人家还怎么帮你?还请楼主改回来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 12:58 , Processed in 0.219220 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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