;;;***************************************
;;;*************作者:zjierr***************
;;;************************2008.9.22******
;;;***************************************



;;;度转弧度
(defun d2r (d)
  (* d (/ pi 180))
)
;;;弧度转度
(defun r2d (r)
  (* r (/ 180 pi))
)
;;;此函数为文字标注
(defun mtext (inspt height recw alsty ang txt)
  (entmake (list '(0 . "MTEXT")
		 '(100 . "AcDbEntity")
		 '(100 . "AcDbMText")
		 (cons 10 inspt)
		 (cons 40 height)
		 (cons 41 recw)
		 (cons 71 alsty)
		 (cons 50 0)
		 '(72 . 5)
		 (cons 1 txt)
	   )
  )
)


(defun c:bz (/ p1 p2 p3 gai pp n var p4 side n1 wz wzdata l os_1 os_2)
  (setvar "cmdecho" 0)
  (initget "Y N")
  (setq gai (getkword "\n要初始化数据吗？[是(Y)/否(N)] <N>"))
  (if (= gai "Y")
    (setq long nil)
  )
  (setq p1 (getpoint "\n标注顶点:"))
  (while p1
    (progn
      (setq p2 (getpoint p1 "\n标注转折点:"))
      (if p2
	(progn
	  (setq os_2 (getvar "OSMODE"))
	  (setvar "OSMODE" 0)
	  (command "line" p1 p2 "")
	  (setvar "OSMODE" os_2)
	  (if long
	    (progn
	      (setq pp (getpoint "\n请输入一点以确定标注线的方向<右>:"))
	      (if (= pp nil)

		(setq pp (polar p2 0 1))
	      )

	      (if (and (> (r2d (angle p2 pp)) 90)
		       (< (r2d (angle p2 pp)) 270)
		  )
		(progn
		  (setq side (d2r 180))
		  (setq dzfx 3)
		  (setq p4 (polar p2 2.00713 long))
		)
		(progn
		  (setq side 0)
		  (setq dzfx 1)
		  (setq p4 (polar p2 1.13446 long))
		)
	      )


	    )
	    (progn
	      (setq var (getvar "ORTHOMODE"))
	      (setvar "ORTHOMODE" 1)
	      (setq p3 (getpoint p2 "\n标注端点:"))
	      (setvar "ORTHOMODE" var)
	      (setq long (distance p2 p3))
	      (setq h (* 0.7 long))
              (setq long (* long 1.2))
	      (if (= (angle p2 p3) 0)
		(progn
		  (setq side 0)
		  (setq dzfx 1)
		  (setq p4 (polar p2 1.13446 long))
		)
		(progn
		  (setq side (d2r 180))
		  (setq dzfx 3)
		  (setq p4 (polar p2 2.00713 long))
		)
	      )
	      (setq jju (abs (- (car p4) (car p2))))
	    )
	  )
	  (if n
	    (progn
	      (setq n1 (+ n 1))
	      (setq n (getint (strcat "\n标注数字<" (itoa n1) ">:")))
	      (if (= n nil)
		(setq n n1)
	      )
	    )
	    (progn
	      (setq n (getint "\n标注数字<1>:"))
	      (if (= n nil)
		(setq n 1)
	      )
	    )
	  )
	  (mtext
	    p4
	    h
	    0
	    dzfx
	    0
	    (strcat "{\\fSimSun|b0|i0|c134|p2;" (itoa n) "}")
	  )
	  (setq wz (entlast))
	  (setq wzdata (entget wz))
	  (setq l (cdr (assoc 42 wzdata)))
	  (setq p3 (polar p2 side (+ (* jju 2) l)))
	  (setq os_1 (getvar "OSMODE"))
	  (setvar "OSMODE" 0)
	  (command "line" p2 p3 "")
	  (setvar "OSMODE" os_1)
	)
      )
      (setq p1 (getpoint "\n标注顶点:"))
    )
  )
)
(prompt
  "\n********新增命令:bz 文字标注********"
)
(prin1)