;;表面粗糙度标注程序
;;执行命令：ccd

(DEFUN CCD1 ()
(setvar "cmdecho" 0)
(setvar "osmode" 512)
(setq sp (getpoint "\n请输入起点<顶点>:") )
(setvar "osmode" oldosmode)
(setq ag (getangle sp "\n请提示方向:"))
(setq txt (strcase (getstring "\n请输入表面粗糙度最大允许值:")))
(setq ag0 ag)
(setq ag (angtos ag 0 8))
(setq h (* 1.4 3.5))
(setq 2h (* 2 h))
(setq la (/ 2h (sin (/ pi 3))))
(setq lb (/ h (sin (/ pi 3))))
(setq lc (/ h (sin (/ pi 3))))
(if (and (> (atof ag) 90) (<= (atof ag) 120)) (progn
(setq pzp (getpoint "\n请输入外指向(右上方)位置点:"))
(setq sp1 sp)
(setq sp pzp)
(setq ag "0")
(setq ag0 0)
(setq pzp1 (list (- (car pzp) 6) (cadr pzp)))
(setq pzp2 (list (+ (car pzp) 6) (cadr pzp)))
(command "line" "non" sp1 "non" pzp1 "non" pzp2 "")
))
(if (and (> (atof ag) 270) (<= (atof ag) 300)) (progn
(setq pzp (getpoint "\n请输入外指向(左下方)位置点:"))
(setq sp1 sp)
(setq sp pzp)
(setq ag "0")
(setq ag0 0)
(setq pzp1 (list (- (car pzp) 6) (cadr pzp)))
(setq pzp2 (list (+ (car pzp) 6) (cadr pzp)))
(command "line" "non" sp1 "non" pzp2 "non" pzp1 "")
))
(setq ag1 (+ (atof ag) 60))
(setq ag2 (+ (atof ag) 120))
(command "line" "non" sp "non" (strcat "@" (rtos la 2 8) "<" (rtos ag1 2 8)) "")
(command "line" "non" sp "non" (strcat "@" (rtos lb 2 8) "<" (rtos ag2 2 8)) (strcat "@" (rtos lc 2 8) "<" ag) "")
(setq ep (cdr (assoc '11 (entget (entlast)))))
(setq tp1 (polar ep (+ ag0 (/ pi 2)) 4.2))
(setq tp (polar ep (+ ag0 (/ pi 2)) 0.7))
(if (= 1 (strlen txt))
(CCD0))
(if (/= 1 (strlen txt)) (progn
(if (and (>= (atof ag) 0) (<= (atof ag) 90))
(command "text" "r" "non" tp "3.5" ag txt ))
(if (and (> (atof ag) 120) (<= (atof ag) 180))
(command "text" "non" tp1 "3.5" (rtos (+ (atof ag) 180) 2 8) txt ))
(if (and (> (atof ag) 180) (<= (atof ag) 270))
(command "text" "non" tp1 "3.5" (rtos (+ (atof ag) 180) 2 8) txt ))
(if (and (> (atof ag) 300) (< (atof ag) 360))
(command "text" "r" "non" tp "3.5" ag txt ))
))
)
(DEFUN CCD0 ()
(if (and (>= (atof ag) 0) (<= (atof ag) 90))
(command "text" "c" "non" (polar sp (+ ag0 (/ pi 2)) (+ h 0.7)) "3.5" ag txt ))
(if (and (> (atof ag) 120) (<= (atof ag) 180))
(command "text" "c" "non" (polar sp (+ ag0 (/ pi 2)) (+ h 4.2)) "3.5" (rtos (+ (atof ag) 180) 2 8) txt ))
(if (and (> (atof ag) 180) (<= (atof ag) 270))
(command "text" "c" "non" (polar sp (+ ag0 (/ pi 2)) (+ h 4.2)) "3.5" (rtos (+ (atof ag) 180) 2 8) txt ))
(if (and (> (atof ag) 300) (< (atof ag) 360))
(command "text" "c" "non" (polar sp (+ ag0 (/ pi 2)) (+ h 0.7)) "3.5" ag txt ))
)

(DEFUN CCD2 ()
(setvar "cmdecho" 0)
(setvar "osmode" 512)
(setq sp (getpoint "\n请输入起点<顶点>:") )
(setvar "osmode" oldosmode)
(setq ag (getangle sp "\n请提示方向:"))
(setq txt (strcase (getstring "\n请输入粗糙度最大允许值:")))
(setq ag0 ag)
(setq ag (angtos ag 0 8))
(setq h (* 1.4 3.5))
(setq 2h (* 2 h))
(setq la (/ 2h (sin (/ pi 3))))
(setq lb (/ h (sin (/ pi 3))))
(setq lc (/ h (sin (/ pi 3))))
(setq r 1.633)
(command "color" "3")
(if (and (> (atof ag) 90) (<= (atof ag) 120)) (progn
(setq pzp (getpoint "\n请输入外指向(右上方)位置点:"))
(setq sp1 sp)
(setq sp pzp)
(setq ag "0")
(setq ag0 0)
(setq pzp1 (list (- (car pzp) 6) (cadr pzp)))
(setq pzp2 (list (+ (car pzp) 6) (cadr pzp)))
(command "line" "non" sp1 "non" pzp1 "non" pzp2 "")
))
(if (and (> (atof ag) 270) (<= (atof ag) 300)) (progn
(setq pzp (getpoint "\n请输入外指向(左下方)位置点:"))
(setq sp1 sp)
(setq sp pzp)
(setq ag "0")
(setq ag0 0)
(setq pzp1 (list (- (car pzp) 6) (cadr pzp)))
(setq pzp2 (list (+ (car pzp) 6) (cadr pzp)))
(command "line" "non" sp1 "non" pzp2 "non" pzp1 "")
))
(setq ag1 (+ (atof ag) 60))
(setq ag2 (+ (atof ag) 120))
(command "line" "non" sp "non" (strcat "@" (rtos la 2 8) "<" (rtos ag1 2 8)) "")
(command "line" "non" sp "non" (strcat "@" (rtos lb 2 8) "<" (rtos ag2 2 8)) "")
(setq zp (cdr (assoc '11 (entget (entlast)))))
(setq ep (polar zp ag0 lc))
(setq cp (polar sp (+ ag0 (/ pi 2)) (- h 1.633)))
(command "circle" "non" cp "non" r)
(setq tp1 (polar ep (+ ag0 (/ pi 2)) 4.2))
(setq tp (polar ep (+ ag0 (/ pi 2)) 0.7))
(if (= 1 (strlen txt))
(CCD0))
(if (/= 1 (strlen txt)) (progn
(if (and (>= (atof ag) 0) (<= (atof ag) 90))
(command "text" "r" "non" tp "3.5" ag txt ))
(if (and (> (atof ag) 120) (<= (atof ag) 180))
(command "text" "non" tp1 "3.5" (rtos (+ (atof ag) 180) 2 8) txt ))
(if (and (> (atof ag) 180) (<= (atof ag) 270))
(command "text" "non" tp1 "3.5" (rtos (+ (atof ag) 180) 2 8) txt ))
(if (and (> (atof ag) 300) (< (atof ag) 360))
(command "text" "r" "non" tp "3.5" ag txt ))
    )
 )
)
(defun CCD3 ()
(setvar "cmdecho" 0)
(setq sp (getpoint "\n请输入起点<尖点>:"))
(setq a60 (/ PI 3))
(setq h (* 1.4 3.5))
(setq tan60 (/ (sin a60) (cos a60)))
(setq ap (list (- (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq bp (list (+ (car sp) (/ (* 2 h) tan60)) (+ (* 2 h) (cadr sp))))
(setq cp (list (+ (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq tep1 (list (car cp) (+ (+ h 0.7) (cadr sp))))
(setq tep2 (list (- (car sp) 4.25) (+ (cadr sp) 1.05)))
(setq cenp (list (car sp) (+ (cadr sp) 3.26)))
(setq qb "全部")
(setq qy "其余")
(command "color" "3")
(command "line" "non" ap "non" sp "non" bp "")
(command "line" "non" cp "non" ap "")
(setq text1 (getstring "\n请输入表面粗糙度最大允许值:"))
(command "text" "r" "non" tep1 "3.5" "0" text1 )
(command "text" "r" "non" tep2 "5" "0" qb )
(command "color" "bylayer")
)

(defun CCD4 ()
(setvar "cmdecho" 0)
(setq sp (getpoint "\n请输入起点<尖点>:"))
(setq a60 (/ PI 3))
(setq h (* 1.4 3.5))
(setq tan60 (/ (sin a60) (cos a60)))
(setq ap (list (- (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq bp (list (+ (car sp) (/ (* 2 h) tan60)) (+ (* 2 h) (cadr sp))))
(setq cp (list (+ (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq tep1 (list (car cp) (+ (+ h 0.7) (cadr sp))))
(setq tep2 (list (- (car sp) 4.25) (+ (cadr sp) 1.05)))
(setq cenp (list (car sp) (+ (cadr sp) 3.26)))
(setq qb "全部")
(setq qy "其余")
(command "line" "non" ap "non" sp "non" bp "")
(command "line" "non" cp "non" ap "")
(setq text1 (getstring "\n请输入表面粗糙度最大允许值:"))
(command "text" "r" "non" tep1 "3.5" "0" text1 )
(command "text" "r" "non" tep2 "5" "0" qy )
(command "color" "bylayer")
)

(defun CCD5 ()
(setvar "cmdecho" 0)
(setq sp (getpoint "\n请输入起点<尖点>:"))
(setq a60 (/ PI 3))
(setq h (* 1.4 3.5))
(setq tan60 (/ (sin a60) (cos a60)))
(setq ap (list (- (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq bp (list (+ (car sp) (/ (* 2 h) tan60)) (+ (* 2 h) (cadr sp))))
(setq cp (list (+ (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq tep1 (list (car cp) (+ (+ h 0.7) (cadr sp))))
(setq tep2 (list (- (car sp) 4.25) (+ (cadr sp) 1.05)))
(setq cenp (list (car sp) (+ (cadr sp) 3.26)))
(setq qb "全部")
(setq qy "其余")
(command "line" "non" ap "non" sp "non" bp "")
(command "circle" "non" cenp "1.633")
(setq text1 (getstring "\n请输入表面粗糙度最大允许值:"))
(command "text" "r" "non" tep1 "3.5" "0" text1 )
(command "text" "r" "non" tep2 "5" "0" qb )
)

(defun CCD6 ()
(setvar "cmdecho" 0)
(setq sp (getpoint "\n请输入起点<尖点>:"))
(setq a60 (/ PI 3))
(setq h (* 1.4 3.5))
(setq tan60 (/ (sin a60) (cos a60)))
(setq ap (list (- (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq bp (list (+ (car sp) (/ (* 2 h) tan60)) (+ (* 2 h) (cadr sp))))
(setq cp (list (+ (car sp) (/ h tan60)) (+ h (cadr sp))))
(setq tep1 (list (car cp) (+ (+ h 0.7) (cadr sp))))
(setq tep2 (list (- (car sp) 4.25) (+ (cadr sp) 1.05)))
(setq cenp (list (car sp) (+ (cadr sp) 3.26)))
(setq qb "全部")
(setq qy "其余")
(command "line" "non" ap "non" sp "non" bp "")
(command "circle" "non" cenp "1.633")
(setq text1 (getstring "\n请输入表面粗糙度最大允许值:"))
(command "text" "r" "non" tep1 "3.5" "0" text1 )
(command "text" "r" "non" tep2 "5" "0" qy )
)
(defun c:ccd()
  (setq oldecho (getvar "cmdecho"))
  (setvar "cmdecho" 0)
    (setq oldlayer (getvar "clayer"))
              (if (=(tblobjname "LAYER" "3") nil)
                (progn
                    (entmake (list
                              '(0 . "LAYER")
                              '(100 . "AcDbSymbolTableRecord")
                              '(100 . "AcDbLayerTableRecord")
                              '(6 . "CONTINUOUS")
                              '(62 . 3)
                              '(70 . 0)
                               (cons 2 "3")
                             )
                    )
                 )
               )
    (setvar "clayer" "3")
  (setq oldstyle (getvar "textstyle"))
  (setq oldpwid (getvar "plinewid"))
  (setvar "plinewid" 0)
  (setq oldosmode(getvar "osmode"))
  (princ "\n表面粗糙度标注程序")
  (initget "S A O B Q Y")
  (setq dimtype (getkword "\n选择粗糙度标注类型[表面加工(S)/全部加工(A)/其余加工(O)/表面非加工(B)/全部非加工(Q)/其余非加工(Y)]<表面加工>:"))
  (if (= dimtype nil)
    (setq dimtype "S")
  )
  (princ dimtype)
  (cond
   ((= dimtype "S")
      (ccd1)
   )
   ((= dimtype "A")
      (ccd3)
   )
   ((= dimtype "O")
      (ccd4)
   )
   ((= dimtype "B")
      (ccd2)
   )
   ((= dimtype "Q")
      (ccd5)
   )
   ((= dimtype "Y")
      (ccd6)
   )
  )
  (setvar "clayer" oldlayer)
  (setvar "cmdecho" oldecho)
  (setvar "textstyle" oldstyle)
  (setvar "plinewid" oldpwid)
  (princ)
)
(princ)
