The Buzzard 发表于 2022-7-6 11:45:29

用s旋转所有属性

2009年7月28日
以下是完整的修订代码。
此代码将提示输入旋转角度。
代码也有错误捕捉。
要将此程序用于您自己的区块
属性指以红色突出显示的代码部分。
您可以在代码中的此处更改属性标记
与您自己的属性标记一起使用。
请参阅下面的附加Line_扩展。测试程序的图纸。
 
此代码的函数语法:AVR
Line_扩展。图纸
AVR。拉链

The Buzzard 发表于 2022-7-6 11:49:04

 
 
无论如何,谢谢你,我知道了!
 
(defun C:TVR ()
(setq BNAM "8-WAY")
(setq BLOCROT (ssget "x" (list (cons 0 "INSERT")(cons 2 BNAM)(cons 66 1))))
(if
   (/= BLOCROT nil)
   (progn
   (setq INDEX 0)
   (repeat
       (sslength BLOCROT)
       (setq ENAME (ssname BLOCROT INDEX))
       (setq ELIST (entget ENAME))
       (while
         (/= (cdr (assoc 0 ELIST)) "SEQEND")
         (setq ELIST (entget ENAME))
         (if
         (= "TAP-VAL" (cdr (assoc 2 ELIST)))
         (progn
             (entmod
               (subst
               (cons 50 0.0)
               (assoc 50 ELIST) ELIST
               )
             )
             (entupd ENAME)
         )
         )
         (setq ENAME (entnext ENAME))
       )
       (setq INDEX (1+ INDEX))
   )
   )
   (ALERT (strcat "\nThe block "BNAM" was not found."))
)
(princ)
)

Freerefill 发表于 2022-7-6 11:53:14

哇!我写了一些东西来做你想做的事情,有趣的是,我现在正在使用它
 
不确定这是否完全解决了问题,但这是我的函数:
 
(defun c:cr( / ss obj)
(vl-load-com)
(if (ssget "X" (list (cons 2 "IDI-SECU-CAMR")))
   (progn
   (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object))))
   (if (= (vla-get-HasAttributes obj) :vlax-true)
   (foreach attVar (vlax-invoke obj 'GetAttributes)
       (if (not (= (vla-get-TagString attVar) "NUM"))
         (vla-put-Rotation attVar 0)))))
   (vla-delete ss)))
(princ)
)
 
非常简单:获取具有特定名称的所有块,然后遍历块的每个属性,看看哪个属性标记为“NUM”,并将旋转设置为0(vla put旋转部分)。我写这篇文章是因为我有很多具有各种旋转的块,我想把所有这些块的属性放回0度旋转,以便于可读性。
 
希望能有所帮助。^。^

The Buzzard 发表于 2022-7-6 11:55:29

 
谢谢你,
 
但在上一篇帖子中,我在最后一分钟才弄明白。我很欣赏代码,但我只是在寻找一些方向。我只需要让代码正常工作。我想学习这些东西,而不是依赖别人为我做。相信我,当我告诉你的努力和代码是非常感谢。我知道我很快就想出来了,但你只是在那些时候,你的大脑似乎被洗掉了。
 
 
谢谢
秃鹰

Lee Mac 发表于 2022-7-6 11:58:35

另一种快速方法:
 

;; ============[ AttRot.lsp ]===============
;;
;;FUNCTION:
;;Will move Multiple Attribute Tags
;;
;;SYNTAX: ATTROT
;;
;;AUTHOR:
;;Copyright (c) 2009, Lee McDonnell
;;(Contact Lee Mac, CADTutor.net)
;;
;;VERSION:
;;1.0~02.07.2009
;;
;; =========================================

(defun c:AttRot (/ *error* lklst ent Blk
                  Obj bNme ss bPt ObjLst
                  iPt gr dat cAng)

(vl-load-com)

(defun *error* (msg)
   (vla-EndUndoMark
   (vla-get-ActiveDocument
       (vlax-get-acad-object)))
   (if lklst
   (foreach l lklst
       (vla-put-lock
         (car l) (cdr l))))
   (if (not
         (wcmatch
         (strcase msg)
             "*BREAK,*CANCEL*,*EXIT*"))
   (princ
       (strcat "\n<< Error: " msg " >>")))
   (redraw)
   (princ))
         

(vlax-for l
   (vla-get-layers
   (vla-get-ActiveDocument
       (vlax-get-acad-object)))
   (setq lklst
   (cons
       (cons l
         (vla-get-lock l)) lklst))
   (vla-put-lock l :vlax-false))

(while
   (progn
   (setq ent
       (car (nentsel "\nSelect Attribute: ")))
   (cond
       ((eq 'ENAME (type ent))
      (if
          (not
            (eq "ATTRIB"
                (cdr (assoc 0 (entget ent)))))
          (princ "\n** Object is not an Attribute **")
          nil))
       (t (princ "\n** Nothing Selected **")))))

(setq Blk
   (vla-ObjectIdtoObject
   (vla-get-ActiveDocument
       (vlax-get-acad-object))
   (vla-get-OwnerId
       (setq Obj
         (vlax-ename->vla-object ent)))))

(setq bNme
   (if (vlax-property-available-p Blk 'EffectiveName)
   (vla-get-EffectiveName Blk)
       (vla-get-Name Blk)))

(setq ss
   (ssget "_X" (list (cons 0 "INSERT")
                     (cons 2 bNme)
                         (cons 66 1))))

(vla-StartUndoMark
   (vla-get-ActiveDocument
   (vlax-get-acad-object)))

(setq ObjLst
   (vl-remove-if-not
   (function
       (lambda (x)
         (eq (vla-get-TagString x)
               (vla-get-TagString Obj))))
   (apply 'append
       (mapcar 'asmi-GetAttributes
         (mapcar 'vlax-ename->vla-object
         (mapcar 'cadr (ssnamex ss)))))))

(setq iPt
   (vlax-safearray->list
   (vlax-variant-value
       (vla-get-TextAlignmentPoint Obj))))      

(while
   (progn
   (setq gr (grread t 15 0) dat (cadr gr))
   (cond
       ((and (eq 5 (car gr)) (listp dat))
      (redraw)
      (setq cAng
          (angle
            (vlax-safearray->list
            (vlax-variant-value
                (vla-get-TextAlignmentPoint Obj))) dat))
      (mapcar
          (function
            (lambda (x)
            (vla-put-rotation x cAng))) ObjLst)
      (grvecs (list -6 iPt dat)) t) ; Keep in Loop
       ((or (eq 25 (car gr)) ; Right Click
            (eq 3 (car gr)) ; Left Click
            (and
            (eq 2 (car gr))
            (vl-position dat '(13 32)))) ; Enter Space
      nil) ; Exit Loop
       )))      
      

(vla-EndUndoMark
   (vla-get-ActiveDocument
   (vlax-get-acad-object)))

(foreach l lklst
   (vla-put-lock
   (car l) (cdr l)))

(redraw)
(princ))

;; ASMI
(defun asmi-GetAttributes (Block / atArr caArr)
(append
    (if
      (not
      (vl-catch-all-error-p
          (setq atArr
            (vl-catch-all-apply
            'vlax-safearray->list
            (list
            (vlax-variant-value
                (vla-GetAttributes Block)))))))
          atArr)
    (if
      (not
      (vl-catch-all-error-p
          (setq caArr
            (vl-catch-all-apply
            'vlax-safearray->list
            (list
            (vlax-variant-value
                (vla-GetConstantAttributes Block)))))))
            caArr)))

The Buzzard 发表于 2022-7-6 12:01:58

 
谢谢李,
 
我的大脑在最后一分钟开始跳动。见帖子2。
非常感谢,但正如你们所知,我不希望代码为我完成。我需要独立解决这个问题。在右边指我
方向就足够了。
 
非常感谢。
秃鹰

Lee Mac 发表于 2022-7-6 12:05:02

 
好的,但只是踢-这一个将让你进入角度也
 

;; ============[ AttRot.lsp ]===============
;;
;;FUNCTION:
;;Will move Multiple Attribute Tags
;;
;;SYNTAX: ATTROT
;;
;;AUTHOR:
;;Copyright (c) 2009, Lee McDonnell
;;(Contact Lee Mac, CADTutor.net)
;;
;;VERSION:
;;1.0~02.07.2009
;;2.0~02.07.2009
;;
;; =========================================

(defun c:AttRot (/ *error* lklst ent Blk
                  Obj bNme ss bPt ObjLst
                  iPt gr dat cAng vl ov str)

(vl-load-com)

(defun *error* (msg)
   (vla-EndUndoMark
   (vla-get-ActiveDocument
       (vlax-get-acad-object)))
   (if ov (mapcar 'setvar vl ov))
   (if lklst
   (foreach l lklst
       (vla-put-lock
         (car l) (cdr l))))
   (if (not
         (wcmatch
         (strcase msg)
             "*BREAK,*CANCEL*,*EXIT*"))
   (princ
       (strcat "\n<< Error: " msg " >>")))
   (redraw)
   (princ))

(setq vl '("MODEMACRO")
       ov (mapcar 'getvar vl))         

(vlax-for l
   (vla-get-layers
   (vla-get-ActiveDocument
       (vlax-get-acad-object)))
   (setq lklst
   (cons
       (cons l
         (vla-get-lock l)) lklst))
   (vla-put-lock l :vlax-false))

(while
   (progn
   (setq ent
       (car (nentsel "\nSelect Attribute: ")))
   (cond
       ((eq 'ENAME (type ent))
      (if
          (not
            (eq "ATTRIB"
                (cdr (assoc 0 (entget ent)))))
          (princ "\n** Object is not an Attribute **")
          nil))
       (t (princ "\n** Nothing Selected **")))))

(setq Blk
   (vla-ObjectIdtoObject
   (vla-get-ActiveDocument
       (vlax-get-acad-object))
   (vla-get-OwnerId
       (setq Obj
         (vlax-ename->vla-object ent)))))

(setq bNme
   (if (vlax-property-available-p Blk 'EffectiveName)
   (vla-get-EffectiveName Blk)
       (vla-get-Name Blk)))

(setq ss
   (ssget "_X" (list (cons 0 "INSERT")
                     (cons 2 bNme)
                         (cons 66 1))))

(vla-StartUndoMark
   (vla-get-ActiveDocument
   (vlax-get-acad-object)))

(setq ObjLst
   (vl-remove-if-not
   (function
       (lambda (x)
         (eq (vla-get-TagString x)
               (vla-get-TagString Obj))))
   (apply 'append
       (mapcar 'asmi-GetAttributes
         (mapcar 'vlax-ename->vla-object
         (mapcar 'cadr (ssnamex ss)))))))

(setq iPt
   (vlax-safearray->list
   (vlax-variant-value
       (vla-get-TextAlignmentPoint Obj))) str "")      

(while
   (progn
   (setq gr (grread t 15 0) dat (cadr gr))
   (setvar "MODEMACRO"
       (strcat "Rotation: "
         (rtos (rtd (vla-get-Rotation Obj)) 2 2) (chr 186)))
   (cond
       ((and (eq 5 (car gr)) (listp dat))
      (redraw)
      (setq cAng
          (angle
            (vlax-safearray->list
            (vlax-variant-value
                (vla-get-TextAlignmentPoint Obj))) dat))
      (mapcar
          (function
            (lambda (x)
            (vla-put-rotation x cAng))) ObjLst)
      (grvecs (list -6 iPt dat)) t) ; Keep in Loop
       ((eq 2 (car gr))
      (cond ((or (eq 46 dat) (<= 48 dat 57)) ; numbers or dp.
               (princ (chr dat))
               (setq str (strcat str (chr dat))))
            ((eq 8 dat) ; BackSpace
               (princ (strcat (chr(chr 32) (chr ))
               (setq str (substr str 1 (1- (strlen str)))))
            ((vl-position dat '(32 13)) ; Enter Space
               (if (setq cAng (distof str))
               (not ; Exit Loop
                   (mapcar
                     (function
                     (lambda (x)
                         (vla-put-rotation x (dtr cAng)))) Objlst))
               nil)) ; Exit Loop
            (t t))) ; Keep in Loop
       ((or (eq 25 (car gr)) ; Right Click
            (eq 3 (car gr))) ; Left Click
      nil) ; Exit Loop
       (t t)))) ; Keep in Loop

(vla-EndUndoMark
   (vla-get-ActiveDocument
   (vlax-get-acad-object)))

(foreach l lklst
   (vla-put-lock
   (car l) (cdr l)))

(mapcar 'setvar vl ov)
(redraw)
(princ))

(defun rtd (x)
(* 180. (/ x pi)))

(defun dtr (x)
(* pi (/ x 180.)))

;; ASMI
(defun asmi-GetAttributes (Block / atArr caArr)
(append
    (if
      (not
      (vl-catch-all-error-p
          (setq atArr
            (vl-catch-all-apply
            'vlax-safearray->list
            (list
            (vlax-variant-value
                (vla-GetAttributes Block)))))))
          atArr)
    (if
      (not
      (vl-catch-all-error-p
          (setq caArr
            (vl-catch-all-apply
            'vlax-safearray->list
            (list
            (vlax-variant-value
                (vla-GetConstantAttributes Block)))))))
            caArr)))

The Buzzard 发表于 2022-7-6 12:09:49

 
这很新颖,但我只需要将角度设置为零,无论块的角度是什么。稍后我可能会以几种不同的方式使用此例程。至于现在,我很高兴我自己通过了这一关。我可能会将其添加到我喜欢创建的那些块库程序中。
我会及时到达VL,但只有在我先掌握香草之后。
 
谢谢

Lee Mac 发表于 2022-7-6 12:13:27

 
我完全理解,这启发了我创建某种属性套件。。。也许以后再来

The Buzzard 发表于 2022-7-6 12:14:19

 
听起来很棒。我不得不注意到,属性操作和值编辑是经常提到的非常流行的任务。我相信你会得到很多点击这些节目,因为他们总是在需求。
 
期待着,李,
谢谢
秃鹰
页: [1] 2
查看完整版本: 用s旋转所有属性