乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 13|回复: 13

[编程交流] Lisp沿z a移动对象

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:09:01 | 显示全部楼层 |阅读模式
嘿,伙计们!
我需要一个列表,使选定对象沿z轴移动,从基点开始以增量间隔。
每条线的距离为500。
这意味着与基点最近的直线将移动500,下一条将移动1000(2x500),下一条将移动1500(3x500)。
对不起我的英语
170908kigw3rkz9um77im5.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:17:34 | 显示全部楼层
你好
 
试试这个未经测试的程序,告诉我你是怎么做的。
 
  1. (defun c:Test ( / int inc run org sel ent lst)
  2. ;;------------------------------------;;
  3. ;;        Tharwat - Date: 31.Jul.2017        ;;
  4. ;; Move selected objects on Z axis        ;;
  5. ;; with intervals of 500 units.        ;;
  6. ;;------------------------------------;;
  7. (if (setq int -1 inc 500. run 0. org '(0. 0. 0.) sel (ssget "_:L" '((0 . "~VIEWPORT"))))
  8.    (progn
  9.      (while (setq ent (ssname sel (setq int (1+ int))))
  10.        (setq lst (cons (list (distance org (vlax-curve-getclosestpointto ent org)) ent) lst))
  11.        )
  12.      (foreach obj (vl-sort lst '(lambda (j k) (< (car j) (car k))))
  13.        (vlax-invoke (vlax-ename->vla-object (cadr obj)) 'move org (list 0. 0. (setq run (+ inc run))))
  14.        )
  15.      )
  16.    )
  17. (princ)
  18. ) (vl-load-com)
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:22:53 | 显示全部楼层
Tharwat,谢谢你的帮助。
只有一个小问题:我们怎么能有一个序列沿着y轴移动平面x0z上的帧,从z轴开始以增量间隔。
我们可以用一条平行于0x的线切割帧吗?从切割点到切割点的距离(从小到大)将按顺序移动
框架。图纸
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:27:03 | 显示全部楼层
以及如何沿z轴移动x0y平面上的帧,以及如何沿x轴移动y0z平面上的帧。
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:29:23 | 显示全部楼层
不客气。
 
 
您可以使用以下代码中的轴在任意轴上移动对象。
  1. (list 0.[color="red"] ;; X Axis[/color]
  2.      0. [color="green"];; Y Axis[/color]
  3.     (setq run (+ inc run)) [color="blue"];; Z Axis[/color]
  4. )
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:34:47 | 显示全部楼层
对于红色多段线,可以移动。
对于蓝色多段线,移动不是按顺序进行的。
当我将所有颜色更改为红色时,这些多段线也不遵循顺序。
我们如何改变:o
170910m0d5n0v3db5bd5zs.jpg
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 16:40:10 | 显示全部楼层
在我之前的回复中,我用颜色强调的代码与该图形中相同颜色的对象无关,但它们是X、Y、Z坐标。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:42:36 | 显示全部楼层
嗨,塔尔瓦特。
红色和蓝色,我指的是多段线的颜色,而不是你突出显示的颜色。
只有要移动的序列,lisp首先移动红色多段线,然后移动蓝色多段线
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:47:16 | 显示全部楼层
问题并不像OP建议的那么简单。某些截面由两条多段线组成。因此,根据它们与单个点的距离对它们进行排序是行不通的。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:51:36 | 显示全部楼层
另一个问题:
蓝色多段线(实际上是颜色152)绘制在红色多段线的顶部。
在附图中,该问题已得到解决,并添加了一条洋红色线。
 
以该行作为输入,下面的代码给出了合理的结果。但是属于球根突的部分仍然需要手动移动。
 
  1. (defun KGA_Conv_Pickset_To_ObjectList (ss / i ret)
  2. (if ss
  3.    (repeat (setq i (sslength ss))
  4.      (setq ret (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) ret))
  5.    )
  6. )
  7. )
  8. (defun c:Test ( / cur enm inc obj ss sta)
  9. (setq inc 500.0)
  10. (setq cur 0.0)
  11. (setq enm (car (entsel "\nSelect magenta line: ")))
  12. (setq obj (vlax-ename->vla-object enm))
  13. (setq ss
  14.    (ssget
  15.      "_F"
  16.      (list
  17.        (trans (setq sta (vlax-get obj 'startpoint)) 0 1)
  18.        (trans (vlax-get obj 'endpoint) 0 1)
  19.      )
  20.      '((0 . "LWPOLYLINE") (-4 . "<OR") (62 . 1) (62 . 152) (-4 . "OR>"))
  21.    )
  22. )
  23. (foreach pl
  24.    (mapcar
  25.      'cadr
  26.      (vl-sort
  27.        (mapcar
  28.          '(lambda (pl) (list (distance sta (vlax-invoke obj 'intersectwith pl acextendnone)) pl))
  29.          (KGA_Conv_Pickset_To_ObjectList ss)
  30.        )
  31.        '(lambda (a b) (< (car a) (car b)))
  32.      )
  33.    )
  34.    (vlax-invoke pl 'move '(0.0 0.0 0.0) (list 0.0 (setq cur (+ cur inc)) 0.0))
  35. )
  36. (princ)
  37. )

框架2。图纸
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 20:00 , Processed in 0.947627 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表