Message 1 of 16
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I want full degree mints and second format (DDMMSS)
Please help me and edit my lisp I have attached.
(defun c:tabord (/ aCen cAng cCen cPl cRad cReg
fDr it lCnt lLst mSp pCen pT1
pT2 ptLst R tHt tLst vlaPl vlaTab
vLst cTxt oldCol nPl clFlg *error*)
(vl-load-com)
(defun Extract_DXF_Values(Ent Code)
(mapcar 'cdr
(vl-remove-if-not
'(lambda(a)(=(car a)Code))
(entget Ent)))
); end of
(defun *error*(msg)
(setvar "CMDECHO" 1)
(princ)
); end of *error*
(if
(and
(setq cPl(entsel "\nSelect LwPoliline > "))
(= "LWPOLYLINE"(car(Extract_DXF_Values(car cPl)0)))
); end and
(progn
(setq vlaPl(vlax-ename->vla-object(car cPl))
ptLst(mapcar 'append
(setq vLst(Extract_DXF_Values(car cPl)10))
(mapcar 'list(Extract_DXF_Values(car cPl)42)))
lLst '("START POINT" "IP-01" "IP-02" "IP-03" "IP-04" "IP-05" "IP-06" "IP-07" "IP-08" "IP-09" "IP-10" "IP-11" "IP-12""IP-13" "IP-14" "IP-15" "IP-16" "IP-17" "IP-18" "IP-19" "IP-20" "IP-21" "IP-22" "IP-23" "IP-24" "IP-25" "IP-26" "IP-27" "IP-28" "IP-29" "IP-30" "IP-31" "IP-32" "IP-33" "IP-34" "IP-35" "IP-36" "IP-37" "IP-38" "IP-39" "IP-40" "IP-41" "IP-42" "IP-43" "IP-44" "IP-45" "IP-46" "IP-47" "IP-48" "IP-49" "IP-50" "IP-51" "IP-52" "IP-53" "IP-54" "IP-55" "IP-56" "IP-57" "IP-58" "IP-59" "IP-60" "IP-61" "IP-62" "IP-63" "IP-64" "IP-65" "IP-66" "IP-67" "IP-68" "IP-69" "IP-70" "IP-71" "IP-72" "IP-73" "IP-74" "IP-75" "IP-76" "IP-77" "IP-78" "IP-79" "IP-80" "IP-81" "IP-82" "IP-83" "IP-84" "IP-85" "IP-86" "IP-87" "IP-88" "IP-89" "IP-90" "IP-91" "IP-92" "IP-93" "IP-94" "IP-95" "IP-96" "IP-97" "IP-98" "IP-99" "IP-100" "IP-101" "IP-102" "IP-103" "IP-104" "IP-105" "IP-106" "IP-107" "IP-108" "IP-109" "IP-110")
r 2 lCnt 0
;tLst '((1 0 "Point")(1 1 "EASTING")(1 2 "NORTHING")(1 3 "Radius"))
tLst '((1 0 "Point")(1 1 "EASTING")(1 2 "NORTHING")(1 3 "Radius")(1 4 "Distance")(1 5 "Bend"))
mSp(vla-get-ModelSpace
(vla-get-ActiveDocument
(vlax-get-acad-object)))
tHt(getvar "TEXTSIZE")
); end setq
(setvar "CMDECHO" 0)
(setq prVert nil)
(setq prAng nil)
(setq ct 0)
(foreach vert ptLst
(setq vert(trans vert 0 1))
;;; (if prVert
;;; (progn
;;; (setq vDist (rtos (distance prVert vert) 2 4))
;;;;;; (setq tAng (cvunit (angle prVert vert) "radian" "degree"))
;;;;;; (setq vAng (rtos tAng 2 0))
;;;;;; (if prAng
;;;;;; (progn
;;;;;; (if (> tAng prAng)
;;;;;; (progn
;;;;;; (setq vAng (- tAng prAng))
;;;;;; (if (> vAng 180.0)
;;;;;; (setq vAng (- vAng 180.0))
;;;;;; )
;;;;;; (if (> vAng 90.0)
;;;;;; (setq vAng (- vAng 90.0))
;;;;;; )
;;;;;; (setq vAng (rtos vAng 2 0))
;;;;;; (setq vAng (strcat "LT " vAng "%%d"))
;;;;;; )
;;;;;; (progn
;;;;;; (setq vAng (- prAng tAng))
;;;;;; (if (> vAng 180.0)
;;;;;; (setq vAng (- vAng 180.0))
;;;;;; )
;;;;;; (if (> vAng 90.0)
;;;;;; (setq vAng (- vAng 90.0))
;;;;;; )
;;;;;; (setq vAng (rtos vAng 2 0))
;;;;;; (setq vAng (strcat "RT " vAng "%%d"))
;;;;;; )
;;;;;; )
;;;;;; )
;;;;;; )
;;; )
;;; (progn
;;; (setq vDist "0.0")
;;; (setq vAng "-")
;;; )
;;; )
;;; (setq prAng tAng)
(if (/= ct 0)
(if (/= ct (- (length ptLst) 1 ))
(progn
(setq p1 (nth (- ct 1) ptLst))
(setq p3 (nth (+ ct 1) ptLst))
(setq vDist (rtos (distance p1 vert) 2 4))
;;EXCEL LOGIC START
;;; (setq dx (- (car vert) (car p1)))
;;; (setq dy (- (car (cdr vert)) (car (cdr p1))))
;;; (setq ang1 (cvunit (angle p1 vert) "radian" "degree"))
;;; (if (> ang1 180.0000001)
;;; (setq ang1 (- ang1 360))
;;; )
;;; (setq ang1 (calculateAngle dx dy ang1))
;;;
;;; (setq dx (- (car p3) (car vert)))
;;; (setq dy (- (car (cdr p3)) (car (cdr vert))))
;;; (setq ang2 (cvunit (angle vert p3) "radian" "degree"))
;;; (if (> ang2 180.000001)
;;; (setq ang2 (- ang2 360))
;;; )
;;; (setq ang2 (calculateAngle dx dy ang2))
;;;
;;; (if (< (- ang2 ang1) 180.0000001)
;;; (setq vang (+ (- ang2 ang1) 180))
;;; (IF (> (- ang2 ang1) 180.0000001)
;;; (setq vang (- (- ang2 ang1) 180))
;;; )
;;; )
;;;
;;; (if (< vang 180.0000001)
;;; (progn
;;; (if (> vang 90.0000001)
;;; (setq vang (strcat "LT" (rtos (abs (- 180 vang)) 2 0)))
;;; (if (< vang 0.0)
;;; (progn
;;; (setq vang (abs (+ 360 vang)))
;;; (if (> vang 180.0000001)
;;; (setq vang (- vang 180.0))
;;; )
;;; (if (> vang 90.0000001)
;;; (setq vang (- 180 vang))
;;; )
;;; (setq vang (strcat "LT" (rtos vang 2 0)))
;;; )
;;; (setq vang (strcat "LT" (rtos (abs vang) 2 0)))
;;; )
;;; )
;;; )
;;; (progn
;;; (if (> vang 90.0000001)
;;; (setq vang (strcat "RT" (rtos (ABS (- 180 vang)) 2 0)))
;;; (setq vang (strcat "RT" (rtos (ABS (- vang 180)) 2 0)))
;;; )
;;; )
;;; )
;;EXCEL LOGIC END
(setq ang1 (cvunit (angle p1 vert) "radian" "degree"))
;;;
(setq ang2 (cvunit (angle vert p3) "radian" "degree"))
(IF (= ang1 0.00)
(if (> ang2 180.000001)
(setq ang1 360.0)
)
(if (= ang2 0.00)
(if (> ang1 180.00001)
(setq ang2 360.00)
)
)
)
;;; (IF (= ang2 360)
;;; (setq ang2 0.0)
;;; )
(if (> ang2 ang1)
(progn
(if (> ang1 270.0000001)
(setq ang1 (- ang1 360))
)
(if (> ang2 270.00000001)
(setq ang2 (- ang2 360))
)
(setq vAng (abs (- ang2 ang1)))
(if (>= vAng 270.00000001)
(setq vAng (abs (- vAng 360.0)))
)
(if (>= vAng 180.000000001)
(setq vAng (- vAng 180.0))
)
(if (> vAng 90.000001)
(setq vAng (- vAng 90.0))
)
(setq vAng (rtos vAng 2 0))
(setq vAng (strcat "LT " vAng "%%d"))
)
(progn
(if (> ang1 270.0000000001)
(setq ang1 (- ang1 360))
)
(if (> ang2 270.00000001)
(setq ang2 (- ang2 360))
)
(setq vAng (abs(- ang1 ang2)))
(if (>= vAng 270.000000001)
(setq vAng (abs (- vAng 360.0)))
)
(if (>= vAng 180.0000000001)
(setq vAng (- vAng 180.0))
)
(if (> vAng 90.000001)
(setq vAng (- vAng 90.0))
)
(setq vAng (rtos vAng 2 0))
(setq vAng (strcat "RT " vAng "%%d"))
)
)
)
(progn
(setq p1 (nth (- ct 1) ptLst))
(setq vDist (rtos (distance p1 vert) 2 4))
(setq vAng "-")
)
)
(progn
(setq vDist "0.000")
(setq vAng "-")
)
)
(setq tLst(append tLst
(list(list r 0 (nth lCnt lLst))
(list r 1(rtos(car vert)2 4))
(list r 2(rtos(cadr vert)2 4))
(list r 3 "")
(list r 4 vDist)
(list r 5 vAng))))
(if(and
(/= 0.0(last vert))
(setq pt1(vlax-curve-GetPointAtParam vlaPl lCnt))
(setq pt2(vlax-curve-GetPointAtParam vlaPl(1+ lCnt)))
); end and
(setq r(1+ r)
cRad(abs(/(distance pt1 pt2)
2(sin(/(* 4(atan(abs(last vert))))2))))
aCen(vlax-curve-GetPointAtParam vlaPl(+ 0.5 lCnt))
fDr(vlax-curve-getFirstDeriv vlaPl
(vlax-curve-getParamAtPoint vlaPl aCen))
pCen(trans
(polar aCen(-(if(minusp(last vert)) pi(* 2 pi))
(atan(/(car fDr)(cadr fDr))))cRad)0 1)
tLst(append tLst(list
(list r 0 "center")
(list r 1(rtos(car pCen)2 4))
(list r 2(rtos(cadr pCen)2 4))
(list r 3(rtos cRad 2 4))))
); end setq
); end if
(setq r(1+ r) lCnt(1+ lCnt))
(setq prVert vert)
(setq ct (1+ ct))
); end foreach
;;; (setq vlaTab(vla-AddTable mSp (vlax-3D-point '(0 0 0))
;;; (+ 1(/(length tLst)4)) 4 (* 3 tHt)(* 18 tHt)))
(setq vlaTab(vla-AddTable mSp (vlax-3D-point '(0 0 0))
(+ 1(/(length tLst)6)) 6 (* 3 tHt)(* 18 tHt)))
(foreach i tLst
(vl-catch-all-apply 'vla-SetText(cons vlaTab i))
(vla-SetCellTextHeight vlaTab(car i)(cadr i)tHt)
(vla-SetCellAlignment vlaTab(car i)(cadr i)acMiddleCenter)
); end foreach
(vla-DeleteRows vlaTab 0 1)
(princ "\n<<< Place Table >>> ")
(command "_.copybase" (trans '(0 0 0)0 1)(entlast) "")
(command "_.erase" (entlast) "")
(command "_.pasteclip" pause)
(if(= :vlax-true(vla-get-Closed vlaPl))
(progn
(setq nPl(vla-Copy vlaPl))
(command "_.region" (entlast) "")
(setq cCen(vlax-get(setq cReg
(vlax-ename->vla-object(entlast)))'Centroid))
(vla-Delete cReg)
(setq clFlg T)
); end progn
); end if
(setq lCnt 0)
(foreach v vLst
(if clFlg
(setq cAng(angle cCen(trans v 0 1))
iPt(polar v cAng (* 2 tHt)))
(progn
(setq fDr(vlax-curve-getFirstDeriv vlaPl (vlax-curve-getParamAtPoint vlaPl v)))
(if (or (= (car fDr) 0) (= (cadr fDr) 0))
(setq iPt(trans (polar v (- (* 2 pi) (atan (* 5 tHt))) (* 2 tHt))0 1))
(setq iPt(trans (polar v (- (* 2 pi) (atan (/ (car fDr) (cadr fDr)))) (* 2 tHt))0 1))
)
); end Progn
); end if
(setq cTxt(vla-AddText mSp(nth lCnt lLst)
(vlax-3d-point iPt) tHt)
lCnt(1+ lCnt)
); end setq
(setq oldCol(getvar "CECOLOR"))
(setvar "CECOLOR" "1")
(command "_.circle" v (/ tHt 3))
(setvar "CECOLOR" oldCol)
); end foreach
(setvar "CMDECHO" 1)
); end progn
(princ "\n<!> It isn't LwPolyline! Quit. <!> ")
); end if
(princ)
); end of c:tabord
(defun calculateAngle (dx dy ang)
(setq retVal 0)
(If (and (< dx 0) (>= dy 0))
(setq retVal (- ang 450))
(if (and (>= dx 0) (>= dy 0))
(setq retVal (- ang 90))
(if (and (< dx 0) (< dy 0))
(setq retVal (- ang 90))
(if (and (>= dx 0) (< dy 0))
(setq retVal (- ang 90))
)
)
)
)
(abs retVal)
)); end of c:TABORD
Solved! Go to Solution.