工具箱相关
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2002.LSP 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. ;;;;;;;;;;;;;;;;;;;;;;;;获得线的节点表;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;{get-line-list 实体名(Type:"LWPOLYLINE" OR "POLYLINE")};
  3. ;;返回3D line-list ,line-elev ,ames-plnclose=1 close
  4. (defun get-line-list (line-en-name / line-name-list line-type)
  5. (setq ames-plnclose 0)
  6. (setq line-name-list (entget line-en-name))
  7. (setq line-type (cdr (assoc 0 line-name-list)))
  8. (cond
  9. ((= line-type "LWPOLYLINE") (get-lwpl-List line-en-name))
  10. ((= line-type "POLYLINE") (get-pl-List line-en-name))
  11. (T (prompt "\n此实体不是多义线!") (setq line-list nil) (setq line-elev nil) (EXIT))
  12. );endcond
  13. );end get-line-list
  14. ;获得LWPOLYLINE线节点表
  15. (defun get-lwpl-List(line-en-name / line-name-list list-length
  16. pt1 p10 ptx pty pt I m kk D70 )
  17. (setq line-name-list (entget line-en-name))
  18. (setq list-length (length line-name-list))
  19. (setq line-list nil)
  20. (setq line-elev (cdr (assoc 38 line-name-list)))
  21. (setq d70 (cdr (assoc 70 line-name-list)))
  22. (setq I 0 m 0)
  23. (while (< m 20)
  24. (progn
  25. (setq kk (car (nth m line-name-list)))
  26. (if (= kk 10)
  27. (progn
  28. (setq i m)
  29. (setq m 21)
  30. ))
  31. (setq m (+ 1 m))
  32. ))
  33. (while (< i list-length)
  34. (progn
  35. (setq pt1 (nth i line-name-list))
  36. (setq p10 (nth 0 pt1))
  37. (if (= p10 10)
  38. (progn
  39. (setq ptx (nth 1 pt1))
  40. (setq pty (nth 2 pt1))
  41. (setq pt (list ptx pty line-elev))
  42. (setq line-list (cons pt line-list))
  43. ))
  44. (setq i (+ 4 i))
  45. ))
  46. (IF (OR (= D70 1) (= D70 9) (= D70 129))
  47. (PROGN
  48. (SETQ line-list (CONS (LAST line-list) line-list))
  49. (setq ames-plnclose 1)
  50. ))
  51. (setq line-list (reverse line-list))
  52. );end get-lwpl-List
  53. ;获得POLYLINE线节点表
  54. (defun get-pl-List (line-en-name / line-name-list list-length vertex-name vertex-prop
  55. vertex-list ptx pty ptz pt D70 )
  56. (setq line-list nil)
  57. (setq vertex-list (entget line-en-name))
  58. (setq d70 (cdr (assoc 70 vertex-list)))
  59. (setq vertex-name (entnext line-en-name))
  60. (setq vertex-list (entget vertex-name))
  61. (setq line-elev (nth 3 (assoc 10 vertex-list)))
  62. (setq vertex-prop (cdr (assoc 0 vertex-list)))
  63. (while (/= vertex-prop "SEQEND")
  64. (setq pt (cdr (assoc 10 vertex-list)))
  65. (if (/= pt nil)
  66. (progn
  67. (setq ptx (nth 0 pt))
  68. (setq pty (nth 1 pt))
  69. (setq ptz (nth 2 pt))
  70. (setq pt (list ptx pty ptz))
  71. (setq line-list (cons pt line-list))
  72. );endprogn
  73. );endif
  74. (setq vertex-name (entnext vertex-name))
  75. (setq vertex-list (entget vertex-name))
  76. (setq vertex-prop (cdr (assoc 0 vertex-list)))
  77. );endwhile
  78. (IF (OR (= D70 1) (= D70 9) (= D70 129))
  79. (PROGN
  80. (SETQ line-list (CONS (LAST line-list) line-list))
  81. (setq ames-plnclose 1)
  82. ))
  83. (setq line-list (reverse line-list))
  84. );end get-pl-List
  85. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  86. (defun c:gw()
  87. (command "layer" "make" "gw" "" "")
  88. (setq dxy 100)
  89. (setq minx 999999999 miny 999999999 maxx -999999999 maxy -999999999)
  90. (setq zjtk (entsel " 输入图框:"))
  91. (if (/= zjtk nil)
  92. (progn
  93. (setq zjtked (car zjtk))
  94. (setq lt (get-line-list zjtked))
  95. (setq Lit (length lt))
  96. (setq n 0)
  97. ;;;;;;;GET TKFW
  98. (while (< n lit)
  99. (setq xy (nth n lt))
  100. (setq x (nth 0 xy))
  101. (setq y (nth 1 xy))
  102. (setq minx (min minx x))
  103. (setq miny (min miny y))
  104. (setq maxx (max maxx x))
  105. (setq maxy (max maxy y))
  106. (setq n (+ 1 n))
  107. )
  108. ;;;;;;;;;;;GET TKFW
  109. (setq x (- maxx minx))
  110. (setq y (- maxy miny))
  111. (setq xL (fix (/ x dxy)))
  112. (setq yL (fix (/ y dxy)))
  113. (setq i 1)
  114. (while (< i xL)
  115. (setq j 1)
  116. (while (< j yL)
  117. (setq x (+ minx (* i dxy)))
  118. (setq y (+ miny (* j dxy)))
  119. (setq pt1 (list minx y))
  120. (setq pt2 (list maxx y))
  121. (command "pline" pt1 pt2 "")
  122. (setq pt1 (list x miny))
  123. (setq pt2 (list x maxy))
  124. (command "pline" pt1 pt2 "")
  125. ;(command "text" pt1 5 0 "0")
  126. (setq j (+ j 1))
  127. )
  128. (setq i (+ i 1))
  129. )
  130. ))
  131. )
  132. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  133. (setq mypi 3.1415926)
  134. (defun dtor(d)
  135. (setq r_d (* (/ d 180) mypi))
  136. )
  137. (defun rtod(r)
  138. (setq d_d (* (/ r mypi) 180))
  139. )
  140. ;;;;;;;;;;;;;;;
  141. ;;;;;;;;在表 lt 中与点 pt 最进的点ptm
  142. (defun p-lt-min(pt lt / i pti mins n dis)
  143. (setq mins 9999.0)
  144. (if (and (/= lt nil) (/= pt nil))
  145. (progn
  146. (setq n (length lt))
  147. (setq i 0)
  148. (repeat n
  149. (setq pti (nth i lt))
  150. (if (/= pti nil)
  151. (progn
  152. (setq dis (distance pt pti))
  153. (if (< dis mins)
  154. (progn
  155. (setq mins dis)
  156. (setq ptm pti)
  157. ))
  158. ));if pti
  159. (setq i (+ 1 i))
  160. );repeat
  161. ));if and
  162. )
  163. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  164. (defun c:zj()
  165. (setvar "aunits" 0)
  166. (setvar "luprec" 0)
  167. ;(SETQ sty nil)
  168. (while (= sty nil)
  169. (command "style" "standard" "rs,hztxt" "0" "0.75" "0" "n" "n" "n""")
  170. (setq sty 12345678)
  171. )
  172. (command "layer" "m" "8121" "c" "32""""")
  173. ;(SETQ BILI nil)
  174. (while (= BILI nil)
  175. (setq BILI (getint "Input scale parameter:"))
  176. )
  177. (setq e (entsel "选择曲线:"))
  178. (setq en (car e))
  179. (setq lt (get-line-list en))
  180. (setq ed (entget en))
  181. (setq pt (nth 0 lt))
  182. (setq qxz (caddr pt))
  183. (setq qxz (rtos qxz))
  184. (setq pkpt (cadr e))
  185. (p-lt-min pkpt lt)
  186. (setq pkpt ptm)
  187. (setq ang (getangle pkpt "\n给定注记方向 :"))
  188. (if (/= ang nil)
  189. (progn
  190. (setq ang (- (/ (* ang 180) 3.1415926) 90))
  191. (command "text" "j" "mc" pkpt (* 0.002 bili) ang qxz)
  192. ;;;;;;;;;;;;;;;;;
  193. ;;;;;;;;;;;;;;;;;
  194. )
  195. )
  196. (setvar "luprec" 6)
  197. )
  198. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  199. (PRINC "\nLoaded!")
  200. (PRINC "\n <command: zj>")