乐筑天下

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

[编程交流] 需要从x,y,z到x,y,c

[复制链接]

11

主题

48

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2022-7-6 15:11:51 | 显示全部楼层 |阅读模式
李为我开发了这个例程,效果很好,但我需要更新的属性来显示x,y坐标。该例程给出x、y、z坐标。有人能帮忙吗!
 
  1. (defun lcoord (/ lEnt bEnt vEnt sPt ePt aEnt aEntLst)
  2. (vl-load-com)
  3. (if (and (setq lEnt (car (entsel "\nSelect Line, Polyline, LWPolyline, Spline or Arc to fill out the PT1 and PT2 attributes of the
  4. Footage block > ")))
  5. (member (cdr (assoc 0 (entget lEnt))) '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE" "ARC"))
  6. (setq bEnt (car (entsel "\nSelect Destination Block > ")))
  7. (= (cdr (assoc 0 (entget bEnt))) "INSERT")
  8. (= (cdr (assoc 66 (entget bEnt))) 1))
  9. (progn
  10. (setq vEnt (vlax-ename->vla-object lEnt)
  11. sPt (vlax-curve-getStartPoint vEnt)
  12. ePt (vlax-curve-getEndPoint vEnt)
  13. aEnt (entnext bEnt))
  14. (while (/= "SEQEND" (cdr (assoc 0 (setq aEntLst (entget aEnt)))))
  15. (cond ((= "PT1" (cdr (assoc 2 aEntLst)))
  16. (setq aEntLst (subst (cons 1 (strcat (in2ft (car sPt)) (chr 32) ","
  17. (chr 32) (in2ft (cadr sPt)) (chr 32) ","
  18. (chr 32) (in2ft (caddr sPt))))
  19. (assoc 1 aEntLst) aEntLst))
  20. (entmod aEntLst))
  21. ((= "PT2" (cdr (assoc 2 aEntLst)))
  22. (setq aEntLst (subst (cons 1 (strcat (in2ft (car ePt)) (chr 32) ","
  23. (chr 32) (in2ft (cadr ePt)) (chr 32) ","
  24. (chr 32) (in2ft (caddr ePt))))
  25. (assoc 1 aEntLst) aEntLst))
  26. (entmod aEntLst)))
  27. (setq aEnt (entnext aEnt)))))
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 15:16:26 | 显示全部楼层
更改这两行:
 
(chr 32)(in2ft(cadr ePt))(chr 32“,”
(chr 32)(in2ft(caddr ePt)))
 

 
(chr 32)(in2ft(cadr ePt)))
回复

使用道具 举报

11

主题

48

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2022-7-6 15:20:19 | 显示全部楼层
工作得很有魅力!非常感谢你。
 
我还有一个问题。我有一个例行程序来移动一个块,然后通过在移动块后单击两次来更新坐标。除了一件事,它工作得很好。格式错误。
这是更新后的外观。。。7593.37,615.43,0.00
这就是更新后需要它的方式。。。。759'-3.37",61'-5.43",0.00
我还需要去掉z坐标(0.00)。
如果您能提供任何帮助,我将不胜感激。
 
  1. (defun c:moveupdate_coord (/ pBlk dBlk ptBlk aEnt aEntLst)
  2. (princ "\nMove Block into place ")
  3. (command "move" pause "" pause pause "")
  4. (if (and (setq pBlk (car (entsel "\nSelect Block to Retrieve Coordinates > ")))
  5. (setq dBlk (car (entsel "\nSelect Destination Block > ")))
  6. (= (cdr (assoc 0 (entget pBlk))) "INSERT" (cdr (assoc 0 (entget dBlk))))
  7. (= (cdr (assoc 66 (entget dBlk))) 1))
  8. (progn
  9. (setq ptBlk (cdr (assoc 10 (entget pBlk)))
  10. aEnt (entnext dBlk))
  11. (while (/= "SEQEND" (cdr (assoc 0 (setq aEntLst (entget aEnt)))))
  12. (if (= "COORD" (cdr (assoc 2 aEntLst)))
  13. (progn
  14. (setq aEntLst (subst (cons 1 (strcat (rtos (car ptBlk) 2 2) ","
  15. (rtos (cadr ptBlk) 2 2) ","
  16. (rtos (caddr ptBlk) 2 2)))
  17. (assoc 1 aEntLst) aEntLst))
  18. (entmod aEntLst)))
  19. (setq aEnt (entnext aEnt)))
  20. (command "_regenall")))
  21. (command "vbarun" "twcstartend")
  22. (princ))
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 15:27:39 | 显示全部楼层
好的,李一定要睡懒觉了,我会介入的
更改:
 
(setq aEntLst(subst(cons 1(strcat(rtos(car ptBlk)2 2)”,”
(rtos(cadr ptBlk)2 2“,”
(rtos(caddr ptBlk)2 2)
 

 
(setq aEntLst(subst(cons 1(strcat(rtos(car ptBlk)3 2)”,”
(rtos(cadr ptBlk)3 2)
 
“3”表示工程单位,“2”表示精度
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:30:29 | 显示全部楼层
不错,卡尔,
 
我看到在第一篇文章中,cabltv没有发布我编写的用于该代码的局部函数(即in2ft)。
 
我意识到回报是以英寸为单位的,但需要以英尺和英寸为单位。
 
如果
 
  1. (rtos [real] 3 2)
有效,这是一个很好的解决方法-但像往常一样,我必须找到解决我所有问题的困难方法
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:34:00 | 显示全部楼层
还有一件事-cabltv,在未来,您可以使用
 
  1. [/b][color=Red][i]"code goes here"[/i][/color] [b][/ code][/b]<p> </p><p>obviously without the spaces in the second set of brackets.</p>
回复

使用道具 举报

11

主题

48

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2022-7-6 15:37:37 | 显示全部楼层
卡尔:谢谢你的帮助!我感谢你花时间解决我的问题。
李:非常感谢你的原始代码。当我第一次请求你的帮助时,我没有意识到要求是英尺/英寸。以后我会听从你的建议。
回复

使用道具 举报

11

主题

48

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
54
发表于 2022-7-6 15:42:54 | 显示全部楼层
还有一个问题,然后我就不管你们了。
李为我创建了下面的代码,当然,它工作得很好!我需要解决一个问题,即“PT1”和“PT2”属性中的坐标在彗差之间有一个我不需要的空间。示例:xx’-xx”,xx’-xx”。
有没有一种简单的方法来消除昏迷之间的间隙?
 
 
  1. (defun lcoord (/ lEnt bEnt vEnt sPt ePt aEnt aEntLst)
  2. (command "pickbox" "8")
  3. (vl-load-com)
  4. (if (and (setq lEnt (car (entsel "\nSelect Line, Polyline, LWPolyline, Spline or Arc to fill out the PT1 and PT2 attributes of the
  5. Footage block > ")))
  6. (member (cdr (assoc 0 (entget lEnt))) '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE" "ARC"))
  7. (setq bEnt (car (entsel "\nSelect Destination Block > ")))
  8. (= (cdr (assoc 0 (entget bEnt))) "INSERT")
  9. (= (cdr (assoc 66 (entget bEnt))) 1))
  10. (progn
  11. (setq vEnt (vlax-ename->vla-object lEnt)
  12. sPt (vlax-curve-getStartPoint vEnt)
  13. ePt (vlax-curve-getEndPoint vEnt)
  14. aEnt (entnext bEnt))
  15. (while (/= "SEQEND" (cdr (assoc 0 (setq aEntLst (entget aEnt)))))
  16. (cond ((= "PT1" (cdr (assoc 2 aEntLst)))
  17. (setq aEntLst (subst (cons 1 (strcat (in2ft (car sPt)) (chr 32) ","
  18. ; (chr 32) (in2ft (cadr sPt)) (chr 32) ","
  19. ; (chr 32) (in2ft (caddr sPt))))
  20. (chr 32) (in2ft (cadr ePt))))
  21. (assoc 1 aEntLst) aEntLst))
  22. (entmod aEntLst))
  23. ((= "PT2" (cdr (assoc 2 aEntLst)))
  24. (setq aEntLst (subst (cons 1 (strcat (in2ft (car ePt)) (chr 32) ","
  25. ; (chr 32) (in2ft (cadr ePt)) (chr 32) ","
  26. ; (chr 32) (in2ft (caddr ePt))))
  27. (chr 32) (in2ft (cadr ePt))))
  28. (assoc 1 aEntLst) aEntLst))
  29. (entmod aEntLst)))
  30. (setq aEnt (entnext aEnt)))))
  31. (command "pickbox" "4")
  32. (command "vbarun" "twcstartend")
  33. (princ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:47:46 | 显示全部楼层
这将删除空格:
 
  1. (defun lcoord  (/ lEnt bEnt vEnt sPt ePt aEnt aEntLst)
  2. (command "pickbox" "8")
  3. (vl-load-com)
  4. (if (and (setq lEnt
  5.          (car
  6.            (entsel
  7.              "\nSelect Line, Polyline, LWPolyline, Spline or Arc to fill out the PT1 and PT2 attributes of the
  8. Footage block > "     )))
  9.       (member (cdr (assoc 0 (entget lEnt))) '("LINE" "POLYLINE" "LWPOLYLINE" "SPLINE" "ARC"))
  10.       (setq bEnt (car (entsel "\nSelect Destination Block > ")))
  11.       (= (cdr (assoc 0 (entget bEnt))) "INSERT")
  12.       (= (cdr (assoc 66 (entget bEnt))) 1))
  13.    (progn
  14.      (setq vEnt (vlax-ename->vla-object lEnt)
  15.        sPt     (vlax-curve-getStartPoint vEnt)
  16.        ePt     (vlax-curve-getEndPoint vEnt)
  17.        aEnt (entnext bEnt))
  18.      (while (/= "SEQEND" (cdr (assoc 0 (setq aEntLst (entget aEnt)))))
  19.    (cond ((= "PT1" (cdr (assoc 2 aEntLst)))
  20.           (setq aEntLst (subst (cons 1
  21.                      (strcat (in2ft (car sPt))
  22. ; (chr 32)
  23.                          ","
  24. ; (chr 32) (in2ft (cadr sPt)) (chr 32) ","
  25. ; (chr 32) (in2ft (caddr sPt))))
  26. ; (chr 32)
  27.                          (in2ft (cadr ePt))))
  28.                    (assoc 1 aEntLst)
  29.                    aEntLst))
  30.           (entmod aEntLst))
  31.          ((= "PT2" (cdr (assoc 2 aEntLst)))
  32.           (setq aEntLst (subst (cons 1
  33.                      (strcat (in2ft (car ePt))
  34. ; (chr 32)
  35.                          ","
  36. ; (chr 32) (in2ft (cadr ePt)) (chr 32) ","
  37. ; (chr 32) (in2ft (caddr ePt))))
  38. ; (chr 32)
  39.                          (in2ft (cadr ePt))))
  40.                    (assoc 1 aEntLst)
  41.                    aEntLst))
  42.           (entmod aEntLst)))
  43.    (setq aEnt (entnext aEnt)))))
  44. (command "pickbox" "4")
  45. (command "vbarun" "twcstartend")
  46. (princ))

 
顺便问一下,你知道对于属性标记PT1,它被改变的方式意味着你得到起点的x坐标和端点的y坐标-这是你想要的吗?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:51:41 | 显示全部楼层
此外,请记住发布子功能以及主功能,以便能够进行测试
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 20:25 , Processed in 0.383663 second(s), 72 queries .

© 2020-2025 乐筑天下

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