djw 发表于 2022-7-6 10:50:21

new to lispsss, need a rewrite

This works good but, I would like to have the 2 objects rotate clockwise..not Counter clockwise
 
(defun c:90R( / e f p a b c i)
(vl-load-com)
(setvar "cmdecho" 1)
(setq e (vlax-ename->vla-object (car (entsel "\nSelect object: "))))
(setq f (vlax-ename->vla-object (car (entsel "\nSelect object: "))))
(setq p (getpoint "\nSelect rotation point: "))
(setq a 1 ; Number of revolutions
b 1 ; Degrees per increment (must be a factor of 90)
c 01 ; Delay between incremental rotation
i 0) ;
(if (= 0 (rem (setq d (/ 90 b)) -1))
(while (
(repeat d
(vla-rotate e (vlax-3d-point p) (* (/ pi 180.0) b))
(vla-rotate f (vlax-3d-point p) (* (/ pi 180.0) b))
(vl-cmdf "delay" c "regen")
)
(setq i (1+ i))
)
)
)

Cad64 发表于 2022-7-6 10:57:47

You will get a better and faster response if you post in the correct area of the forum.
 
Question moved to the Lisp section.

alanjt 发表于 2022-7-6 11:02:50

Just change your angle to a negative number. Hell, make 180. -180.

asos2000 发表于 2022-7-6 11:06:49

djw
Try to use # button to paste your code to be readable as a code
 

LIKE THIS

Tharwat 发表于 2022-7-6 11:15:35

Hi
Here it goes,

(defun c:90R( / e f p a b c i)(vl-load-com)(setvar "angdir" 1)(setvar "cmdecho" 1)(setq e (vlax-ename->vla-object (car (entsel "\nSelect object: "))))(setq f (vlax-ename->vla-object (car (entsel "\nSelect object: "))))(setq p (getpoint "\nSelect rotation point: "))(setq a 1 ; Number of revolutionsb 1 ; Degrees per increment (must be a factor of 90)c 01 ; Delay between incremental rotationi 0) ; (if (= 0 (rem (setq d (/ 90 b)) -1))(while (< i a)(repeat d(vla-rotate e (vlax-3d-point p) (* (/ pi 180.0) b))(vla-rotate f (vlax-3d-point p) (* (/ pi 180.0) b))(vl-cmdf "delay" c "regen"))(setq i (1+ i))))(setvar "angdir" 0))
 
Regards
Tharwat

asos2000 发表于 2022-7-6 11:19:11

Check Red code
Why did you select object 2 times (e and f)

(defun c:90R( / e f p a b c i) (vl-load-com) (defun *error* (msg)   (and uFlag (vla-EndUndoMark doc))   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")       (princ (strcat "\n** Error: " msg " **")))   (princ))(setq OldCMDEcho (getvar "cmdecho") ; Save System Variable (setvar "cmdecho" 1) (setq e (vlax-ename->vla-object (car (entsel "\nSelect object: ")))         f (vlax-ename->vla-object (car (entsel "\nSelect object: ")))         p (getpoint "\nSelect rotation point: ")         a 1 ; Number of revolutions         b 1 ; Degrees per increment (must be a factor of 90)         c 01 ; Delay between incremental rotation         i 0) ; (if (= 0 (rem (setq d (/ 90 b)) -1))   (while (< i a)   (repeat d       (vla-rotate e (vlax-3d-point p) (* (/ pi 180.0) b))       (vla-rotate f (vlax-3d-point p) (* (/ pi 180.0) b))       (vl-cmdf "delay" c "regen")       )    (setq i (1+ i))   )   )      (setvar "cmdecho" OldCMDEcho) ; restore System Variable      (princ) )

Lee Mac 发表于 2022-7-6 11:28:24

Why this?
 

(and uFlag (vla-EndUndoMark doc))
 
Or was it just a copy/paste job from my code?

asos2000 发表于 2022-7-6 11:30:16

Seems like that but there was a code line I didnt paste.
 

(setq uFlag (vla-EndUndoMark doc))
 
Any way welcome back

djw 发表于 2022-7-6 11:35:43

Thought I was post’n in the correct place? AutoCAD Forums> AutoCAD Customization> AutoLISP, Visual LISP & DCL
Anyhow think U-all for the reply’s.. Alanjt (–180) seems to work,
just try’n to learn, could you translate to plane English?
(vla-rotate e (vlax-3d-point p) (* (/ pi 180.0) b))
 
“(vla-rotate e” =Selected object
e
 
 
“(vlax-3d-point p)”=get 3D x y z of Selected object
e, what doses the “p” do?
 
 
“(* (/ pi 180.0) b))”= ???? 180 = Counter clockwise
-180 clockwise ??????
 
ya I know just try’n to learn..
Asos2000, object 2? Rotating two objects @ the same time..
thanks again…

Lee Mac 发表于 2022-7-6 11:40:17

 
Read the help file on vlax-3D-point, it creates a variant ( 3-element array of doubles ) from the point 'p'.
页: [1] 2
查看完整版本: new to lispsss, need a rewrite