logo

한국어

칼럼

    오늘:
    73
    어제:
    85
    전체:
    336,423

두면이 이루는 각도를 계산한다.

2021.01.20 18:12

com4uinc 조회 수:59

;2013년 07월 01일
;작성자 : 박주근
;용도 : 두면이 이루는 각도를 계산한다.
(defun  get-face-to-face-angle (@EN1  @EN2  @EN3  @Z  /  &A &B &D &D_PER1 &PTEN1 &PTEN3 &PTPER1 &PTZ &X1 &X2 PTSE_EN1 PTSE_EN3 PT_EN2 PT_ORI X)
     ; (setq @EN1  (car (entsel)))
     ; (setq @EN2  (car (entsel)))
     ; (setq @EN3  (car (entsel)))
     ; (setq @Z  510.7747)

                         ; en1 과  en3가 만나는 점을 pt_ori에 저장
     (command "ucs" "")
     (setq pt_ori (inters2en  @EN1  @EN3))
     (setq pt_en2 (cadr (get_angle_by_pt_to_en   pt_ori   @EN2)))
     (command "ucs" "3p" "none" pt_en2 "none"  pt_ori "")
     (setq pt_ori (trans pt_ori 0 1))
     (setq pt_en2 (trans pt_en2 0 1))

     (setq &D  (distance pt_ori  pt_en2))
     (setq &ptZ (list 0  (* -1 @Z)))
     (setq &ptPer1 (get_Per_Point_by_3pt  (list pt_ori  &ptZ  pt_en2) nil))

     (setq ptSE_en1  (mapcar '(lambda (x) (trans x 0 1)) (get_start_end_point  @EN1)))
     (setq ptSE_en3  (mapcar '(lambda (x) (trans x 0 1)) (get_start_end_point  @EN3)))

     (setq &ptEn3    (inters  (car ptSE_en3) (cadr ptSE_en3)  pt_en2 (list (car pt_en2)  10000) nil))
     (setq &ptEn1    (inters  (car ptSE_en1) (cadr ptSE_en1)  pt_en2 (list (car pt_en2)  10000) nil))
     (setq &A        (abs (cadr &ptEn3)))
     (setq &B        (abs (cadr &ptEn1)))
     (setq &D_per1   (distance &ptPer1  pt_en2))


     (setq &X1       (atan (/ &A  &D_per1)))
     (setq &X2       (atan (/ &B  &D_per1)))
     (command "ucs" "")
     (+  &X1  &X2))

(defun c:2fa ( /  2F-ANG EN1 EN2 EN3 X$)
     (prompt "\n 이면각을 구하고자 하는 빗변을 선택하십시요")
     (setq en2 (car (entsel)))
     (prompt "\n 양쪽 평면선을 선택 하십시요")
     (setq en1 (car (entsel)))
     (setq en3 (car (entsel)))

     (if (= *Z-val* nil) (setq *Z-val* "1000"))
     (setq x$ (getstring (strcat "\n 물체의 높이 Z값을 입력 하십시요 [" *Z-val* "]:")))
     (setq *Z-val* (if (= x$ "")
            *Z-val*
            x$))
     
     (if (equal *Z-val* 0  1) (alert "입력한 Z값이 0에 가깝습니다. 다시 해 주십시요")
     (progn
          (setq 2f-ang (rtd (get-face-to-face-angle  en1  en2  en3  (atof *Z-val*))))
          (princ (strcat "이면각은 ["  (rtos 2f-ang 2 2)  "]도입니다."))))
     (princ))


(defun inters2en  (en1  en2)
     (inters (vlax-curve-getstartpoint (vlax-ename->vla-object en1))
         (vlax-curve-getendpoint (vlax-ename->vla-object en1))
         (vlax-curve-getstartpoint (vlax-ename->vla-object en2))
         (vlax-curve-getendpoint (vlax-ename->vla-object en2)) nil))

 

; 어떤 한점과 요소이름(선)을 입력하면 선의 한점중 입력한 점에서 가까운점과 반대편 점의 좌표를 추출한다.
(defun get_angle_by_pt_to_en (inpt  ename / vl_en en_p1 en_p2 result)
    ; (setq inpt j_pt)
    ; (setq ename (car el_90))
    
    (setq vl_en (vlax-ename->vla-object ename))
    (setq en_p1 (vlax-curve-getstartpoint vl_en))
    (setq en_p2 (vlax-curve-getendpoint vl_en))
    
    (if (< (distance inpt en_p1) (distance inpt en_p2))
    (setq result (list en_p1 en_p2))
    (setq result (list en_p2 en_p1)))
    result)

 

;용도 : 두점에 수직으로 만나는 좌표를 추출한다.
(defun get_Per_Point_by_3pt (@ptl  @opt /  ANG_B PTR1 PTR2)
     ; (setq @ptl '((339227.0 221364.0 0.0) (334283.0 220039.0 0.0)))
     ; (setq @ptl (append @ptl (list (list 0 0))))
     ; (setq @opt  T)

     (setq ang_B (apply 'angle (cdr (reverse  @ptl))))
     (setq ptR1  (polar (last @ptl) (+ ang_B (/ pi 2.0)) 100000))
     (setq ptR2  (polar (last @ptl) (- ang_B (/ pi 2.0)) 100000))
     
     (inters (car @ptl) (cadr @ptl)  ptR1  ptR2  @opt))


;Line,  Pline의 시작점과 끝점을 리턴한다.
(defun get_start_end_point (ien  /  IOBJNAME IVEN PTE PTS )
           ; (setq ien (car (entsel)))
   (setq iven (vlax-ename->vla-object ien))
   (setq iobjName (vla-get-objectname iven))
           ; polyline일경우와 아닌경우
   (if (= "AcDbPolyline" iobjName)
      (progn
     (setq ptS (lib_*vtxtlist  iven  1))
     (setq ptE (last ptS))
     (setq ptS (car  ptS)))
      (progn
     (setq ptS (vlax-safearray->list (vlax-variant-value (vla-get-startpoint iven))))
     (setq ptE (vlax-safearray->list (vlax-variant-value (vla-get-endpoint   iven))))))
   (list (list (car ptS) (cadr ptS) 0.0) (list (car ptE) (cadr ptE) 0.0)))

번호 제목 글쓴이 날짜 조회 수
90 G10 기능 FANUC- MCT com4uinc 2021.07.08 554
89 코드의 범위와 자료형 file com4uinc 2021.06.25 60
88 DXF CODE file com4uinc 2021.06.25 48
87 AUTOCAD 엑셀과 연동 com4uinc 2021.04.30 52
86 캐드의 시스템을 초기화 com4uinc 2021.01.20 73
85 여러 개의 라인들을 하나의 폴리라인으로 com4uinc 2021.01.20 63
84 수평 NC 선반의 좌표값을 도면에 표시 com4uinc 2021.01.20 74
83 선택한 객체의 entity정보와 object정보를 표시 com4uinc 2021.01.20 50
82 라인들을 하나의 폴리라인으로 com4uinc 2021.01.20 70
81 대각 치수 따기 com4uinc 2021.01.20 68
» 두면이 이루는 각도를 계산한다. com4uinc 2021.01.20 59
79 시계방향으로 도는지 반시계로 도는지를 계산하는 함수 com4uinc 2021.01.20 47
78 캐드 DATA를 엑셀파일로 출력하는 LISP 프로그램 com4uinc 2021.01.08 82
77 TABLE을 작성 com4uinc 2019.09.25 154
76 ARC 시작점과 끝점구하기 com4uinc 2019.09.25 134
75 2次元CAMソフトウェア『DieFA GrCAM』機能紹介②切削加工NCデータ作成例 粗取り加工作成例(切込加工) com4uinc 2017.04.05 119
74 2次元CAMソフトウェア『DieFA GrCAM』機能紹介④研削加工NCデータ作成 複数ワーク 株式会社イワシタIG-SR102向け com4uinc 2017.04.05 85
73 2次元CAMソフトウェア『Okamoto UPCAM』機能紹介②切削加工NCデータ作成例(カッターパス表示) com4uinc 2017.04.05 74
72 2次元CAMソフトウェア『Okamoto UPCAM』機能紹介⑤NCデータ加工例(オフセット加工) com4uinc 2017.04.05 80
71 2次元CAMソフトウェア『Okamoto UPCAM』機能紹介④砥石成形加工例(砥石移動) com4uinc 2017.04.05 77