CongVenh Posted November 17, 2023 Posted November 17, 2023 Hello everybody! I want to measure the angle between a straight line and a plane (Do not use the Dist command), if the results can be exported to Excel, the better. As shown in the attached image I want the result of angle A and angle B (In minutes) between line MN and plane XOY. Thank you very much. Quote
fuccaro Posted November 17, 2023 Posted November 17, 2023 Like this? (defun c:pp() (setq p1 (cdr (assoc 10 (setq el (entget (car (entsel "Select line \n ")))))) p2 (cdr (assoc 11 el)) p3 (list (car p1) (cadr p1) (caddr p2)) ang1 (atan (distance p1 p3) (distance p2 p3)) ang2 (angle p3 p2) toMin (* 60 (/ 180.0 PI))) (strcat (rtos (* ang1 toMin)) " min / " (rtos (* ang2 toMin)) " min") ) 1 Quote
CongVenh Posted November 18, 2023 Author Posted November 18, 2023 (edited) On 11/17/2023 at 12:19 PM, fuccaro said: Like this? (defun c:pp() (setq p1 (cdr (assoc 10 (setq el (entget (car (entsel "Select line \n ")))))) p2 (cdr (assoc 11 el)) p3 (list (car p1) (cadr p1) (caddr p2)) ang1 (atan (distance p1 p3) (distance p2 p3)) ang2 (angle p3 p2) toMin (* 60 (/ 180.0 PI))) (strcat (rtos (* ang1 toMin)) " min / " (rtos (* ang2 toMin)) " min") ) THANK YOU FOR HELP ME. BUT THE RESULT IS ERROR, PLEASE CHECK IT! Edited November 20, 2023 by fuccaro deleting redundant images Quote
BIGAL Posted November 19, 2023 Posted November 19, 2023 Did you look for the mathematical answer ? Formulas with regards to planes. Then it could be converted to lisp. Quote
CongVenh Posted November 19, 2023 Author Posted November 19, 2023 4 hours ago, BIGAL said: Did you look for the mathematical answer ? Formulas with regards to planes. Then it could be converted to lisp. 4 hours ago, BIGAL said: Did you look for the mathematical answer ? Formulas with regards to planes. Then it could be converted to lisp. Hello. I want lisp to replace the DIST command in Autocad. Instead of reading the results from the DIST command, I want the angle measurement results (Angle A and Angle B as shown in the illustration) to be exported to excel or printed to the screen. Quote
marko_ribar Posted November 19, 2023 Posted November 19, 2023 Something like this : (defun c:dii ( / ftoa x1 y1 z1 x2 y2 z2 x1w y1w z1w x2w y2w z2w x1o y1o z1o x2o y2o z2o p1 p2 d ducs docs dwcs dx dy dz v dxw dyw dzw w dxo dyo dzo ax vprim vprimd axy ocs stringid1 stringid1w stringid1o stringid2 stringid2w stringid2o string1 string2 string3 string4 string5 string6 string7 string8 string9 string10 string11 string12 string13 string14 string15 alertstring ) (defun ftoa ( n / m a s b ) (if (numberp n) (progn (setq m (fix ((if (< n 0) - +) n 1e-8))) (setq a (abs (- n m))) (setq m (itoa m)) (setq s "") (while (and (not (equal a 0.0 1e-6)) (setq b (fix (* a 10.0)))) (setq s (strcat s (itoa b))) (setq a (- (* a 10.0) b)) ) (if (= (type n) 'int) m (if (= s "") m (if (and (= m "0") (< n 0)) (strcat "-" m "." s) (strcat m "." s) ) ) ) ) ) ) (while (not p1) (setq p1 (getpoint "\nPick or specify start point : "))) (while (not p2) (setq p2 (getpoint p1 "\nPick or specify end point : "))) (setq d (distance p1 p2)) (grdraw p1 p2 6 1) (setq dx (car (setq v (mapcar (function -) p2 p1)))) (setq dy (cadr v)) (setq ducs (sqrt (+ (* dx dx) (* dy dy)))) (setq dz (caddr v)) (setq ocs (trans (list 0.0 0.0 1.0) 1 0 t)) (setq dxo (car (mapcar (function -) (trans p2 1 ocs) (trans p1 1 ocs)))) (setq dyo (cadr (mapcar (function -) (trans p2 1 ocs) (trans p1 1 ocs)))) (setq dzo (caddr (mapcar (function -) (trans p2 1 ocs) (trans p1 1 ocs)))) (setq docs (sqrt (+ (* dxo dxo) (* dyo dyo)))) (setq dxw (car (setq w (trans v 1 0)))) (setq dyw (cadr w)) (setq dzw (caddr w)) (setq dwcs (sqrt (+ (* dxw dxw) (* dyw dyw)))) (setq ax (cvunit (atan dy dx) "radians" "degrees")) (setq vprim (list (car v) (cadr v) 0.0)) (setq vprimd (distance (list 0.0 0.0 0.0) vprim)) (setq axy (cvunit (atan (caddr v) vprimd) "radians" "degrees")) (setq x1 (car p1) y1 (cadr p1) z1 (caddr p1) ) (setq x2 (car p2) y2 (cadr p2) z2 (caddr p2) ) (setq x1w (car (trans p1 1 0)) y1w (cadr (trans p1 1 0)) z1w (caddr (trans p1 1 0)) ) (setq x2w (car (trans p2 1 0)) y2w (cadr (trans p2 1 0)) z2w (caddr (trans p2 1 0)) ) (setq x1o (car (trans p1 1 ocs)) y1o (cadr (trans p1 1 ocs)) z1o (caddr (trans p1 1 ocs)) ) (setq x2o (car (trans p2 1 ocs)) y2o (cadr (trans p2 1 ocs)) z2o (caddr (trans p2 1 ocs)) ) (prompt "\n\nID pt1 in UCS : (")(princ (rtos x1 2 50))(prompt " ")(princ (rtos y1 2 50))(prompt " ")(princ (rtos z1 2 50))(prompt ")") (prompt "\nID pt1 in WCS : (")(princ (rtos x1w 2 50))(prompt " ")(princ (rtos y1w 2 50))(prompt " ")(princ (rtos z1w 2 50))(prompt ")") (prompt "\nID pt1 in OCS : (")(princ (rtos x1o 2 50))(prompt " ")(princ (rtos y1o 2 50))(prompt " ")(princ (rtos z1o 2 50))(prompt ")") (prompt "\n\nID pt2 in UCS : (")(princ (rtos x2 2 50))(prompt " ")(princ (rtos y2 2 50))(prompt " ")(princ (rtos z2 2 50))(prompt ")") (prompt "\nID pt2 in WCS : (")(princ (rtos x2w 2 50))(prompt " ")(princ (rtos y2w 2 50))(prompt " ")(princ (rtos z2w 2 50))(prompt ")") (prompt "\nID pt2 in OCS : (")(princ (rtos x2o 2 50))(prompt " ")(princ (rtos y2o 2 50))(prompt " ")(princ (rtos z2o 2 50))(prompt ")") (prompt "\n\nDistance 2D projection in UCS plane : ")(princ (rtos ducs 2 50)) (prompt "\n\nDX in UCS : ")(princ (rtos dx 2 50)) (prompt "\nDY in UCS : ")(princ (rtos dy 2 50)) (prompt "\nDZ in UCS : ")(princ (rtos dz 2 50)) (prompt "\n\nDistance 2D projection in WCS plane : ")(princ (rtos dwcs 2 50)) (prompt "\n\nDX in WCS : ")(princ (rtos dxw 2 50)) (prompt "\nDY in WCS : ")(princ (rtos dyw 2 50)) (prompt "\nDZ in WCS : ")(princ (rtos dzw 2 50)) (prompt "\n\nDistance 2D projection in OCS plane : ")(princ (rtos docs 2 50)) (prompt "\n\nDX in OCS : ")(princ (rtos dxo 2 50)) (prompt "\nDY in OCS : ")(princ (rtos dyo 2 50)) (prompt "\nDZ in OCS : ")(princ (rtos dzo 2 50)) (prompt "\n\nDistance 3D : ")(princ (ftoa d)) (prompt "\n\nAngle around Z axis from X axis as 0.0 degree reference : ")(princ (ftoa ax))(prompt " degrees") (prompt "\nAngle of picked points vector to XY plane : ")(princ (ftoa axy))(prompt " degrees") (setq stringid1 (strcat "\nID pt1 in UCS : " (rtos x1 2 50) "," (rtos y1 2 50) "," (rtos z1 2 50))) (setq stringid1w (strcat "\nID pt1 in WCS : " (rtos x1w 2 50) "," (rtos y1w 2 50) "," (rtos z1w 2 50))) (setq stringid1o (strcat "\nID pt1 in OCS : " (rtos x1o 2 50) "," (rtos y1o 2 50) "," (rtos z1o 2 50))) (setq stringid2 (strcat "\n\nID pt2 in UCS : " (rtos x2 2 50) "," (rtos y2 2 50) "," (rtos z2 2 50))) (setq stringid2w (strcat "\nID pt2 in WCS : " (rtos x2w 2 50) "," (rtos y2w 2 50) "," (rtos z2w 2 50))) (setq stringid2o (strcat "\nID pt2 in OCS : " (rtos x2o 2 50) "," (rtos y2o 2 50) "," (rtos z2o 2 50))) (setq string1 (strcat "\n\nDistance 2D projection in UCS plane : " (rtos ducs 2 50))) (setq string2 (strcat "\n\nDX in UCS : " (rtos dx 2 50))) (setq string3 (strcat "\nDY in UCS : " (rtos dy 2 50))) (setq string4 (strcat "\nDZ in UCS : " (rtos dz 2 50))) (setq string5 (strcat "\n\nDistance 2D projection in WCS plane : " (rtos dwcs 2 50))) (setq string6 (strcat "\n\nDX in WCS : " (rtos dxw 2 50))) (setq string7 (strcat "\nDY in WCS : " (rtos dyw 2 50))) (setq string8 (strcat "\nDZ in WCS : " (rtos dzw 2 50))) (setq string9 (strcat "\n\nDistance 2D projection in OCS plane : " (rtos docs 2 50))) (setq string10 (strcat "\n\nDX in OCS : " (rtos dxo 2 50))) (setq string11 (strcat "\nDY in OCS : " (rtos dyo 2 50))) (setq string12 (strcat "\nDZ in OCS : " (rtos dzo 2 50))) (setq string13 (strcat "\n\nDistance 3D : " (ftoa d))) (setq string14 (strcat "\n\nAngle around Z axis from X axis as 0.0 degree reference : " (ftoa ax) " degrees")) (setq string15 (strcat "\nAngle of picked points vector to XY plane : " (ftoa axy) " degrees")) (setq alertstring (strcat stringid1 stringid1w stringid1o stringid2 stringid2w stringid2o string1 string2 string3 string4 string5 string6 string7 string8 string9 string10 string11 string12 string13 string14 string15)) (alert alertstring) (princ) ) HTH. M.R. 1 Quote
CongVenh Posted November 19, 2023 Author Posted November 19, 2023 1 hour ago, marko_ribar said: Something like this : (defun c:dii ( / ftoa x1 y1 z1 x2 y2 z2 x1w y1w z1w x2w y2w z2w x1o y1o z1o x2o y2o z2o p1 p2 d ducs docs dwcs dx dy dz v dxw dyw dzw w dxo dyo dzo ax vprim vprimd axy ocs stringid1 stringid1w stringid1o stringid2 stringid2w stringid2o string1 string2 string3 string4 string5 string6 string7 string8 string9 string10 string11 string12 string13 string14 string15 alertstring ) (defun ftoa ( n / m a s b ) (if (numberp n) (progn (setq m (fix ((if (< n 0) - +) n 1e-8))) (setq a (abs (- n m))) (setq m (itoa m)) (setq s "") (while (and (not (equal a 0.0 1e-6)) (setq b (fix (* a 10.0)))) (setq s (strcat s (itoa b))) (setq a (- (* a 10.0) b)) ) (if (= (type n) 'int) m (if (= s "") m (if (and (= m "0") (< n 0)) (strcat "-" m "." s) (strcat m "." s) ) ) ) ) ) ) (while (not p1) (setq p1 (getpoint "\nPick or specify start point : "))) (while (not p2) (setq p2 (getpoint p1 "\nPick or specify end point : "))) (setq d (distance p1 p2)) (grdraw p1 p2 6 1) (setq dx (car (setq v (mapcar (function -) p2 p1)))) (setq dy (cadr v)) (setq ducs (sqrt (+ (* dx dx) (* dy dy)))) (setq dz (caddr v)) (setq ocs (trans (list 0.0 0.0 1.0) 1 0 t)) (setq dxo (car (mapcar (function -) (trans p2 1 ocs) (trans p1 1 ocs)))) (setq dyo (cadr (mapcar (function -) (trans p2 1 ocs) (trans p1 1 ocs)))) (setq dzo (caddr (mapcar (function -) (trans p2 1 ocs) (trans p1 1 ocs)))) (setq docs (sqrt (+ (* dxo dxo) (* dyo dyo)))) (setq dxw (car (setq w (trans v 1 0)))) (setq dyw (cadr w)) (setq dzw (caddr w)) (setq dwcs (sqrt (+ (* dxw dxw) (* dyw dyw)))) (setq ax (cvunit (atan dy dx) "radians" "degrees")) (setq vprim (list (car v) (cadr v) 0.0)) (setq vprimd (distance (list 0.0 0.0 0.0) vprim)) (setq axy (cvunit (atan (caddr v) vprimd) "radians" "degrees")) (setq x1 (car p1) y1 (cadr p1) z1 (caddr p1) ) (setq x2 (car p2) y2 (cadr p2) z2 (caddr p2) ) (setq x1w (car (trans p1 1 0)) y1w (cadr (trans p1 1 0)) z1w (caddr (trans p1 1 0)) ) (setq x2w (car (trans p2 1 0)) y2w (cadr (trans p2 1 0)) z2w (caddr (trans p2 1 0)) ) (setq x1o (car (trans p1 1 ocs)) y1o (cadr (trans p1 1 ocs)) z1o (caddr (trans p1 1 ocs)) ) (setq x2o (car (trans p2 1 ocs)) y2o (cadr (trans p2 1 ocs)) z2o (caddr (trans p2 1 ocs)) ) (prompt "\n\nID pt1 in UCS : (")(princ (rtos x1 2 50))(prompt " ")(princ (rtos y1 2 50))(prompt " ")(princ (rtos z1 2 50))(prompt ")") (prompt "\nID pt1 in WCS : (")(princ (rtos x1w 2 50))(prompt " ")(princ (rtos y1w 2 50))(prompt " ")(princ (rtos z1w 2 50))(prompt ")") (prompt "\nID pt1 in OCS : (")(princ (rtos x1o 2 50))(prompt " ")(princ (rtos y1o 2 50))(prompt " ")(princ (rtos z1o 2 50))(prompt ")") (prompt "\n\nID pt2 in UCS : (")(princ (rtos x2 2 50))(prompt " ")(princ (rtos y2 2 50))(prompt " ")(princ (rtos z2 2 50))(prompt ")") (prompt "\nID pt2 in WCS : (")(princ (rtos x2w 2 50))(prompt " ")(princ (rtos y2w 2 50))(prompt " ")(princ (rtos z2w 2 50))(prompt ")") (prompt "\nID pt2 in OCS : (")(princ (rtos x2o 2 50))(prompt " ")(princ (rtos y2o 2 50))(prompt " ")(princ (rtos z2o 2 50))(prompt ")") (prompt "\n\nDistance 2D projection in UCS plane : ")(princ (rtos ducs 2 50)) (prompt "\n\nDX in UCS : ")(princ (rtos dx 2 50)) (prompt "\nDY in UCS : ")(princ (rtos dy 2 50)) (prompt "\nDZ in UCS : ")(princ (rtos dz 2 50)) (prompt "\n\nDistance 2D projection in WCS plane : ")(princ (rtos dwcs 2 50)) (prompt "\n\nDX in WCS : ")(princ (rtos dxw 2 50)) (prompt "\nDY in WCS : ")(princ (rtos dyw 2 50)) (prompt "\nDZ in WCS : ")(princ (rtos dzw 2 50)) (prompt "\n\nDistance 2D projection in OCS plane : ")(princ (rtos docs 2 50)) (prompt "\n\nDX in OCS : ")(princ (rtos dxo 2 50)) (prompt "\nDY in OCS : ")(princ (rtos dyo 2 50)) (prompt "\nDZ in OCS : ")(princ (rtos dzo 2 50)) (prompt "\n\nDistance 3D : ")(princ (ftoa d)) (prompt "\n\nAngle around Z axis from X axis as 0.0 degree reference : ")(princ (ftoa ax))(prompt " degrees") (prompt "\nAngle of picked points vector to XY plane : ")(princ (ftoa axy))(prompt " degrees") (setq stringid1 (strcat "\nID pt1 in UCS : " (rtos x1 2 50) "," (rtos y1 2 50) "," (rtos z1 2 50))) (setq stringid1w (strcat "\nID pt1 in WCS : " (rtos x1w 2 50) "," (rtos y1w 2 50) "," (rtos z1w 2 50))) (setq stringid1o (strcat "\nID pt1 in OCS : " (rtos x1o 2 50) "," (rtos y1o 2 50) "," (rtos z1o 2 50))) (setq stringid2 (strcat "\n\nID pt2 in UCS : " (rtos x2 2 50) "," (rtos y2 2 50) "," (rtos z2 2 50))) (setq stringid2w (strcat "\nID pt2 in WCS : " (rtos x2w 2 50) "," (rtos y2w 2 50) "," (rtos z2w 2 50))) (setq stringid2o (strcat "\nID pt2 in OCS : " (rtos x2o 2 50) "," (rtos y2o 2 50) "," (rtos z2o 2 50))) (setq string1 (strcat "\n\nDistance 2D projection in UCS plane : " (rtos ducs 2 50))) (setq string2 (strcat "\n\nDX in UCS : " (rtos dx 2 50))) (setq string3 (strcat "\nDY in UCS : " (rtos dy 2 50))) (setq string4 (strcat "\nDZ in UCS : " (rtos dz 2 50))) (setq string5 (strcat "\n\nDistance 2D projection in WCS plane : " (rtos dwcs 2 50))) (setq string6 (strcat "\n\nDX in WCS : " (rtos dxw 2 50))) (setq string7 (strcat "\nDY in WCS : " (rtos dyw 2 50))) (setq string8 (strcat "\nDZ in WCS : " (rtos dzw 2 50))) (setq string9 (strcat "\n\nDistance 2D projection in OCS plane : " (rtos docs 2 50))) (setq string10 (strcat "\n\nDX in OCS : " (rtos dxo 2 50))) (setq string11 (strcat "\nDY in OCS : " (rtos dyo 2 50))) (setq string12 (strcat "\nDZ in OCS : " (rtos dzo 2 50))) (setq string13 (strcat "\n\nDistance 3D : " (ftoa d))) (setq string14 (strcat "\n\nAngle around Z axis from X axis as 0.0 degree reference : " (ftoa ax) " degrees")) (setq string15 (strcat "\nAngle of picked points vector to XY plane : " (ftoa axy) " degrees")) (setq alertstring (strcat stringid1 stringid1w stringid1o stringid2 stringid2w stringid2o string1 string2 string3 string4 string5 string6 string7 string8 string9 string10 string11 string12 string13 string14 string15)) (alert alertstring) (princ) ) HTH. M.R. Thank you very much. But the results shown above cannot be recorded on Autocad, so the effect is the same as the Dist command. Can you help me export that result to Excel or convert it into a text object on the drawing, it will be more convenient for me to process. Quote
Tsuky Posted November 19, 2023 Posted November 19, 2023 Or this can help you? (defun c:q_ang ( / px p1 p2 msg l_pt l_d p ang a_base a_dir) (initget 9) (setq px (getpoint "\nPoint at the vertex: ") p1 px p2 px msg '("p1" "\nFirst point: " "p2" "\nSecond point: ")) (foreach n (list p1 p2) (while (equal px n) (initget 9) (setq n (getpoint px (cadr msg))) (if (equal px n) (princ "\nThe point is confound at the vertex!") ) ) (set (read (car msg)) n) (setq msg (cddr msg)) ) (setq l_pt (mapcar '(lambda (x) (list (car x) (cadr x))) (list px p1 p2)) l_d (mapcar 'distance l_pt (append (cdr l_pt) (list (car l_pt)))) p (/ (apply '+ l_d) 2.0) a_base (getvar "ANGBASE") a_dir (getvar "ANGDIR") ) (if (zerop (* p (- p (cadr l_d)))) (setq ang pi) (setq ang (* (atan (sqrt (/ (* (- p (car l_d)) (- p (caddr l_d))) (* p (- p (cadr l_d)))))) 2.0)) ) (setvar "ANGBASE" 0) (setvar "ANGDIR" 0) (alert (strcat "Angle expressed in terms of active units" "\nAngle: <" (angtos ang (getvar "AUNITS") (getvar "AUPREC")) ">" "\nComplementary angle at " (angtos pi (getvar "AUNITS") 0) ": <" (angtos (- pi ang) (getvar "AUNITS") (getvar "AUPREC"))">" ) ) (print (angtos ang (getvar "AUNITS") (getvar "AUPREC"))) (setvar "ANGBASE" a_base) (setvar "ANGDIR" a_dir) (prin1) ) Quote
lrm Posted November 19, 2023 Posted November 19, 2023 Given points O, M, and N, this will calculate the angles A and B and output them as text position at point O. (defun c:angs ( / ptO ptM ptN uNM uNO A B) (setq ptO (getpoint "\nPick point O: ") ptM (getpoint "\nPick point M: ") ptN (getpoint "\nPick point N: ") uNM (unitvec (mapcar '- ptM ptN)) uNO (unitvec (mapcar '- ptO ptN)) A (acos (dot '(-1 0 0) uNO)) B (acos (dot uNM uNO)) ) (princ "\n Angle A = ") (princ (rad2deg A)) (princ "\n Angle B = ") (princ (rad2deg B)) (princ) (setq d 0.3) ; offset in y for text (setq ptA (mapcar '- ptO (list 0 d 0)) ptB (mapcar '- ptO (list 0 (* 2 d) 0)) ) (command "_text" "_non" ptA "" 0 (strcat "A = " (angtos A)) ) (command "_text" "_non" ptB "" 0 (strcat "B = " (angtos B)) ) ) ;;; Compute the dot product of 2 vectors a and b (defun dot (a b / d) (setq d (mapcar '* a b)) (setq d (+ (nth 0 d) (nth 1 d) (nth 2 d))) ) ;end of dot ; compute unit vector of v (defun unitvec (v / d) (setq d (distance '(0 0 0) v) d (mapcar '/ v (list d d d)) ) ) ;; ArcCosine - Lee Mac ;; Args: -1 <= x <= 1 (defun acos (x) (if (<= -1.0 x 1.0) (atan (sqrt (- 1.0 (* x x))) x) ) ) ;; radians to degrees (defun rad2deg (angrad / d) (setq d (/ (* angrad 180.) pi)) ) Quote
fuccaro Posted November 20, 2023 Posted November 20, 2023 My program returns the angles A and B. The results are converted to minutes, as requested in the first post. I got it wrong?! Concerning the export: do you wish to use the program on more lines, and get all the results in a single file? Or maybe the program should generate a new file (containing just two values) at each use? Quote
BIGAL Posted November 20, 2023 Posted November 20, 2023 " if the results can be exported to Excel" Yes can be done look here for "Alan Excel Library.lsp" or GETEXCEL.lsp they are both example code of functions that can be used for a solution. Quote
CongVenh Posted November 20, 2023 Author Posted November 20, 2023 3 hours ago, fuccaro said: My program returns the angles A and B. The results are converted to minutes, as requested in the first post. I got it wrong?! Concerning the export: do you wish to use the program on more lines, and get all the results in a single file? Or maybe the program should generate a new file (containing just two values) at each use? Hello Fuccaro. I only need 2 values A and B for 1 use Quote
Tsuky Posted November 20, 2023 Posted November 20, 2023 (edited) And just this? (defun C:ID-Angle ( / pt_o pt_f l_var dxf_11 ang ang_z) (initget 8) (setq pt_o (getpoint "\nFirst point: ")) (if (null pt_o) (setq pt_o (getvar "lastpoint"))) (cond (pt_o (initget 41) (setq pt_f (getpoint pt_o "\nSecond point: ")) (cond ((and pt_f (null (equal pt_f pt_o 1E-13))) (setq l_var (mapcar 'getvar '("ANGBASE" "ANGDIR")) dxf_11 (trans (mapcar '(lambda (x / ) (/ x (distance (trans pt_o 1 0) (trans pt_f 1 0)))) (mapcar '- (trans pt_f 1 0) (trans pt_o 1 0)) ) 0 1 T ) ) (if (zerop (car dxf_11)) (setq ang "infinite") (setq ang (angtos (atan (/ (cadr dxf_11) (car dxf_11))) 1 2)) ) (if (= (caddr dxf_11) 1.0) (setq ang_z "infinite") (if (zerop (caddr dxf_11)) (setq ang_z (angtos 0.0 1 2)) (setq ang_z (angtos (atan (sqrt (/ 1.0 (- (/ 1.0 (* (caddr dxf_11) (caddr dxf_11))) 1.0)))) 1 2)) ) ) (prompt (strcat "\nAngle in the XY plane = " ang " - Angle with the XY plane = " ang_z)) (alert (strcat "Angle in the XY plane = " ang " - Angle with the XY plane = " ang_z)) (mapcar 'setvar '("ANGBASE" "ANGDIR") l_var) ) (T (princ "\nThe points are confused")) ) ) ) (prin1) ) Edited November 20, 2023 by Tsuky Quote
fuccaro Posted November 20, 2023 Posted November 20, 2023 CongVenh I still can't see the problem with the lisp I posted. Can you write me what it returns my lisp for a given line, and what return do you expect? Quote
lrm Posted November 20, 2023 Posted November 20, 2023 @fuccaro Per my test, your program calculates the correct angles and outputs the results in minutes as requested (I missed the "minutes" requirement in my code). I think it should output the supplementary angle if the calculation is greater than 10800 (number of minutes in 180°). I'm wondering if the OP really wanted the angles in degrees-decimal minutes. Quote
CongVenh Posted November 21, 2023 Author Posted November 21, 2023 14 hours ago, fuccaro said: CongVenh I still can't see the problem with the lisp I posted. Can you write me what it returns my lisp for a given line, and what return do you expect? HI FUCCARO! YOU SEE THE ATTACHED DRAWING. THE RESULTS FROM AUTOCAD'S DIST COMMAND AND FROM YOUR LISP ARE DIFFERENT. I DON'T UNDERSTAND THE CAUSE DO GOC.dwg Quote
CongVenh Posted November 21, 2023 Author Posted November 21, 2023 Just now, CongVenh said: HI FUCCARO! YOU SEE THE ATTACHED DRAWING. THE RESULTS FROM AUTOCAD'S DIST COMMAND AND FROM YOUR LISP ARE DIFFERENT. I DON'T UNDERSTAND THE CAUSE DO GOC.dwg 64.56 kB · 0 downloads Quote
lrm Posted November 21, 2023 Posted November 21, 2023 @CongVenh you asked for the angle in minutes and that is what @fuccaro gave you! As I noted previously, did you really want degrees, minutes and maybe seconds? Please be more specific about what you want. For example, do you want degrees and minutes with the minutes value rounded and? seconds not included Quote
fuccaro Posted November 21, 2023 Posted November 21, 2023 Thanks, lrm! That's exactly my point. Your angle A is 17deg and 41min, or transformed in minutes only it is 1061 minutes. On 11/17/2023 at 4:27 AM, CongVenh said: I want the result of angle A and angle B (In minutes) Quote
CongVenh Posted November 21, 2023 Author Posted November 21, 2023 7 minutes ago, fuccaro said: Thanks, lrm! That's exactly my point. Your angle A is 17deg and 41min, or transformed in minutes only it is 1061 minutes. 7 minutes ago, fuccaro said: Thanks, lrm! That's exactly my point. Your angle A is 17deg and 41min, or transformed in minutes only it is 1061 minutes. Thank you very much. But that result is not suitable for my work. Continue using the dist command (°⌣°) Quote
Recommended Posts
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.