yajis_narif 发表于 2022-7-6 09:32:17

块中的圆心

hiii
又是我
我只是有另一个问题,我已经创建了一个数组的圆圈,然后我用插入得到4块(数组的圆圈)在我的绘图。。。现在我想得到每个块中每个圆的中心

(setq y (entget (cdr( assoc -2 (tblsearch "block" "AC" )))))
    (setq lis (length y))
(setq m 0)
(repeat lis
(setq w (car (nth m y)))
   (if (= w 10)
   (progn
       (setq center (cdr (nth m y)))
       ))
         (setq m (1+ m))
         )
这个代码给出了参考圆的中心
我想要所有圆的中心

Tharwat 发表于 2022-7-6 09:40:29

这就是你的意思吗?
 
(defun c:test (/ ss)
(if
   (and
   (entget (cdr (assoc -2 (tblsearch "block" "AC"))))
   (setq ss (ssget '((0 . "CIRCLE"))))
   )
    ((lambda (i / sset e)
       (while
         (setq sset (ssname ss (setq i (1+ i))))
          (setq e (entget sset))
          (command "_.-insert" "AC" (cdr (assoc 10 e)) "" "" "")
       )
   )
      -1
    )
    (princ)
)
(princ)
)

 
塔瓦特

yajis_narif 发表于 2022-7-6 09:45:32

 
您的代码要求我选择对象,但我当前的图形是4个相同块的插入,并且我的块是一个圆阵列,因此我需要块中每个圆的中心点

Tharwat 发表于 2022-7-6 09:51:42

你有一个由四个圆组成的块,你想得到每个圆的中心点?

yajis_narif 发表于 2022-7-6 09:58:27

是的,当我使用tblsearch和entget(assoc 10)时,我想要每个圆的中心点,它给我数组的参考圆的中心
绘画图纸

Lee Mac 发表于 2022-7-6 10:04:31

尝试以下操作:
 

(defun c:test ( / e mv ) (vl-load-com)
(if
   (and
   (setq e
       (LM:Select "\nSelect Block: "
         (function
         (lambda ( x ) (eq "INSERT" (cdr (assoc 0 (entget x)))))
         )
         entsel
       )
   )
   (setq mv (LM:Def->Ref (vlax-ename->vla-object e)))
   )
   (
   (lambda ( ent )
       (while (setq ent (entnext ent))
         (if (eq "CIRCLE" (cdr (assoc 0 (entget ent))))
         (entmakex
             (list
               (cons 0 "POINT")
               (cons 10 (mapcar '+ (mxv (car mv) (cdr (assoc 10 (entget ent)))) (cadr mv)))
               (assoc 210 (entget e))
             )
         )
         )
       )
   )
   (tblobjname "BLOCK" (cdr (assoc 2 (entget e))))
   )
)
(princ)
)            

;;---------------=={ Block Def -> Block Ref }==---------------;;
;;                                                            ;;
;;Returns the Transformation Matrix and Translation Vector;;
;;for transforming Block Definition Geometry to a Block   ;;
;;Reference.                                                ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;SourceBlock - VLA Block Reference Object                  ;;
;;------------------------------------------------------------;;
;;Returns:List of 3x3 Transformation Matrix, Vector       ;;
;;------------------------------------------------------------;;

(defun LM:Def->Ref ( SourceBlock / norm ang x y z )

(setq norm (vlax-get SourceBlock 'Normal)
      ang (vla-get-rotation SourceBlock))
   
(mapcar
   (function
   (lambda ( sym prop alt )
       (set sym
         (vlax-get-property SourceBlock
         (if (vlax-property-available-p SourceBlock prop) prop alt)
         )
       )
   )
   )
'(x                     y                     z                  )
'(XEffectiveScaleFactor YEffectiveScaleFactor ZEffectiveScaleFactor)
'(XScaleFactor          YScaleFactor          ZScaleFactor         )
)
(
   (lambda ( m )
   (list m
       (mapcar '- (vlax-get SourceBlock 'InsertionPoint)
         (mxv m
         (cdr (assoc 10 (tblsearch "BLOCK" (vla-get-name SourceBlock))))
         )
       )
   )
   )
   (mxm
   (mapcar
       (function
         (lambda ( e ) (trans e 0 norm t))
       )
      '((1. 0. 0.) (0. 1. 0.) (0. 0. 1.))
   )
   (mxm
       (list
         (list (cos ang) (sin (- ang)) 0.)
         (list (sin ang) (cos ang)   0.)
         (list   0.      0.      1.)
       )
       (list
         (list x 0. 0.)
         (list 0. y 0.)
         (list 0. 0. z)
       )
   )
   )
)
)

;; Matrix Transpose - Doug Wilson
;; Args: m - nxn matrix

(defun trp ( m )
(apply 'mapcar (cons 'list m))
)

;; Matrix x Matrix - Vladimir Nesterovsky
;; Args: m,n - nxn matrices

(defun mxm ( m n )
( (lambda ( a ) (mapcar '(lambda ( r ) (mxv a r)) m)) (trp n))
)

;; Matrix x Vector - Vladimir Nesterovsky
;; Args: m - nxn matrix, v - vector in R^n

(defun mxv ( m v )
(mapcar '(lambda ( r ) (apply '+ (mapcar '* r v))) m)
)

;;---------------------=={ Select if }==----------------------;;
;;                                                            ;;
;;Continuous selection prompts until a predicate function   ;;
;;is validated                                              ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;msg- prompt string                                    ;;
;;pred - optional predicate function taking ename argument;;
;;func - selection function to invoke                     ;;
;;------------------------------------------------------------;;
;;Returns:selected entity ename if successful, else nil   ;;
;;------------------------------------------------------------;;

(defun LM:Select ( msg pred func / e ) (setq pred (eval pred))
(while
   (progn (setvar 'ERRNO 0) (setq e (car (func msg)))
   (cond
       ( (= 7 (getvar 'ERRNO))

         (princ "\n** Missed, Try again **")
       )
       ( (eq 'ENAME (type e))

         (if (and pred (not (pred e)))
         (princ "\n** Invalid Object Selected **")
         )
       )
   )
   )
)
e
)

yajis_narif 发表于 2022-7-6 10:09:11

谢谢李,你的程序很完美,它显示了每个圆的中心,但还有一件事我可以得到每个圆的坐标列表吗??

Lee Mac 发表于 2022-7-6 10:18:43

 
是的,在创建点图元时,使用提供给entmake表达式的点创建列表。

yajis_narif 发表于 2022-7-6 10:24:43

好的,非常感谢李,我会尽力的

Lee Mac 发表于 2022-7-6 10:28:04

不客气-如果你卡住了,请告诉我
页: [1] 2
查看完整版本: 块中的圆心