乐筑天下

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

[编程交流] Z坐标,移动所有对象

[复制链接]

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-5 23:52:21 | 显示全部楼层 |阅读模式
大家好,
 
我又回来需要帮助了,我有一个“挑战”(问题!呵呵…)这包括获取在特定坐标Z(平面)上的每个对象,我需要将该平面的每个项目移动到Z=0,但是,我有200个计划,每个计划有6个对象,移动到Z=0,它将是一个在另一个之上,有必要将其在坐标X中移动一个特定的空间(需要填充一个项目)。
 
005221k7fff08r9894iii6.jpg
 
如果有人知道Lisp程序可以帮助我,我将不胜感激!。。。
 
提前感谢!
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-6 00:02:15 | 显示全部楼层
我发现了一些可以帮助我的东西,但有人知道如何让同一平面上的所有物体一起移动吗?完成代码就是这样的缺失!
 
提前谢谢!!!。。。
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-6 00:13:34 | 显示全部楼层
我找到的代码。。。所以在X位置移动不起作用。。。它工作得很好,但是,实体是重叠的!。。。在红色中,我用一种简单的方法移动物体。。。逐级。。。正在修改5000值。。。我可以按级别或用户填写的输入数字递增。
 
如果有人能帮我。。。提前感谢。。。
 
  1.     ; ZeroZ.lsp
  2.     ;
  3.     ; Change Z coordinate of all selected entities to 0 (OCS)
  4.     ;
  5.     ; Copyright (c) 2000 Michael Puckett All Rights Reserved
  6.     ;
  7.     ; ==================================================?=====
  8. (defun c:zeroz
  9.        (/   ; local functions (defuns)
  10. *error* *begin* *end* *zeroz* *children* ; local vars
  11. ss i ent ents)
  12.     ; local defun *error*
  13. (defun *error* (s)
  14.    (*end*)
  15.    (princ (strcat "Error: " s ".\n"))
  16.    (princ)
  17. )
  18.     ; local defun *begin*
  19. (defun *begin* ()
  20.    (setvar "cmdecho" 0)
  21.    (while (eq 8 (logand 8 (getvar "undoctl")))
  22.      (command ".undo" "_end")
  23.    )
  24.    (if (zerop (logand 2 (getvar "undoctl")))
  25.      (if (eq 1 (logand 1 (getvar "undoctl")))
  26. (command ".undo" "_begin")
  27.      )
  28.    )
  29. )
  30.     ; local defun *end*
  31. (defun *end* ()
  32.    (if (eq 8 (logand 8 (getvar "undoctl")))
  33.      (command ".undo" "_end")
  34.    )
  35.    (setvar "cmdecho" 1)
  36. )
  37.     ; local defun *zeroz*
  38. (defun *zeroz* (ent)
  39.    (entmod
  40.      (mapcar
  41. '(lambda (x)
  42.    (cond
  43.      ((member (car x) '(10 11 12 13 14))
  44.       (cons (car x) (list (cadr x) (caddr x) 0.0))
  45.      )
  46.      ((eq 38 (car x)) '(38 . 0.0))
  47.      (t x)
  48.    )
  49. )
  50. (entget ent)
  51.      )
  52.    )
  53. )
  54.     ; local defun *children*
  55. (defun *children* (ent / d r)
  56.    (if (assoc 66 (entget ent))
  57.      (reverse
  58. (while
  59.   (/= "SEQEND"
  60.       (cdr (assoc 0 (setq d (entget (setq ent (entnext ent))))))
  61.   )
  62.    (setq r (cons (cdr (assoc -1 d)) r))
  63. )
  64.      )
  65.    )
  66. )
  67.     ; main
  68. (cond
  69.    ((setq i  -1
  70.    ss (ssget)
  71.     )
  72. [color=red](command "_move" ss "" '(0.0 0.0 0.0) (cons 5000 '(0.0 0.0))) ; TEST[/color]     
  73.     (*begin*)
  74.     (princ "\nZeroing Z's for entity(s) ...")
  75.     (repeat (sslength ss)
  76.       (*zeroz* (setq ent (ssname ss (setq i (1+ i)))))
  77.       (foreach x (setq ents (*children* ent)) (*zeroz* x))
  78.       (if ents
  79. (entupd ent)
  80.       )
  81.     ; in case a bazillion entities were selected
  82.     ; let the user know we have not died
  83.       (if (zerop (rem i 100))
  84. (princ ".")
  85.       )
  86.     )
  87.     (princ " [Done]")
  88.     (*end*)
  89.    )
  90.    (t (princ "\nNothing selected."))
  91. )
  92.     ; terminate
  93. (princ)
  94. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:19:35 | 显示全部楼层
CafeJr,请备份您的DWG并尝试一下,看看它是否适合您的需要。。。
 
  1. (defun c:elevs2xrefs ( / *error* fildia dwgn dwgname ss i ent entlst path loop bb se dx ch gap p )
  2. (defun *error* ( msg )
  3.    (if fildia (setvar 'filedia fildia))
  4.    (if msg (prompt msg))
  5.    (princ)
  6. )
  7. (vl-load-com)
  8. (alert "\nAll enities in current MODEL space in DWG must be 2d and parallel to WCS - ENTER TO CONTINE else ESC to terminate")
  9. (setq fildia (getvar 'filedia))
  10. (setvar 'tilemode 1)
  11. (setq dwgn (getvar 'dwgname))
  12. (setq dwgname (substr dwgn 1 (- (strlen dwgn) 4)))
  13. (setq ss (ssget "_X" '((410 . "Model"))))
  14. (setq i -1)
  15. (while (setq ent (ssname ss (setq i (1+ i))))
  16.    (setq entlst (cons ent entlst))
  17. )
  18. (if (not (vl-every '(lambda ( x ) (or (equal (assoc 210 x) '(210 0.0 0.0 1.0)) (equal (assoc 12 x) '(12 0.0 0.0 1.0)))) (mapcar 'entget entlst)))
  19.    (progn
  20.      (alert "\nNot all enities are parallel to WCS - quitting...")
  21.      (exit)
  22.    )
  23. )
  24. (if (not (vl-every '(lambda ( x ) (equal (caddr (car x)) (caddr (cadr x)) 1e-6)) (mapcar 'acet-ent-geomextents entlst)))
  25.    (progn
  26.      (alert "\nNot all enities are 2D - quitting...")
  27.      (exit)
  28.    )
  29. )
  30. (setvar 'filedia 0)
  31. (vla-save (vla-get-activedocument (vlax-get-acad-object)))
  32. (setq path (vl-catch-all-apply 'vl-filename-directory (list (getfiled "Select destination directory for dwg split export - pick one file in desired folder" "" "" 4))))
  33. (command "_.-layer" "on" "*" "t" "*" "u" "*" "")
  34. (command "_.ucs" "w")
  35. (command "_.ucs" "front")
  36. (command "_.plan" "")
  37. (command "_.zoom" "0.5xp")
  38. (setq loop t)
  39. (while loop
  40.    (setq bb (acet-geom-ss-extents-accurate ss))
  41.    (setq se (ssget "_F" (list (list (caar bb) (cadar bb)) (list (caadr bb) (cadar bb)))))
  42.    (command "_.ucs" "w")
  43.    (command "_.-wblock" (strcat path "\" dwgname "-" (rtos (cadar bb)) ".dwg") "" (list 0.0 0.0 (cadar bb)) se "")
  44.    (command "_.erase" se "")
  45.    (command "_.-xref" "A" (strcat path "\" dwgname "-" (rtos (cadar bb)) ".dwg") (list 0.0 0.0 (cadar bb)) "" "" "")
  46.    (command "_.ucs" "p")
  47.    (setq ss (acet-ss-remove se ss))
  48.    (if (equal (cadar bb) (cadadr bb) 1e- (setq loop nil))
  49. )
  50. (command "_.saveas" "" (strcat path "\" dwgname "-allelevs.dwg"))
  51. (command "_.ucs" "w")
  52. (command "_.plan" "")
  53. (command "_.zoom" "0.5xp")
  54. (setq ss (ssget "_X" '((410 . "Model"))))
  55. (setq bb (acet-geom-ss-extents-accurate ss))
  56. (setq dx (- (caadr bb) (caar bb)))
  57. (initget "Yes No")
  58. (setq ch (getkword "\nScatter created XREFS along X axis on elevation 0.0 [Yes/No] <Yes>: "))
  59. (if (or (eq ch "Yes") (eq ch nil))
  60.    (progn
  61.      (setq gap (abs (getdist "\nSpecify gap distance between 2 Xrefs along X axis: ")))
  62.      (setq i -1)
  63.      (while (setq ent (ssname ss (setq i (1+ i))))
  64.        (vla-move (vlax-ename->vla-object ent) (vlax-3d-point (setq p (cdr (assoc 10 (entget ent))))) (vlax-3d-point (list (car p) (cadr p) 0.0)))
  65.        (vla-move (vlax-ename->vla-object ent) (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point (list (* (float i) (+ dx gap)) 0.0 0.0)))
  66.      )
  67.      (command "_.saveas" "" (strcat path "\" dwgname "-allelevsscatter.dwg"))
  68.    )
  69. )
  70. (*error* nil)
  71. (princ)
  72. )
M.R。
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-6 00:27:03 | 显示全部楼层
 
哇。。。你做得最努力。。。在新图形中分离切片。。。是它,马科,正在工作!。。。再次感谢!。。。但是,有可能得到切片并将其放在同一个模型空间的Z=0?。。。按标高原点间距?。。。Z=10上的对象,转到X=0和Z=0,下一个级别Z=20转到X=5000和Z=0,下一个级别Z=30转到X=1000和Z=0。。。直到所有级别都完成?。。。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:31:14 | 显示全部楼层
我决定用所有sel的DX值来隔开它们。添加了间距的实体集。。。当要求分散时,您是否尝试过“是”选项?
 
顺便说一句,我对代码做了更多修改,以检查实体是否为2D,如果不是,则程序退出,如果实体与WCS不并行,也会退出。。。
 
M、 R。
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-6 00:39:42 | 显示全部楼层
好的,再次感谢Marko!。。。就是这样!。。。我看到你使用一个外部引用将它们并排放置,我在同一个模型空间中使用它来处理它,需要得到实体,分解,剪切,还有很多其他的事情要做。。。在这种情况下,我需要使用一个参照编辑,从外部参照中减去(参照集-从工作集中删除),所有这些都可以工作,可以用另一种方式吗?所以,即使这样,你也为我节省了很多编写代码和避免错误的时间!!!。。。我真的很感激你!!!。。。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:51:06 | 显示全部楼层
使用外部参照生成新文件后,只需执行XREF命令,选择所有外部参照并将其绑定。。。如果你想松散层信息,这是使它像在原版。DWG,绑定时,使用插入选项,然后在创建的块上分解。。。但如果要保留从外部参照获得的层前缀,例如(dwgname-0.00000000$0$Layer1),则应使用绑定选项,然后分解从外部参照创建的块。。。当然,在这两种情况下,0层都将保持为0,因此强烈建议创建新层并在其上放置实体(c:elevs2xrefs)。。。
 
M、 R。
回复

使用道具 举报

27

主题

182

帖子

163

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2022-7-6 00:55:56 | 显示全部楼层
 
大师Marko!。。。非常感谢。我在测试它,效果和我预期的一样好!!!。。。顺便提一下,是否可以在外部参照顶部插入一个文本,如“Z=位置”?我有一个疑问,插入一个空格来分散(例如=5000)它在8633.2363上间隔切片。看代码,我没有发现为什么会这样,我看到有一个“+dx间隙”可能是“dx”?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:32 , Processed in 0.413821 second(s), 73 queries .

© 2020-2025 乐筑天下

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