乐筑天下

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

[编程交流] [Help] Getangle with negative

[复制链接]

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 08:53:11 | 显示全部楼层 |阅读模式
Hi all.Please help me one simple problem. I use getangle (or getorient) to get an angle (angbase and angdir changed to suite already), and then check it value to decide direction to rotate. How could i make it return negative also ?
Ex :
(getangle) =>type  -20 => return :-0.349066 , not 5.93412 ?
I don't want use getstring, then check "-" or sth similar, since it no support pick two point
Please help me, i can't control my brain now  
Thanks for reading
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:00:56 | 显示全部楼层
in cases like that and degrees input cannot be help, i normally use getreal/dtr
  1. (setq ang(if (minusp (setq i (getreal "\nEnter Angle: ")))  (* pi (/ (+ 360 i) 180.00))    (* pi (/ i 180.0)))     )

 
But it doesnt help with your question though
 
This perhaps?
 
  1. (defun c:test (/ ang) (setq ang (getreal "\nEnter Angle::  ")) (if (= ang nil)   (setq ang (getangle "Pick points for Angle: "))   (if (minusp ang)     (* pi (/ (+ 360 ang) 180.00))     (* pi (/ ang 180.0))   ) ))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:06:20 | 显示全部楼层
My version:
 
  1. (defun LM:2piAngle ( a )   (if (minusp (setq a (rem (+ pi pi a) (+ pi pi))))       (LM:2piAngle a)       a   ))
  1. _$ (LM:2piAngle -0.349066)5.93412
 
Or, for angles (-2pi
 
  1. (defun LM:2piAngle ( a ) (rem (+ pi pi a) (+ pi pi)))
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:15:26 | 显示全部楼层
Thanks very much to Lee and pBe for helping. Sorry for my English, i feel there is a misunderstanding. I just want when i input an negative (ex -20), it will return -0.349066 , not 5.93412 like getangle did. SO i will try to modify a little two defun above ^^ I only want to ask can it be done by getang or getorient ^^
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:23:10 | 显示全部楼层
 
Why do you need it to specifically return the negative angle? Both angles are identical.
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:26:33 | 显示全部楼层
Ah, actualy i'm trying to decide direction to array polar (base on qjchen idea).  
Please see my post and red code of qjchen to understand my explaination. Srr for my poor E
With negative number, i want it go clockwise.But problem is ang allway return positive number, so i ask can it be solved by getangle anymore(lazy)? or i've change the way of get angle, or change two red code line ^^
Preview :

Open Source :

[code];Many thank to qjchen again(vl-load-com)(defun c:par( / ang angnow gr oang p0 px px1 ss ss1 cc oldAng ans)(grtext -1 "Dynamic PArray @Ketxu")(setq m:err *error*    *error* err)(command "undo" "be")(setq oldAng (getvar "angbase"))(if (and (setq ss (ST:SS->List-Vla (ssget))   p0 (getpoint "\nT\U+00E2m quay : :")   px (getpoint p0 "\n\U+0110\U+01B0\U+1EDDng c\U+01A1 s\U+1EDF ::") ))(progn (grdraw  p0 px 1) (setvar "angbase" (angle p0 px)) (setq   cc (_circle p0 (distance p0 px))         ang (getangle p0 "\nG\U+00F3c Array :")   s (/ (getvar "viewsize") (cadr (getvar "SCREENSIZE"))) ) (cond ((ST:Check-Exist '("AcDbText" "AcDbMText") (mapcar 'vla-get-objectname ss))     (setq ans (strcase(getstring "Copy t\U+0103ng Text ? < K > :")))     (cond ((not (or (= ans "K")(= ans "")))       (or #num (setq #num 1))       (setq #num (cond ((getint (strcat "\nGia s\U+1ED1 < " (rtos #num 2 0) " > :")))(#num)) inc T)       )     )   ) )(prompt "\nPick \U+0111i\U+1EC3m cu\U+1ED1i c\U+00F9ng :")(while (= (car (setq gr (grread nil 5 0))) 5) (if ss1 (mapcar 'vla-delete ss1)) (redraw) (setq angnow (angle p0 (cadr gr))    g (trans (cadr gr) 1 3) )   (grvecs (LM:GrText (rtos (/ (* angnow 180) pi) 2 0) 3) (  (lambda ( r x y )  (list   (list r  0. 0. x )   (list 0. r  0. y )   (list 0. 0. r  0.)   (list 0. 0. 0. 1.)  )  )  s  (+ (car  g) (* 15 s))  (- (cadr g) (* 31 s)) ) ) (if (and (< ang 0)(> angnow 0)) (setq angnow (- angnow (* 2 pi))))  (if (and (> ang 0)(< angnow 0)) (setq angnow (+ (* 2 pi) angnow))) (setq ss1 (_copyCC ss (fix (/ angnow ang)) p0 ang inc #num)) (grdraw:arc p0 (/ (getvar "viewsize") 4.0) (angle p0 px) angnow))(entdel cc)(setvar "angbase" oldAng)))(command "undo" "en")(princ));;; =======================================================================;;;; by qjchen, copy ss according to the direction and vector      ;;;; =======================================================================;(defun _copyCC (sslst n cen ang inc num / i obj1 ss xobj lst number) (foreach xobj sslst   (setq  i 1)(cond ((and (wcmatch (vla-get-objectname xobj) "AcDbText,AcDbMText") inc num)   (cond ((= 'REAL (type (setq number (last (setq lst (ST:String-GetNumber (vla-get-textstring xobj)))))))   (setq  isReal T))   (T (setq  isReal nil))   )  (setq isText T)  ) ;Text Object  (T setq isText nil))   (repeat n     (setq obj1 (vla-copy xobj))     (Vla-rotate obj1 (vlax-3d-point cen) (* ang i)) (if  (and isText (wcmatch (vla-get-objectname xobj) "AcDbText,AcDbMText") inc num)  (vla-put-textstring obj1 (strcat (car lst) (rtos (setq number (+ num number)) 2  (if isReal 1 0))(cadr lst))))       (setq i (1+ i) ss (cons obj1 ss))   ) ) ss);;; =======================================================================;;;; @Ketxu Make Circle Temp                                                ;;;; =======================================================================;(defun _circle (p0 r / ent)(redraw (setq ent(entmakex (list (cons 0 "CIRCLE")(cons 10 (trans p0 1 0))(cons 40 r)))) 3) ent)(defun RtD (rad) ; converts radian to degree(/ (* rad 180) pi));defun;;; =======================================================================;;;; Check List Item Exist in Other List @Ketxu                             ;;;; =======================================================================;(defun ST:Check-Exist(lst1 lst2)(and (vl-remove nil (mapcar '(lambda(x)(vl-position x lst2)) lst1))));;; =======================================================================;;;; Selection to list  VLA @Ketxu                                          ;;;; =======================================================================;(defun ST:SS->List-Vla (ss / n e l) (setq n (sslength ss)) (while (setq e (ssname ss (setq n (1- n))))   (setq l (cons (vlax-ename->vla-object e) l)) ))(defun ST:Ss-Delete (ss / i) (mapcar 'vla-delete (ST:SS->List-Vla ss)));;; =======================================================================;;;; grdraw circle arc                                           ;;;; =======================================================================;(defun grdraw:arc(cen r ang angadd / angdiv n)(grdraw cen (polar cen ang r) 3 1)(grdraw cen (polar cen (+ ang angadd) r) 3 1)(setq n 100 angdiv (/ angadd n))(repeat n  (grdraw (polar cen ang r)(polar cen (setq ang (+ ang angdiv)) r) 1 1)))(defun ST:String-GetNumber (str / i j dau cuoi tmp tmp1 tmp2 num)(setq lst (vl-string->list str) i -1 j (strlen str))(list(setq tmp1 (vl-list->string (reverse (while (not (or (= i j))) (setq dau (cons tmp dau))))))(setq tmp2(vl-list->string (while (not (or (
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:30:31 | 显示全部楼层
I see - In that case you may need to use a getreal prompt, however you then cannot use the base point to visually pick the angle. So perhaps the compromise may be to use a separate getkword prompt for Clockwise/Anticlockwise.
 
Nice use of GrText
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:36:30 | 显示全部楼层
Oh, i see. Now i change the method to input Angle ^^
GrText is nice by itself ^^ Thanks you for this function..
Ah, once more thing, How could i insert other symbol to it list by myself? ^^
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

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

铜币
211
发表于 2022-7-6 09:46:02 | 显示全部楼层
 
You are right Lee!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:48:22 | 显示全部楼层
 
It's not straightforward unfortunately
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 05:53 , Processed in 0.453513 second(s), 72 queries .

© 2020-2025 乐筑天下

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