dnovember99 发表于 2022-7-5 15:39:40

快速镜像帮助

所以我在浏览李的网站时发现了他的
http://www.lee-mac.com/quickmirror.htmllisp。
 
不确定这是不是可以做的(并不是说李的作品不好),但不是通过选择对象,选择一个点,拖动鼠标,单击,然后键入“是”删除旧的或“否”保留旧的方式来进行镜像。李是一个非常快的例行做这样的事情。但是,为了镜像所述对象,您必须选择一条线。我想知道是否有人有什么东西可以让你做以下事情:
 
选择对象(直线、多段线、块等)类型命令,将鼠标向左或向右拖动并单击。也就是说,这只能在水平平面上镜像,并且对象选择点。如下所示
 
明白了。(希望这有意义)
 
 
不确定这是不是有什么,但我还没有找到任何东西。
 
谢谢大家

aawilds 发表于 2022-7-5 15:45:17

我想这可能接近你想要的。我刚刚修改了一个我在学习写lisp时做的旧版本。
(defun C:testmirror ( / obj objinfo objpt pt dist ang midpt midend)
(setq obj (entsel "\nSelect Object to Mirror: "))
(setq objinfo (entget (car obj)))
(setq objpt (cdr (assoc 10 objinfo)))
(setq pt (getpoint "\nSelect point to left or right"))
(setq dist (distance objpt pt))
(setq ang (angle objpt pt))
(setq midpt (polar objpt ang (/ dist 2)))
(setq midend (list (car midpt) (- (cadr midpt) 10)))
(command "mirror" obj "" midpt midend "N" )
(princ)
)

dnovember99 发表于 2022-7-5 15:48:59

 
这正是我要找的。我想看看有没有什么小变化?
 
我不确定如何添加才能选择多个对象?像文本和引线一样,一个有引线的块?

aawilds 发表于 2022-7-5 15:54:43

这应该是可行的,但我们现在正在为一个大项目做准备。我只是碰巧大部分时间都做了。也许其他人可以捡到,对不起。

dnovember99 发表于 2022-7-5 15:58:29

 
嘿,别担心,这对我来说仍然是一个很大的帮助,所以谢谢你

Tharwat 发表于 2022-7-5 16:01:50

你好
像这样的?

(defun c:mymirror (/ sel pt1 pt2 int ent)
(princ "\nSelect objects to mirror :")
(and (setq sel (ssget "_:L"))
      (setq pt1 (getpoint "\nSpecify 1st point :"))
      (setq int -1 pt2 (getpoint "\nSpecify 2nd point :" pt1))
      (while (setq ent (ssname sel (setq int (1+ int))))
      (vlax-invoke (vlax-ename->vla-object ent) 'mirror pt1 pt2)
      (entdel ent)
      )
)
(princ)
) (vl-load-com)

dnovember99 发表于 2022-7-5 16:05:58

 
 
这与我见过的另一个非常相似。但是第一个代码
 
(defun C:testmirror ( / obj objinfo objpt pt dist ang midpt midend)
(setq obj (entsel "\nSelect Object to Mirror: "))
(setq objinfo (entget (car obj)))
(setq objpt (cdr (assoc 10 objinfo)))
(setq pt (getpoint "\nSelect point to left or right"))
(setq dist (distance objpt pt))
(setq ang (angle objpt pt))
(setq midpt (polar objpt ang (/ dist 2)))
(setq midend (list (car midpt) (- (cadr midpt) 10)))
(command "mirror" obj "" midpt midend "N" )
(princ)
)
 
这允许您进行选择(但只能选择一个实体),然后从左侧或右侧拾取一个点。
 
我想知道您拥有的允许您选择多模块对象的代码部分是否可以添加到另一部分?

Tharwat 发表于 2022-7-5 16:10:02

如果模式字符串不包括“:S”,则ssget函数允许您选择一个或多个对象。

dnovember99 发表于 2022-7-5 16:13:42

 
 
我将(ssget)放在这个代码中的什么位置?
 
(defun C:testmirror ( / obj objinfo objpt pt dist ang midpt midend)
(setq obj (entsel "\nSelect Object to Mirror: "))
(setq objinfo (entget (car obj)))
(setq objpt (cdr (assoc 10 objinfo)))
(setq pt (getpoint "\nSelect point to left or right"))
(setq dist (distance objpt pt))
(setq ang (angle objpt pt))
(setq midpt (polar objpt ang (/ dist 2)))
(setq midend (list (car midpt) (- (cadr midpt) 10)))
(command "mirror" obj "" midpt midend "N" )
(princ)
)

BKT 发表于 2022-7-5 16:19:13

 
在这段代码中尝试替换SSGET的问题是,ENTSEL在所选对象上为您提供了一个点(objpt)。如果要使用上述代码,则需要提供一个相对于所有选定对象的点。
页: [1] 2
查看完整版本: 快速镜像帮助