Randolph 发表于 2022-7-5 22:31:50

沿u轴移动对象

你好
 
我在线程移动对象以匹配另一个点的x(y,z)-坐标时已经遇到了这个问题。Alan在这方面帮了我很多忙,但不知怎么的,它不起作用(准确地说,它只起作用一次,并且只有当第一个值为0时才起作用)。
 
我要寻找的是执行以下示例的例程:
 
我在楼层平面图的正确x、y位置上有一个柱,但位于沿z轴的某个高度。现在我想把它扔到一个阳台上,我也记不清它的z高度。
 
我现在想做的是输入“tzp”(沿z轴平移到点),单击柱底部的任何点,单击阳台楼层上的任何点,柱将下降到正确的高度。
 
我现在要做的是
1) 要测量距离,请复制z值,输入“tz”(用于在z方向上平移),粘贴该值,然后输入或
2) 使用点过滤器。输入“t”作为“平移”,选择基点,单击“xy”,再次选择基点,单击“z”,选择目标点。
 
这两种方式都有点令人厌倦。。。有人想让我开心吗?当然,这将是伟大的,如果这沿所有轴工作,但我'适合'足够的副本和更改轴参数自己。。。
 
找到附件我现在的工作和thanx!

Freerefill 发表于 2022-7-5 22:39:44

有点像黑客,但它确实起到了作用。我很确定这就是你想要的:
 

(defun c:tzp( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car a) (cadr a) (caddr b)))
(vl-cmdf "move" s "" a c)
)

 
顺便说一句,这是一个地狱般的画。很不错的!

Tharwat 发表于 2022-7-5 22:46:35

你好
该代码将使Z坐标向上向下。
这就是他在报纸上想要的吗。
 
塔瓦特

Randolph 发表于 2022-7-5 22:55:47

Thanx它worx!
 
但是,关于我吹嘘自己足够适合复制和更改坐标,我必须说,我恐怕不得不放弃。
 
看起来诡计就在车里的某个地方,cadr和caddr。。。汽车a和cadr a必须是第一点的x和y。。。ah-从a移到c,其中c是a,第三个值替换为b的第三个值。。。地狱对于Y轴,我必须写下:
 

c (list (car a) (cadr b) (caddr a)))

正当代码惊人地短!
 
我知道也有可能使用mapcar命令在1个代码中获得所有3个轴(txp、typ、tzp)的命令。。。
 
无论如何,这里有一个“复制”版本dzp!
 

(defun c:dzp( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car a) (cadr a) (caddr b)))
(vl-cmdf "copy" s "" a c)
)

 
这并不是说我为我的编程感到自豪:wink:,但当在建筑中处理楼层时,这是非常实用的,您的楼层高度是32752米!

Freerefill 发表于 2022-7-5 22:57:24

如果成功了,你就可以有点自豪感,不管它有多“漂亮”。
 
对于你来说,真正研究和调整代码是件好事。你也可以为自己付出了额外的努力而感到骄傲。

Randolph 发表于 2022-7-5 23:03:04

嗨,塔瓦,
 
抱歉,作为一个非母语人士,我不明白你的意思。。。什么报纸?并且没有任何轴的转动需要监控。。。

Randolph 发表于 2022-7-5 23:13:07

结果是——正如我所说,我知道使用mapcar可以更优雅地完成这项工作,但我不知道如何做到。
 

(defun c:TXP ( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car b) (cadr a) (caddr a)))
(vl-cmdf "move" s "" a c)
)
(defun c:TYP ( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car a) (cadr b) (caddr a)))
(vl-cmdf "move" s "" a c)
)
(defun c:TZP ( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car a) (cadr a) (caddr b)))
(vl-cmdf "move" s "" a c)
)


 
以下是“复制”版本:
 

(defun c:DXP ( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car b) (cadr a) (caddr a)))
(vl-cmdf "copy" s "" a c)
)

(defun c:DYP ( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car a) (cadr b) (caddr a)))
(vl-cmdf "copy" s "" a c)
)

(defun c:DZP ( / a b c s)
(princ "Select objects: ")
(setq s (ssget)
   a (getpoint "\nSelect item base point: ")
   b (getpoint "\nSelect target point: ")
   c (list (car a) (cadr a) (caddr b)))
(vl-cmdf "copy" s "" a c)
)


 
我希望这对其他人有用——对我来说绝对有用。非常高兴,为你的黑客加油!

alanjt 发表于 2022-7-5 23:15:55

使用点过滤器怎么样?
 
如。
(defun c:XYZ (/ axis ss pt)
;; Alan J. Thompson, 06.15.10
(initget 0 "X Y Z")
(if (and (setq axis (getkword "\nAxis filter : "))
          (not (initget 0 "Copy Move"))
          (setq *XYZ:Mode*
               (cond ((getkword (strcat "\nSpecify mode <"
                                          (cond (*XYZ:Mode*)
                                                ((setq *XYZ:Mode* "Copy"))
                                          )
                                          ">: "
                                  )
                        )
                     )
                     (*XYZ:Mode*)
               )
          )
          (setq ss (ssget "_:L"))
          (setq pt (getpoint "\nSpecify base point: "))
   )
   (command (strcat "_." *XYZ:Mode*) ss "" "_non" pt (strcat "." axis) "_non" pt)
)
(princ)
)

Randolph 发表于 2022-7-5 23:25:42

嗨,艾伦,
 
再来一次!Thanxalot,但就我个人而言,我宁愿命令不需要工作流选项。这就是我命名命令的原因(例如,移动命令总是以t开头)。此外,我发现仅替换坐标值的Freerefills版本非常优雅。
 
无论如何,我不想打扰你超过必要的-我将需要你的帮助很快!

alanjt 发表于 2022-7-5 23:27:59

我只是用选项(X/Y/Z和复制/移动)展示了我的示例。我最喜欢它的地方是,当你选择第二个点时,它会显示物体。最重要的是,我想展示点过滤器。其他选项可以轻松删除,因为这只是一个有许多选项的示例。
页: [1] 2
查看完整版本: 沿u轴移动对象