明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4436|回复: 18

[已解答] 请问有没有块原地中心左右镜像的LSP啊?有原地旋转的就不知道怎么改.求教了

[复制链接]
发表于 2015-5-17 20:34 | 显示全部楼层 |阅读模式
2明经币
(defun c:cexx(/ x k s n m en r);;;各自中心旋转
  (vl-load-com)
  (setq x(getangle"\n输入需要旋转的角度<归0>:"))
  (if(null x)(setq x 0 k nil) (setq k t))
  (setq s(ssget'((0 . "INSERT"))))
  (if s
    (progn
      (setq n(sslength s)m 0)
      (while(< m n)
        (setq en(ssname s m)
              m(1+ m))
        (if k(setq r (+ (cdr(assoc 50 (entget en))) x))(setq r x))
        (vla-put-MIRROR (vlax-ename->vla-object en) r)
        )))
  (princ)
  )



(defun C:test()
    (COMMAND "mirror"
      (setq ss (ssget ":E:S"))
      ""
      (mapcar '(lambda (x) (/ x 2)) (apply 'mapcar (cons '+ (acet-ent-geomextents (ssname ss 0)))))
       "90"
    )
)

最佳答案

查看完整内容

(defun c:cemi (/ sc a b);;;;各自中心镜像--- (while (ssget) (vlax-for obj (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))) (if (not (VL-CATCH-ALL-ERROR-P (VL-CATCH-ALL-APPLY 'vla-GetBoundingBox (list obj 'a 'b)))) (progn (setq bp(m ...
发表于 2015-5-17 20:34 | 显示全部楼层
(defun c:cemi  (/ sc a b);;;;各自中心镜像---
  (while (ssget)
    (vlax-for        obj
                (vla-get-ActiveSelectionSet
                  (vla-get-ActiveDocument (vlax-get-acad-object)))
        (if (not (VL-CATCH-ALL-ERROR-P
                   (VL-CATCH-ALL-APPLY
                     'vla-GetBoundingBox
                     (list obj 'a 'b))))
          (progn
            (setq bp(mapcar '*  '(0.5 0.5 0.5)(apply 'mapcar (cons '+ (mapcar 'vlax-safearray->list(list a b))))))
            (setq ep(list (car bp) (1+ (cadr bp)) (caddr bp)))
            (vla-transformby obj (vlax-tmatrix (mirror2dmat bp ep)))
            )
          )
        )
    )
  (princ)
  )

(defun mirror2dmat(sp ep / i a0 a1 a2 a3 t1 sp a b)
  (setq i '((-1 0 0) (0 -1 0)(0 0 1)))
  (setq a0(mapcar '- ep sp))
  (setq a1(distance a0 (list 0 0 0)))
  (setq a2(/ 1 a1))
  (setq a3(mapcar '(lambda(y)(* y a2)) a0)
        t1(mapcar '(lambda(x)(mapcar '(lambda(y)(* x y)) a3)) a3)
        t1(mapcar '(lambda(x)(mapcar '(lambda(y)(* 2 y)) x))t1)
        t1(mapcar '(lambda(x y)(mapcar '+ x y)) t1 i))
  (setq sp(mapcar '- sp (mapcar '(lambda(x)(apply '+ (mapcar '* x sp))) t1)))
  (setq a (car t1)
        b (cadr t1))
  (list
    (list (car a)(cadr a)(caddr a) (car sp))
    (list (car b)(cadr b)(caddr b) (cadr sp))
    '(0 0 1 0)
    '(0 0 0 1))
)
回复

使用道具 举报

 楼主| 发表于 2015-5-17 20:42 | 显示全部楼层
(defun c:cesc  (/ sc a b);;;;各自中心缩放
  (if (null oldscale) (setq oldscale 2.0))
  (initget 6)
  (setq sc (getreal (strcat "\n缩放倍数<" (rtos oldscale 2 2)">:")))
  (if (null sc) (setq sc oldscale) (setq oldscale sc))
  (while (ssget)
    (vlax-for        obj
                (vla-get-ActiveSelectionSet
                  (vla-get-ActiveDocument (vlax-get-acad-object)))
        (if (not (VL-CATCH-ALL-ERROR-P
                   (VL-CATCH-ALL-APPLY
                     'vla-GetBoundingBox
                     (list obj 'a 'b))))
          (progn
            (vla-ScaleEntity
              obj
              (vlax-3d-point
                (mapcar
                  '*
                  '(0.5 0.5 0.5)
                  (apply 'mapcar
                         (cons '+
                               (mapcar 'vlax-safearray->list
                                       (list a b))))))
              sc
              )
            )
          )
        )
    )
  (princ)
  )
回复

使用道具 举报

发表于 2015-5-17 22:08 | 显示全部楼层
(defun C:tt();中心镜像
    (COMMAND "mirror"
      (setq ss (ssget ":E:S"))
      ""
      (setq p1 (mapcar '(lambda (x) (/ x 2)) (apply 'mapcar (cons '+ (acet-ent-geomextents (ssname ss 0))))))
      (setq p2 (polar p1 (* pi 0.5) 2)) "Y"
    )
)
回复

使用道具 举报

 楼主| 发表于 2015-5-18 09:27 | 显示全部楼层
本帖最后由 hooboxu 于 2015-5-18 09:30 编辑

@KWOK 还不行。我要想多个块左右镜像了位置还在原位。你的和原来的镜像一样的,不过还是谢谢你
回复

使用道具 举报

发表于 2015-5-18 09:34 | 显示全部楼层
镜像块文字会反
回复

使用道具 举报

 楼主| 发表于 2015-5-18 12:29 来自手机 | 显示全部楼层
嗯,所以我要把它原地再反过来
回复

使用道具 举报

发表于 2015-5-18 15:24 | 显示全部楼层
本帖最后由 danxingpen 于 2015-5-18 15:37 编辑
danxingpen 发表于 2015-5-18 15:20
(defun c:cemi  (/ sc a b);;;;各自中心镜像---
  (while (ssget)
    (vlax-for        obj

说明一下:这个是绕中心左右镜像的,如果要绕中心上下镜像则把
(setq ep(list (car bp) (1+ (cadr bp)) (caddr bp)))
改为
(setq ep(list (1+ (car bp))  (cadr bp) (caddr bp)))

评分

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

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-5-18 22:53 | 显示全部楼层
@danxingpen 谢谢谢谢,.太感谢了.就是这个效果.
回复

使用道具 举报

发表于 2018-4-24 16:26 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:17 , Processed in 0.217454 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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