乐筑天下

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

[编程交流] 块中的圆心

[复制链接]

8

主题

43

帖子

35

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 09:32:17 | 显示全部楼层 |阅读模式
hiii
又是我
我只是有另一个问题,我已经创建了一个数组的圆圈,然后我用插入得到4块(数组的圆圈)在我的绘图。。。现在我想得到每个块中每个圆的中心
  1. (setq y (entget (cdr( assoc -2 (tblsearch "block" "AC" )))))
  2.     (setq lis (length y))
  3. (setq m 0)
  4. (repeat lis
  5. (setq w (car (nth m y)))
  6.      (if (= w 10)
  7.      (progn
  8.        (setq center (cdr (nth m y)))
  9.        ))
  10.          (setq m (1+ m))
  11.          )

这个代码给出了参考圆的中心
我想要所有圆的中心
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:40:29 | 显示全部楼层
这就是你的意思吗?
 
  1. (defun c:test (/ ss)
  2. (if
  3.    (and
  4.      (entget (cdr (assoc -2 (tblsearch "block" "AC"))))
  5.      (setq ss (ssget '((0 . "CIRCLE"))))
  6.    )
  7.     ((lambda (i / sset e)
  8.        (while
  9.          (setq sset (ssname ss (setq i (1+ i))))
  10.           (setq e (entget sset))
  11.           (command "_.-insert" "AC" (cdr (assoc 10 e)) "" "" "")
  12.        )
  13.      )
  14.       -1
  15.     )
  16.     (princ)
  17. )
  18. (princ)
  19. )

 
塔瓦特
回复

使用道具 举报

8

主题

43

帖子

35

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 09:45:32 | 显示全部楼层
 
您的代码要求我选择对象,但我当前的图形是4个相同块的插入,并且我的块是一个圆阵列,因此我需要块中每个圆的中心点
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:51:42 | 显示全部楼层
你有一个由四个圆组成的块,你想得到每个圆的中心点?
回复

使用道具 举报

8

主题

43

帖子

35

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 09:58:27 | 显示全部楼层
是的,当我使用tblsearch和entget(assoc 10)时,我想要每个圆的中心点,它给我数组的参考圆的中心
绘画图纸
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:04:31 | 显示全部楼层
尝试以下操作:
 
  1. (defun c:test ( / e mv ) (vl-load-com)
  2. (if
  3.    (and
  4.      (setq e
  5.        (LM:Select "\nSelect Block: "
  6.          (function
  7.            (lambda ( x ) (eq "INSERT" (cdr (assoc 0 (entget x)))))
  8.          )
  9.          entsel
  10.        )
  11.      )
  12.      (setq mv (LM:Def->Ref (vlax-ename->vla-object e)))
  13.    )
  14.    (
  15.      (lambda ( ent )
  16.        (while (setq ent (entnext ent))
  17.          (if (eq "CIRCLE" (cdr (assoc 0 (entget ent))))
  18.            (entmakex
  19.              (list
  20.                (cons 0 "POINT")
  21.                (cons 10 (mapcar '+ (mxv (car mv) (cdr (assoc 10 (entget ent)))) (cadr mv)))
  22.                (assoc 210 (entget e))
  23.              )
  24.            )
  25.          )
  26.        )
  27.      )
  28.      (tblobjname "BLOCK" (cdr (assoc 2 (entget e))))
  29.    )
  30. )
  31. (princ)
  32. )            
  33. ;;---------------=={ Block Def -> Block Ref }==---------------;;
  34. ;;                                                            ;;
  35. ;;  Returns the Transformation Matrix and Translation Vector  ;;
  36. ;;  for transforming Block Definition Geometry to a Block     ;;
  37. ;;  Reference.                                                ;;
  38. ;;------------------------------------------------------------;;
  39. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  40. ;;------------------------------------------------------------;;
  41. ;;  Arguments:                                                ;;
  42. ;;  SourceBlock - VLA Block Reference Object                  ;;
  43. ;;------------------------------------------------------------;;
  44. ;;  Returns:  List of 3x3 Transformation Matrix, Vector       ;;
  45. ;;------------------------------------------------------------;;
  46. (defun LM:Def->Ref ( SourceBlock / norm ang x y z )
  47. (setq norm (vlax-get SourceBlock 'Normal)
  48.         ang (vla-get-rotation SourceBlock))
  49.      
  50. (mapcar
  51.    (function
  52.      (lambda ( sym prop alt )
  53.        (set sym
  54.          (vlax-get-property SourceBlock
  55.            (if (vlax-property-available-p SourceBlock prop) prop alt)
  56.          )
  57.        )
  58.      )
  59.    )
  60.   '(x                     y                     z                    )
  61.   '(XEffectiveScaleFactor YEffectiveScaleFactor ZEffectiveScaleFactor)
  62.   '(XScaleFactor          YScaleFactor          ZScaleFactor         )
  63. )
  64. (
  65.    (lambda ( m )
  66.      (list m
  67.        (mapcar '- (vlax-get SourceBlock 'InsertionPoint)
  68.          (mxv m
  69.            (cdr (assoc 10 (tblsearch "BLOCK" (vla-get-name SourceBlock))))
  70.          )
  71.        )
  72.      )
  73.    )
  74.    (mxm
  75.      (mapcar
  76.        (function
  77.          (lambda ( e ) (trans e 0 norm t))
  78.        )
  79.       '((1. 0. 0.) (0. 1. 0.) (0. 0. 1.))
  80.      )
  81.      (mxm
  82.        (list
  83.          (list (cos ang) (sin (- ang)) 0.)
  84.          (list (sin ang) (cos ang)     0.)
  85.          (list     0.        0.        1.)
  86.        )
  87.        (list
  88.          (list x 0. 0.)
  89.          (list 0. y 0.)
  90.          (list 0. 0. z)
  91.        )
  92.      )
  93.    )
  94. )
  95. )
  96. ;; Matrix Transpose - Doug Wilson
  97. ;; Args: m - nxn matrix
  98. (defun trp ( m )
  99. (apply 'mapcar (cons 'list m))
  100. )
  101. ;; Matrix x Matrix - Vladimir Nesterovsky
  102. ;; Args: m,n - nxn matrices
  103. (defun mxm ( m n )
  104. ( (lambda ( a ) (mapcar '(lambda ( r ) (mxv a r)) m)) (trp n))
  105. )
  106. ;; Matrix x Vector - Vladimir Nesterovsky
  107. ;; Args: m - nxn matrix, v - vector in R^n
  108. (defun mxv ( m v )
  109. (mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
  110. )
  111. ;;---------------------=={ Select if }==----------------------;;
  112. ;;                                                            ;;
  113. ;;  Continuous selection prompts until a predicate function   ;;
  114. ;;  is validated                                              ;;
  115. ;;------------------------------------------------------------;;
  116. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  117. ;;------------------------------------------------------------;;
  118. ;;  Arguments:                                                ;;
  119. ;;  msg  - prompt string                                      ;;
  120. ;;  pred - optional predicate function taking ename argument  ;;
  121. ;;  func - selection function to invoke                       ;;
  122. ;;------------------------------------------------------------;;
  123. ;;  Returns:  selected entity ename if successful, else nil   ;;
  124. ;;------------------------------------------------------------;;
  125. (defun LM:Select ( msg pred func / e ) (setq pred (eval pred))  
  126. (while
  127.    (progn (setvar 'ERRNO 0) (setq e (car (func msg)))
  128.      (cond
  129.        ( (= 7 (getvar 'ERRNO))
  130.          (princ "\n** Missed, Try again **")
  131.        )
  132.        ( (eq 'ENAME (type e))
  133.          (if (and pred (not (pred e)))
  134.            (princ "\n** Invalid Object Selected **")
  135.          )
  136.        )
  137.      )
  138.    )
  139. )
  140. e
  141. )
回复

使用道具 举报

8

主题

43

帖子

35

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 10:09:11 | 显示全部楼层
谢谢李,你的程序很完美,它显示了每个圆的中心,但还有一件事我可以得到每个圆的坐标列表吗??
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:18:43 | 显示全部楼层
 
是的,在创建点图元时,使用提供给entmake表达式的点创建列表。
回复

使用道具 举报

8

主题

43

帖子

35

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-6 10:24:43 | 显示全部楼层
好的,非常感谢李,我会尽力的
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:28:04 | 显示全部楼层
不客气-如果你卡住了,请告诉我
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 01:53 , Processed in 0.523609 second(s), 83 queries .

© 2020-2025 乐筑天下

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