乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 83|回复: 2

[编程交流] 将块放置在u线的起点

[复制链接]

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 20:50:13 | 显示全部楼层 |阅读模式
大家好,
 
我已经修改了Dave Corrall的lisp,以根据我们的要求创建链测长度。我想知道如何在直线的垂直起点添加“Chainage\u Tick”。
 
有人能帮忙吗?
 
 
  1. ;draw chainages
  2. ;by Dave Corrall   12-Nov-2001
  3. ;degrees>radians
  4. (defun dtr (a)
  5. (* pi (/ a 180.0))
  6. )
  7. ;radians>degrees
  8. (defun rtd (a)
  9. (* 180.0(/ a pi))
  10. )
  11. (defun intro ()
  12. (setq dialog-state 999)
  13. (setq dialog_pos (list -1 -1))
  14. (setq dcl_id (load_dialog "intro.dcl"))
  15. (princ "\nDialog Box:")
  16. (while (< 2 dialog-state)
  17.    (new_dialog "intro" dcl_id "" dialog_pos)
  18.    (set_tile "lname" "Chainages on Polyline")
  19.    (setq x (dimx_tile "DC")
  20.   y (dimy_tile "DC"))
  21.    (fill_image 0 0 x y -15)
  22.    (start_image "DC")
  23.    (slide_image 0 0 x y "dc_logo")
  24.    (end_image)
  25.    (action_tile "accept" "(done_dialog 1)")
  26.    (action_tile "cancel" "(quit_routine)")
  27.    (action_tile "about" "(setq userclick1 t)(open_about)")
  28.    (setq dialog-state (start_dialog))
  29.    (if (= dialog-state 1)
  30.      (princ)
  31. ;      (princ "\nDialog Box: ")
  32.      )
  33.    )
  34. (unload_dialog dcl_id)
  35. ;  (princ "\nDialog Box: ")
  36. )
  37. ; tell about routine
  38. (defun open_about ()
  39. ;  (done_dialog)
  40. (startapp "notepad.exe" "chains.txt")
  41. ;  (setq userclick1 nil)
  42. )
  43. (defun quit_routine ()
  44. (setq qr "Q")
  45. )
  46. (defun chainage ()
  47. (setq oreq(getvar"attreq")odia(getvar"attdia"))
  48. (setq oldlayer(getvar "clayer"))
  49. (setvar "attreq" 1)
  50. (setvar "attdia" 0)
  51. (setvar "osmode" 1024)
  52. (command "ucs" "")
  53. (setq r 0.0)
  54. (setq seg 0.0)
  55. (if (= (tblsearch "LAYER" "CCC_LAYOUT_Chainages") nil)
  56.      (command "layer" "m" "CCC_LAYOUT_Chainages" "c" "7" "" "")
  57.      (command "layer" "s" "CCC_LAYOUT_Chainages" "")
  58.    )
  59. (setq step(getreal "\nSet interval to display Chainage text: ")
  60. svprefix "Ch"
  61. svsuffix "m"
  62. scale "1"
  63. svval 0)
  64. (setq nam (car (entsel "\nSelect Polyline: ")))
  65. (command "_change" nam ""  "p" "Layer" "CCC_LAYOUT_Chainages" "color" "Bylayer" "")
  66. (setq ent (entget nam))
  67. (command "_.insert" "Chainage_Tick" nil)
  68. (command "measure" nam "b" "Chainage_Tick" "y" "10" "")
  69. (if (not (equal (cdr (assoc 0 ent)) "LWPOLYLINE"))
  70.      (prompt "\nEntity not a polyline...")
  71.      (progn
  72. (setq nv (cdr(assoc 90 ent)))
  73. (setq ent1 (member(assoc 10 ent)ent))
  74.   (setq ent2(cdr ent1))
  75.   (setq ent2(member(assoc 10 ent2)ent2))
  76. (while (/= ent2 nil)
  77.   (if (/= ent2 nil)
  78.                   (progn
  79. ;  IF THE VERTEX PRECEDES A STRAIGHT LINE
  80.                      (if (equal (cdr (assoc 42 ent1)) 0.0)
  81.                      (progn
  82.                         (setq v1(cdr(assoc 10 ent1))
  83.                        v2(cdr(assoc 10 ent2))
  84.                        a(angle v1 v2)
  85.                        d(distance v1 v2)
  86.                        p1(polar v1 a (- step r))
  87.                        d1(distance p1 v2)
  88.                        )
  89.                 (if(< seg 1)
  90.                   (progn
  91.                 (setq value(strcat svprefix (rtos svval 2 0) svsuffix ))
  92.                 (command "-insert" "Chainage_Text" v1 scale scale (rtd a) value)
  93.                 )
  94.                   )
  95.                 (if(<(+ d r) step)
  96.                   (progn
  97.                     (setq r (+ d r))
  98.                     )
  99.                   (progn
  100.                     (setq num(1+(fix(/ d1 step))))
  101.                     (setq cnt 0)
  102.                     (repeat num
  103.                       (progn
  104.                         (setq pt(polar p1 a (* cnt step)))
  105.                         (setq svval(+ svval step)
  106.                               value(strcat svprefix (rtos svval 2 0) svsuffix ))
  107.                         (command "-insert" "Chainage_Text" pt scale scale (rtd a) value)
  108.                         (setq cnt (1+ cnt))
  109.                         )
  110.                       )
  111.                     (setq r(rem d1 step))
  112.                     )
  113.                   )
  114. ; set new values for variables                       
  115.                 (setq ent1 ent2)
  116.                 (setq ent2(cdr ent2))
  117.                 (setq ent2(member(assoc 10 ent2)ent2))
  118.                 (setq seg(1+ seg))
  119.                 );end progn for straight section
  120. ;if the vertex preceds an arc
  121.                 (progn
  122.                   (setq v1(cdr(assoc 10 ent1))
  123.                         v2(cdr(assoc 10 ent2))
  124.                         bulge(cdr(assoc 42 ent1))
  125.                         )
  126.                   (setq a(angle v1 v2)
  127.                         d(distance v1 v2)
  128.                         radi(abs(/ d(* 2.0(sin(*(atan bulge) 2)))))
  129.                         )
  130.                   (setq hfd(/ d 2.0)
  131.                         thet(atan(/(sqrt(-(* radi radi)(* hfd hfd)))hfd))
  132.                         )
  133.                   (if (< (abs bulge) 1)         ; if > 180 deg
  134.                                (if (< bulge 0)             ; if clockwise
  135.                                  (setq dtoc (- a thet))
  136.                                  (setq dtoc (+ a thet))
  137.                                )
  138.                               (if (< bulge 0)
  139.                                 (setq dtoc (+ a thet))
  140.                                 (setq dtoc (- a thet))
  141.                               )
  142.                          )
  143.                             (setq p1 v1)
  144.                             (setq p2 v2)
  145.                             (setq pc (polar p1 dtoc radi))
  146.                             (setq beg (angle pc p1))
  147.                             (setq end (angle pc p2))
  148. ; CALCULATE LENGTH OF ARC
  149.                             (setq swept (abs (- beg end) ))
  150.                             (setq len (abs (* (- beg end) radi)))
  151.                             (if (and (< (abs bulge) 1) (> swept pi ))
  152.                                 (setq len (- (* 2 pi radi) len))
  153.                             )
  154.                          (if (< (+ len r) step)
  155.                          (progn
  156.                              (setq r (+ len r))
  157.                          )
  158.                          (progn
  159.                             (if (and (> (abs bulge) 1) (< swept pi ))
  160.                                 (setq len (- (* 2 pi radi) len))
  161.                             )
  162.                             (setq beta (- step r))
  163.                             (setq len1 (- len beta))
  164.                             (if (> bulge 0)
  165.                                 (setq beg (+ beg (/ beta radi) ) )
  166.                                 (setq beg (- beg (/ beta radi) ) )
  167.                             )
  168.                             (setq num (1+ (fix (/ len1 step))))
  169.                             (setq astep (/ step radi ))
  170.                             (setq cnt 0)
  171.                             (repeat num
  172.                               (progn
  173.                                  (if (> bulge 0)
  174.                                     (setq ai (+ beg (* cnt astep))
  175.                                    ab(+ ai (dtr 90)))
  176.                                     (setq ai (- beg (* cnt astep))
  177.                                    ab(- ai (dtr 90)))
  178.                                  )
  179.                                  (setq pt (polar pc ai radi))
  180.                         (setq svval(+ svval step)
  181.                               value(strcat svprefix (rtos svval 2 0) svsuffix ))                                 
  182.                         (command "-insert" "Chainage_Text" pt scale scale (rtd ab) value)
  183.                         (setq cnt (1+ cnt))
  184.                          )
  185.                        )
  186.                     (setq r(rem len1 step))
  187.                     (if(equal r 0.0)(setq r step))
  188.                     )
  189.                     )
  190. ; set new values for variables                       
  191.                 (setq ent1 ent2)
  192.                 (setq ent2(cdr ent2))
  193.                 (setq ent2(member(assoc 10 ent2)ent2))
  194.                 );end progn for arc section                          
  195.                 );end if check straight or arc
  196.              );end progn
  197.     );end if /= ent2 nil
  198.   );end while /= ent2 nil
  199. )
  200.    )
  201. ;reset variables
  202. (setvar "attreq" oreq)
  203. (setvar "attdia" odia)
  204. (command "layer" "s" oldlayer "")
  205. (command "ucs" "p")
  206. )
  207. (defun thanku()
  208. (setq dialog-state 999)
  209. (setq dialog_pos (list -1 -1))
  210. (setq dcl_id (load_dialog "thanks.dcl"))
  211. (while (< 2 dialog-state)
  212.    (new_dialog "thanks" dcl_id "" dialog_pos)
  213.    (set_tile "lname" "Chainage Routine")
  214.    (setq x (dimx_tile "DC")
  215.   y (dimy_tile "DC"))
  216.    (fill_image 0 0 x y -15)
  217.    (start_image "DC")
  218.    (slide_image 10 10 x y "dc_logo")
  219.    (end_image)
  220.    (setq dialog-state (start_dialog))
  221.    (if (= dialog-state 1)
  222.      (princ)
  223.      )
  224.    )
  225. (unload_dialog dcl_id)
  226. (princ)
  227. )
  228. ;command routine
  229. (defun c:chains ()
  230. (intro)
  231. (if(= qr "Q")
  232.    (progn
  233.      (setq qr nil)
  234.      (thanku)
  235.      )
  236.    (progn
  237.      (chainage)
  238.      (thanku)
  239.      )
  240.    )
  241. )
  242. ;PI's on pipelines no radiused bends
  243. (defun c:bends ()
  244. (if (= (tblsearch "LAYER" "Bend_numbers") nil)
  245.      (command "layer" "m" "Bend_numbers" "c" "1" "" "")
  246.      (command "layer" "s" "Bend_numbers" "")
  247.    )
  248. (setq bend 1.0)
  249. (setq nam (car (entsel "\nSelect Polyline: ")))
  250. (setq ent (entget nam))
  251. (if (not (equal (cdr (assoc 0 ent)) "LWPOLYLINE"))
  252.      (prompt "\nEntity not a polyline...")
  253.      (progn
  254. (setq nv (cdr(assoc 90 ent)))
  255. (setq ent1 (member(assoc 10 ent)ent))
  256.   (setq ent2(cdr ent1))
  257.   (setq ent2(member(assoc 10 ent2)ent2))
  258. (while (/= ent2 nil)
  259.                    (setq v1(cdr(assoc 10 ent1))
  260.                   v2(cdr(assoc 10 ent2))
  261.                   a(angle v1 v2)
  262.                   )
  263.             (command "text" "c" (polar v1 (+ (dtr 90) a) (* scale 1.25)) (* scale 3.5) (rtd a) (rtos bend 2 0))
  264.   (setq bend(1+ bend))
  265.   (setq ent1 ent2)
  266.   (setq ent2(cdr ent2))
  267.   (setq ent2(member(assoc 10 ent2)ent2))
  268.   )
  269. )
  270.    )
  271. )

 
 
 
215017unz4j1qq1z4tsuse.jpg
链测长度_文本。图纸
链测长度记号。图纸
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 21:20:19 | 显示全部楼层
需要添加最后一个例程,该例程查看起始角度(如果直线+90),如果线段是圆弧,则查看endpt cenpt,然后再次执行end segment。你有;如果现在检查直线或圆弧,则结束。
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 22:19:26 | 显示全部楼层
谢谢你的帮助比格尔。我把它整理好了。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 09:03 , Processed in 0.974144 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表