另一种DIESEL方法,但不那么精确,需要四舍五入0.01
- (defun hp:deg->dms (x) ;hanhphuc
- (strcat (if (minusp x) "-" "")(itoa (fix (setq x (abs (atof (rtos x 2 5))))))
- (menucmd (strcat "M=$(edtime,"
- (rtos (/ (* (+ x 1e-8) 3600.) 86400.) 2 15)
- ",° MM' SS)" )
- )
- """
- )
- )
- (hp:deg->dms 30.50833333)
- ;"30°30'30""
- (hp:deg->dms -36.87)
- ;"-36°52'12""
- (hp:deg->dms (cvunit (atan 3 4) "radians" "degrees"))
- ;"36° 52' 11"
测试 - (defun c:BD2P ( / p1 p2 sudut jarak )
- (ai_sysvar (mapcar 'cons '( "ANGBASE" "ANGDIR" "OSMODE" "DIMZIN") (list (/ pi 2.) 1 9 0)))
- (and (setq p1 (getpoint "\nPilih titik 1 : "))
- (setq p2 (getpoint p1 "\nPilih titik 2 : "))
- (setq sudut (angle p1 p2))
- (mapcar '(lambda (x) (set x (mapcar '+ '(0. 0.) (trans (eval x) 1 0)))) '(p1 p2))
- (setq jarak (distance p1 p2))
- (entmake
- (list '(0 . "MTEXT")
- '(100 . "AcDbEntity")
- '(100 . "AcDbMText")
- '(8 . "BDIST")
- (cons 1 (strcat (hp:deg->dms (distof (angtos sudut 0 16))) "\\P" (rtos jarak 2 3)))
- (cons 10 (mapcar '(lambda (a b) (/ (+ a b) 2.)) p1 p2))
- (cons 40 (* jarak 0.025))
- (cons 50 (angle p1 p2))
- '(71 . 5)
- '(72 . 5)
- )
- )
- )
- (ai_sysvar nil)
- (princ)
- )
|