Jump to content

Recommended Posts

Posted (edited)

I use this code to dimension close polylines with  length text and azimuth angle in grads.

I want to change this azimutha angle to

1)The angle between  red and green line. Red line is always vertical and is the North direction.

2) the green line is always vertical to each polyline side

3) The angle must be in degrees

Look the attach file

 

(defun c:test ()

;---------------Sub-functions - Start-------------
(defun PARALELO ()
;---------------------------------------------------------------
(setq A1 (polar A (+ (/ pi 2)(angle B A )) (+ (* 0.05 2.5)))) 
(setq B1 (polar B (+ (/ pi 2)(angle B A )) (+ (* 0.05 2.5))))
;--------------------------------------------------------------
(setq ptx (/ (+ (car B1) (car A1)) 2))
(setq pty (/ (+ (cadr B1) (cadr A1)) 2))
(setq ponto_meio (list ptx pty))
;(if (< (car A1)(car B1))
;(setq inicio B1)
(setq inicio A1)
;)
)
;----------------Sub-functions - End -------------
(setvar"cmdecho" 0)
(setq flagv "falso")
(setq controle 0)
(setq controle1 0)
(setq contador 0)
(while (= flagv "falso")
(setq mostre (entsel "\nSelect a clock wise polyline <2d> : "))
(setq linha (entget (car mostre )))
(setq verificador (cdr(assoc 0 linha)))
(if (= verificador "LWPOLYLINE")
(progn
(setq verif (cdr (assoc 70 linha)))
(setq flagv "verdade")
)
(princ "\nThis is not a Polyline !! ")
)
)
(setq controle1 (length linha))
(setq amostra '())
(repeat controle1
(setq x (caar linha))
(if (= x 10)
(progn
(setq item (car linha))
(setq amostra (cons item amostra))
(setq contador (1+ contador))
)
)
(setq linha (cdr linha))
)
(setq amostra1 (reverse amostra))
(if (= verif 1)
(setq amostra (cons (car amostra1) amostra))
(setq contador (1- contador))
)
(setq controle contador)
(repeat controle
(setq PTO1 (cdr(car amostra)))
(setq PTO2 (cdr(car(cdr amostra))))
(AZIMUTAR)
(setq amostra(cdr amostra))
)
(command "undo" "end")
(setvar "textsize" 0.5)
(setvar"cmdecho" 1)
(princ)
)
;--------------------------------------------------------- 
(defun AZIMUTAR ()
(setq A PTO1)
(setq B PTO2)
(setq C " - Angle ")
(setq D (angtos (angle B A))) 
(setq PALAV D)
;------------- MODIFICACAO ROGERIO OPCAO AZIMUTE ----------------
(setq E (strcat (rtos (distance A B) 2 3) "m"))
(setq DADO (strcat E C PALAV))
;---------------------------------------------------------- ------
(PARALELO)
(if (zerop (cdr (assoc 40 (entget (tblobjname "style" (getvar 'textstyle))))))
  (command "_.-text" "_justify" "_Bc" "_non" ponto_meio ht "_non" inicio dado)
  (command "_.-text" "_justify" "_Bc" "_non" ponto_meio "_non" inicio dado)
)
(princ)
)
 

 

Thanks

 

 

 

test.jpg

test.dwg

Edited by mhy3sx
Posted

(setq mostre (entsel "\nSelect a clock wise polyline <2d> : "))

 

; Checking if pline is CW or CCW and set to CCW
; Orignal idea  by Kent Cooper, 1 August 2018 Offsetinorout.lsp
; By Alan H July 2020

(defun AH:chkcwccw (ent / objnew area1 area2 obj minpoint maxpoint)

(setq obj (vlax-ename->vla-object ent))
(vla-GetBoundingBox obj 'minpoint 'maxpoint)
(setq pointmin (vlax-safearray->list minpoint))
(setq pointmax (vlax-safearray->list maxpoint))
(setq dist (/ (distance pointmin pointmax) 20.0))

(vla-offset obj dist)
(setq objnew (vlax-ename->vla-object (entlast)))
(setq area1  (vlax-get objnew 'Area))
(vla-delete objnew)

(vla-offset obj (- dist))
(setq objnew (vlax-ename->vla-object (entlast)))
(setq area2  (vlax-get objnew 'Area))
(vla-delete objnew)

(if (> area1 area2)
  (progn
  (command "reverse" ent "")
  (setq y (+ y 1))
  )
)
)

If using Bricscad use Pedit R.

Posted

Hi BIGAL, Can any one help me how calculate the angle between green and red line in degrees?

 

Thanks

 

(defun c:test ()

;---------------Sub-functions - Start-------------
(defun PARALELO ()
;---------------------------------------------------------------
(setq A1 (polar A (+ (/ pi 2)(angle B A )) (+ (* 0.05 2.5)))) 
(setq B1 (polar B (+ (/ pi 2)(angle B A )) (+ (* 0.05 2.5))))
;--------------------------------------------------------------
(setq ptx (/ (+ (car B1) (car A1)) 2))
(setq pty (/ (+ (cadr B1) (cadr A1)) 2))
(setq ponto_meio (list ptx pty))
;(if (< (car A1)(car B1))
;(setq inicio B1)
(setq inicio A1)
;)
)
;----------------Sub-functions - End -------------
(setvar"cmdecho" 0)
(setq flagv "falso")
(setq controle 0)
(setq controle1 0)
(setq contador 0)
(while (= flagv "falso")
(setq mostre (entsel "\nSelect a clock wise polyline <2d> : "))
(setq linha (entget (car mostre )))
(setq verificador (cdr(assoc 0 linha)))
(if (= verificador "LWPOLYLINE")
(progn
(setq verif (cdr (assoc 70 linha)))
(setq flagv "verdade")
)
(princ "\nThis is not a Polyline !! ")
)
)
(setq controle1 (length linha))
(setq amostra '())
(repeat controle1
(setq x (caar linha))
(if (= x 10)
(progn
(setq item (car linha))
(setq amostra (cons item amostra))
(setq contador (1+ contador))
)
)
(setq linha (cdr linha))
)
(setq amostra1 (reverse amostra))
(if (= verif 1)
(setq amostra (cons (car amostra1) amostra))
(setq contador (1- contador))
)
(setq controle contador)
(repeat controle
(setq PTO1 (cdr(car amostra)))
(setq PTO2 (cdr(car(cdr amostra))))
(AZIMUTAR)
(setq amostra(cdr amostra))
)
(command "undo" "end")
(setvar"cmdecho" 1)
(princ)
)
;--------------------------------------------------------- 
(defun AZIMUTAR ()
(setq A PTO1)
(setq B PTO2)
(setq C " - Angle ")
(setq D (angtos (angle B A))) 
(setq PALAV D)
;------------- MODIFICACAO ROGERIO OPCAO AZIMUTE ----------------
(setq E (strcat (rtos (distance A B) 2 3) "m"))
(setq DADO (strcat E C PALAV))
;---------------------------------------------------------- ------
(PARALELO)
(if (zerop (cdr (assoc 40 (entget (tblobjname "style" (getvar 'textstyle))))))
  (command "_.-text" "_justify" "_Bc" "_non" ponto_meio 0.5 "_non" inicio dado)
  (command "_.-text" "_justify" "_Bc" "_non" ponto_meio "_non" inicio dado)
)
(princ)
)
 

test.jpg

test.dwg

Posted (edited)

Is any way to calculate this angles correct in degrees?

 

Thansk

Edited by mhy3sx
Posted

I convert it to degrees , but I need help to calculate the correct angle

 

 

(defun c:test ()

;---------------Sub-functions - Start-------------
(defun PARALELO ()
(SETVAR "AUNITS" 0)
;---------------------------------------------------------------
(setq A1 (polar A (+ (/ pi 2)(angle B A )) (+ (* 0.05 2.5)))) 
(setq B1 (polar B (+ (/ pi 2)(angle B A )) (+ (* 0.05 2.5))))
;--------------------------------------------------------------
(setq ptx (/ (+ (car B1) (car A1)) 2))
(setq pty (/ (+ (cadr B1) (cadr A1)) 2))
(setq ponto_meio (list ptx pty))
;(if (< (car A1)(car B1))
;(setq inicio B1)
(setq inicio A1)
;)
)
;----------------Sub-functions - End -------------
(setvar"cmdecho" 0)
(setq flagv "falso")
(setq controle 0)
(setq controle1 0)
(setq contador 0)
(while (= flagv "falso")
(setq mostre (entsel "\nSelect a clock wise polyline <2d> : "))
(setq linha (entget (car mostre )))
(setq verificador (cdr(assoc 0 linha)))
(if (= verificador "LWPOLYLINE")
(progn
(setq verif (cdr (assoc 70 linha)))
(setq flagv "verdade")
)
(princ "\nThis is not a Polyline !! ")
)
)
(setq controle1 (length linha))
(setq amostra '())
(repeat controle1
(setq x (caar linha))
(if (= x 10)
(progn
(setq item (car linha))
(setq amostra (cons item amostra))
(setq contador (1+ contador))
)
)
(setq linha (cdr linha))
)
(setq amostra1 (reverse amostra))
(if (= verif 1)
(setq amostra (cons (car amostra1) amostra))
(setq contador (1- contador))
)
(setq controle contador)
(repeat controle
(setq PTO1 (cdr(car amostra)))
(setq PTO2 (cdr(car(cdr amostra))))
(AZIMUTAR)
(setq amostra(cdr amostra))
)
(command "undo" "end")
(setvar"cmdecho" 1)
(princ)
)
;--------------------------------------------------------- 
(defun AZIMUTAR ()
(setq A PTO1)
(setq B PTO2)
(setq C " - Angle ")
(setq D (angtos (angle B A)))
(setq PALAV D)
;------------- MODIFICACAO ROGERIO OPCAO AZIMUTE ----------------
(setq E (strcat (rtos (distance A B) 2 2) "m"))
(setq DADO (strcat E C PALAV))
;---------------------------------------------------------- ------
(PARALELO)
(if (zerop (cdr (assoc 40 (entget (tblobjname "style" (getvar 'textstyle))))))
  (command "_.-text" "_justify" "_Bc" "_non" ponto_meio 0.5 "_non" inicio dado)
  (command "_.-text" "_justify" "_Bc" "_non" ponto_meio "_non" inicio dado)
)
(princ)
)

 

 

 

thanks

Posted

And if you change simply:

(setq D (angtos (angle B A)))

to

(setq D (angtos (- (angle B A) (* 0.5 pi)) 0 3))

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...