乐筑天下

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

[编程交流] Lisp查找每1处的值

[复制链接]

6

主题

15

帖子

9

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 18:23:56 | 显示全部楼层 |阅读模式
你好,Lisp书呆子。
谁能帮我找到从模板到钢筋束外线的距离。
我的要求是1区和2区。
腹板和模板的中心线将是多段线,随着桥梁的移动,它可能会有曲线。
我希望以卷筒纸的C/L为基准线,每隔1米做一次距离1和距离2。
我们有一个lisp,它给出了模板和钢筋束外线之间的垂直距离。
但我们希望它垂直于模板。。
有人能帮我吗?
我也附上了Lisp程序。
 
  1. (defun tbrtos ( txt / cont txt1 txt2 txt3 tx4 txt5 txt6 aux1 aux2 aux3 aux4 aux5 aux6)
  2. (setq aux1 (strlen txt))
  3. (setq aux2 0)
  4. (setq aux3 0)
  5. (setq aux4 0)
  6. (setq aux5 0)
  7. (setq cont 0)
  8. (repeat aux1
  9.    (setq aux2 (+ 1 aux2))
  10.    (setq txt1 (substr txt aux2 1))
  11.    (if (or (= txt1 ".") (= txt1 ","))
  12.   (SETQ cont (- aux1 aux2))
  13.      ))
  14.    (setq cont cont))
  15. (defun txfix (num dec / aux1 aux2 aux3 txt1 txt2 txt3)
  16. (if (= dec 0)
  17. (setq txt4 (rtos num 2 dec))
  18. (progn
  19. (setq aux1 1.0)
  20. (repeat dec
  21. ;  (print aux1)
  22. (setq aux1 (* 10.0 aux1)))
  23. (setq aux2 (* aux1 num)) ;(print aux2)
  24. (setq txt1 (rtos aux2 2 0)) ;(print txt1)
  25. (setq txt2 (substr txt1 1 (- (strlen txt1) dec)))   ;(print txt2)
  26.   
  27. (setq txt3 (substr txt1 (+ 1  (- (strlen txt1) dec)) dec));  (print txt3)
  28. (setq txt4 (strcat txt2 "." txt3))
  29. ))
  30. (setq txt4 txt4)
  31. )
  32. (defun txtadd ( / diff ss sl sn en data txt1 )
  33. (setq diff (getreal "Enter +/- DELTA: "))
  34. (PRINT "SELECT TXT...........")
  35. (setq ss (ssget))
  36. (setq sl (sslength ss))
  37. (while (> sl 0)
  38.    (setq data 0)
  39.    (setq sn (ssname ss (- sl 1)))
  40.    (setq en (entget sn))
  41.    (if (= (cdr (assoc 0 en)) "TEXT")
  42.      (progn
  43.            (setq txt1 (cdr (assoc 1 en)))
  44.            (setq data (atof txt1 ))
  45.            (setq data (+ diff data ))
  46.        (setq txt5 (txfix data (tbrtos txt1) ))
  47. (setq en (subst (cons 1 txt5) (assoc 1 en) en ))
  48.            (entmod en)
  49. ))
  50.    (setq sl (- sl 1))
  51.    )
  52. (command "regenall")
  53. (print "END ...")
  54.    )
  55. (defun txtmult ( / diff ss sl sn en data txt1 txt5)
  56. (setq diff (getreal "Enter factor: "))
  57. (PRINT "SELECT TXT...........")
  58. (setq ss (ssget))
  59. (setq sl (sslength ss))
  60. (while (> sl 0)
  61.    (setq data 0)
  62.    (setq sn (ssname ss (- sl 1)))
  63.    (setq en (entget sn))
  64.    (if (= (cdr (assoc 0 en)) "TEXT")
  65.      (progn
  66.            (setq txt1 (cdr (assoc 1 en)))
  67.            (setq data (atof txt1 ))
  68.            (setq data (* diff data))
  69. (setq txt5 (txfix data (tbrtos txt1) ))
  70.            (setq en (subst (cons 1 txt5) (assoc 1 en) en ))
  71.            (entmod en)
  72. ))
  73.    (setq sl (- sl 1))
  74.    )
  75. (command "regenall")
  76. (print "END ...")
  77.    )
  78. (defun tblayout        (/     ang0  delta ss0         ss1   ss2   sl0   sl1         sn0
  79.          sn1   sn2   en0   en1         en2   p0    p1           dx         dxacum
  80.          dxtotal     count x0         x1    x2    y0           y1         y2
  81.          ytext p2    p3           p20         p30   ptext dh
  82.         )
  83. (setq delta 100000.0)
  84. (setq ALT1 300.0)
  85. (command "_ucs" "_w" )
  86. (print "...select reference object......")
  87. (setq ss0 (ssget))
  88. (terpri)
  89. (print "...select tendon......")
  90. (setq ss1 (ssget))
  91. (terpri)
  92. (setq p0 (getpoint "..........First Point........"))
  93. (terpri)
  94. (setq p1 (getpoint p0 "..........Last  Point........"))
  95. (terpri)
  96. (setq ptext (getpoint p0 "..TEXT LEVEL...."))
  97. (terpri)
  98. (terpri)
  99. (setq dx (getreal "..........typical spacing........"))
  100. (setvar "osmode" 0)
  101. (setq ytext (distance p0 ptext))
  102. (setq sl0 (sslength ss0))
  103. (setq sn0 (ssname ss0 (- sl0 1)))
  104. ;; Get entity name
  105. (setq en0 (entget sn0))
  106. ;; Get entity structure
  107. (setq sl1 (sslength ss1))
  108. (setq sn1 (ssname ss1 (- sl1 1)))
  109. ;; Get entity name
  110. (setq en1 (entget sn1))
  111. ;; Get entity structure
  112. (setq dxtotal (distance p0 p1))
  113. (setq x0 (car p0))
  114. (setq x1 (car p1))
  115. (setq y0 (min (cadr p0) (cadr p1)))
  116. (setq ang0 (angle p0 p1))
  117. (setq p2 (polar p0 (+ ang0 (* 1.5 pi)) delta))
  118. (setq p3 (polar p0 (+ ang0 (* 0.5 pi)) delta))
  119. (setq ptext (polar p0 (+ ang0 (* 1.5 pi)) ytext))
  120. (setq dxacum 0.0)
  121. (while (not (> dxacum dxtotal))
  122.    (setq p20 (tbinter sn0 p2 p3))
  123.    (setq p30 (tbinter sn1 p2 p3))
  124.    (setq dh (distance p20 p30))
  125.    (command "_TEXT"
  126.      "J"
  127.      "BL"
  128.      ptext
  129.      ALT1
  130.      (+ 90.0 (* (/ ang0 pi) 180.0))
  131.      (rtos dh 2 0)
  132.    )
  133.    (command "_TEXT"
  134.      "J"
  135.      "BL"
  136.      (polar ptext (+ ang0 (* 0.5 pi)) (* 10.0 ALT1))
  137.      ALT1
  138.      (+ 90.0 (* (/ ang0 pi) 180.0))
  139.      (rtos (/ dxacum 1000.0) 2 3)
  140.    )
  141.    (setq dxacum (+ dxacum dx))
  142.    (setq p2 (polar p2 ang0 dx))
  143.    (setq p3 (polar p3 ang0 dx))
  144.    (setq ptext (polar ptext ang0 dx))
  145. )
  146. (if (not (= dxacum dxtotal))
  147.    (progn
  148.      (setq p2 (polar p1 (+ ang0 (* 1.5 pi)) delta))
  149.      (setq p3 (polar p1 (+ ang0 (* 0.5 pi)) delta))
  150.      (setq p20 (tbinter sn0 p2 p3))
  151.      (setq p30 (tbinter sn1 p2 p3))
  152.      (setq dh (distance p20 p30))
  153.      (setq ptext (polar p1 (+ ang0 (* 1.5 pi)) ytext))
  154.      (command "_TEXT"
  155.        "J"
  156.        "BL"
  157.        ptext
  158.        ALT1
  159.        (+ 90.0 (* (/ ang0 pi) 180.0))
  160.        (rtos dh 2 0)
  161.      )
  162.      (command "_TEXT"
  163.        "J"
  164.        "BL"
  165.        (polar ptext (+ ang0 (* 0.5 pi)) (* 10.0 ALT1))
  166.        ALT1
  167.        (+ 90.0 (* (/ ang0 pi) 180.0))
  168.        (rtos (/ dxtotal 1000.0) 2 3)
  169.      )
  170.    )
  171.    (terpri)
  172. )
  173. (terpri)
  174. (print "........end")
  175. (terpri)
  176. (setvar "osmode" 15359)
  177. (terpri)
  178. )
  179. (defun tbcircle (/ sn0 llx0  x1 y1 x2 y2        x0 y0 sn2 en2 sn3 en3 sn4 en4 p4
  180.         p5 p0)
  181. (setq delta 1000)
  182. (setvar "plinetype" 0)
  183. (print "...select tendon...")
  184. (setvar sn0 (ssget))
  185. (terpri)
  186. (print "...select 1st point...")
  187. (setvar p1 (getpoint))
  188. (command "circle" p1 delta "")
  189. (setq sn1 (entlast))
  190. (command "_trim" sn0 "" (entlast) "")
  191. (setq sn2 (entlast))
  192. (setq en2 (entget sn2))
  193. (setq sn3 (entnext sn2))
  194. (setq en3 (entget sn3))
  195. (setq p4 (cdr (assoc 10 en3)))
  196. (setq sn4 (entnext sn3))
  197. (setq en4 (entget sn4))
  198. (setq p5 (cdr (assoc 10 en4)))
  199. (command "_erase" sn2 "")
  200. (if (or (and (= (car p4) x1) (= (cadr p4) y1))
  201.   (and (= (car p4) x2) (= (cadr p4) y2))
  202.      )
  203.    (setq p0 p5)
  204.    (setq p0 p4)
  205. )
  206. (setq p0 p0)
  207. )
  208. (defun tbinter (sn0 p1 p2 / x1 y1 x2 y2        x0 y0 sn2 en2 sn3 en3 sn4 en4 p4
  209.         p5 p0)
  210. (setvar "plinetype" 0)
  211. (setq x1 (car p1))
  212. (setq x2 (car p2))
  213. (setq y1 (cadr p1))
  214. (setq y2 (cadr p2))
  215. (command "_pline" p1 p2 "")
  216. (command "_trim" sn0 "" (entlast) "")
  217. (setq sn2 (entlast))
  218. (setq en2 (entget sn2))
  219. (setq sn3 (entnext sn2))
  220. (setq en3 (entget sn3))
  221. (setq p4 (cdr (assoc 10 en3)))
  222. (setq sn4 (entnext sn3))
  223. (setq en4 (entget sn4))
  224. (setq p5 (cdr (assoc 10 en4)))
  225. (command "_erase" sn2 "")
  226. (if (or (and (= (car p4) x1) (= (cadr p4) y1))
  227.   (and (= (car p4) x2) (= (cadr p4) y2))
  228.      )
  229.    (setq p0 p5)
  230.    (setq p0 p4)
  231. )
  232. (setq p0 p0)
  233. )
  234. (defun tbangle (x1 y1 z1 x2 y2 z2 x3 y3        z3 / ppunto temp dx1 dy1 dz1 dd1
  235.         dx2 dy2        dz2 dd2)
  236. (setq dx1 (- x2 x1))
  237. (setq dy1 (- y2 y1))
  238. (setq dz1 (- z2 z1))
  239. (setq dd1 (sqrt (+ (* dx1 dx1) (* dy1 dy1) (* dz1 dz1))))
  240. (setq dx1 (/ dx1 dd1))
  241. (setq dy1 (/ dy1 dd1))
  242. (setq dz1 (/ dz1 dd1))
  243. (setq dx2 (- x3 x2))
  244. (setq dy2 (- y3 y2))
  245. (setq dz2 (- z3 z2))
  246. (setq dd2 (sqrt (+ (* dx2 dx2) (* dy2 dy2) (* dz2 dz2))))
  247. (setq dx2 (/ dx2 dd2))
  248. (setq dy2 (/ dy2 dd2))
  249. (setq dz2 (/ dz2 dd2))
  250. (setq temp (+ (* dx1 dx2) (* dy1 dy2) (* dz1 dz2)))
  251. (setq ppunto (acos temp))
  252. ;..........................  
  253. ;(print temp) (print ppunto)
  254. ;.........................
  255. (setq ppunto ppunto)
  256. )
  257. (defun tbdist
  258.       (x1 y1 z1 x2 y2 z2 / ppunto dx1 dy1 dz1 dd1 dx2 dy2 dz2 dd2)
  259. (setq dx1 (- x2 x1))
  260. (setq dy1 (- y2 y1))
  261. (setq dz1 (- z2 z1))
  262. (setq dd1 (sqrt (+ (* dx1 dx1) (* dy1 dy1) (* dz1 dz1))))
  263. (setq dd1 dd1)
  264. )
  265. (defun tbdataxy        (FICHA /     llx   lly         ang0  delta ss0   ss1         ss2
  266.          sl0   sl1   sn0   sn1         sn2   en0   en1   en2         p0
  267.          p1    dx    dxacum         dxtotal     count x0         x1
  268.          x2    y0    y1           y2 y30         ytext p2    p3           p20         p30
  269.          ptext pref yref dh dxval
  270.         )
  271. (setq delta 100000.0)
  272. (setq ALT1 300.0)
  273. (print "...ELEVATION/PLAN VIEW ......")
  274. ;  (terpri)
  275. (print "...select CG tendon......")
  276. (setq ss1 (ssget))
  277. (terpri)
  278. (setq p0 (getpoint "..........First Point........"))
  279. (terpri)
  280. (setq p1 (getpoint p0 "..........Last  Point........"))
  281. (terpri)
  282. (setq pref (getpoint  "..........Reference Point........"))
  283. (terpri)
  284. (setq dx (getreal "..........typical spacing........"))
  285. (setvar "osmode" 0)
  286. ;  (setq sl0 (sslength ss0))
  287. ;  (setq sn0 (ssname ss0 (- sl0 1)))
  288. ;; Get entity name
  289. ;  (setq en0 (entget sn0))
  290. ;; Get entity structure
  291. (setq yref (nth 1 pref))
  292. (setq sl1 (sslength ss1))
  293. (setq sn1 (ssname ss1 (- sl1 1)))
  294. ;; Get entity name
  295. (setq en1 (entget sn1))
  296. ;; Get entity structure
  297. ; (setq dxtotal (distance p0 p1))
  298. (setq x0 (car p0))
  299. (setq x1 (car p1))
  300. (setq dxval (- x1 x0))
  301. (setq dxtotal (abs (- x1 x0)))
  302. (setq y0 (min (cadr p0) (cadr p1)))
  303. ;  (setq ang0 (angle p0 p1))
  304.   (setq ang0 0.0)
  305. ;  (setq p2 (polar p0 (+ ang0 (* 1.5 pi)) delta))
  306. ;  (setq p3 (polar p0 (+ ang0 (* 0.5 pi)) delta))
  307.   (setq p2 (list x0 (- (cadr p0) delta)))
  308.   (setq p3 (list x0 (+ (cadr p0) delta)))
  309. (setq dxacum 0.0)
  310. (while (not (>  dxacum dxtotal ))
  311. ;   (setq p20 (tbinter sn0 p2 p3))
  312.    (setq p30 (tbinter sn1 p2 p3))
  313.      (setq y30 (nth 1 p30))
  314.    (setq dh (- y30 yref))
  315.    (if        (= dh delta)
  316.      (progn
  317. (terpri)
  318. (print
  319.   " xxx NO INTERSECTION OF TENDON WITH REFERENCE OBJECT....PLEASE CHECK FIRST/LAST POINT XXXX"
  320. )
  321. (close FICHA)
  322. (QUIT)
  323.      )
  324.    )
  325.    (if        (= dxacum 0.0)
  326.      (progn
  327. (setq llx (list dxacum))
  328. (setq lly (list dh))
  329.      )
  330.      (progn
  331. (setq ltemp llx)
  332. (setq llx (cons dxacum ltemp))
  333. (setq ltemp lly)
  334. (setq lly (cons dh ltemp))
  335.      )
  336.    )
  337.                                 ;        (command "_TEXT" "J" "BL" ptext                                   ALT1 (+ 90.0  (* (/ ang0 pi) 180.0) ) (rtos dh 2 0))
  338.                                 ;        (command "_TEXT" "J" "BL" (polar ptext (+ ang0 (* 0.5 pi)) (* 10.0 ALT1))  ALT1 (+ 90.0  (* (/ ang0 pi) 180.0) ) (rtos (/ dxacum 1000.0) 2 3))
  339.    (setq dxacum (+ dxacum dx))
  340.    (setq p2 (polar p2 ang0 (* dx (/ dxval dxtotal))    ))
  341.    (setq p3 (polar p3 ang0 (* dx (/ dxval dxtotal))    ))
  342. )
  343. (if (not (= dxacum dxtotal))
  344.    (progn
  345.      (setq p2 (polar p1 (+ ang0 (* 1.5 pi)) delta))
  346.      (setq p3 (polar p1 (+ ang0 (* 0.5 pi)) delta))
  347. ;      (setq p20 (tbinter sn0 p2 p3))
  348.      (setq p30 (tbinter sn1 p2 p3))
  349. ;      (setq dh (distance p20 p30))
  350.     (setq y30 (nth 1 p30))
  351.     (setq dh (- y30 yref))
  352.      
  353.      (if (= dh delta)
  354. (progn
  355.   (terpri)
  356.   (print
  357.     " xxx NO INTERSECTION OF TENDON WITH REFERENCE OBJECT....PLEASE CHECK FIRST/LAST POINT XXXX"
  358.   )
  359.   (close FICHA)
  360.   (QUIT)
  361. )
  362.      )
  363.      (setq ltemp llx)
  364.      (setq llx (cons dxtotal ltemp))
  365.      (setq ltemp lly)
  366.      (setq lly (cons dh ltemp))
  367.    ))
  368. (setq llx (reverse llx))
  369. (setq lly (reverse lly))
  370. (setvar "osmode" 15359)
  371. (setq data (list llx lly))
  372. (setq data data)
  373. )
  374. (defun tbdataz1        (listax listay Radio / x0 y0 z0 nx ltemp count acum)
  375. (setq nx (length listax))
  376. (setq count 0)
  377. (setq y1 (nth count listay))
  378. (repeat nx
  379.    (setq x0 (nth count listax))
  380.    (setq y0 (nth count listay))
  381.    (setq z0 (* Radio (cos (/ x0 Radio))))
  382.    (if        (= count 0)
  383.      (progn
  384. (setq llz (list z0))
  385.      )
  386.      (progn
  387. (setq ltemp llz)
  388. (setq llz (cons z0 ltemp))
  389.      )
  390.    )
  391.    (setq count (+ 1 count))
  392. )
  393. (setq llz (reverse llz))
  394. (terpri)
  395. (setq llz llz)
  396. )
  397. (defun tbdataz2        (listax         listay         wslope         offset         duct         /
  398.          x0         y0         z0         nx         ltemp         count
  399.          acum         ycorr
  400.         )
  401. (setq nx (length listax))
  402. (setq count 0)
  403. (setq y1 (nth count listay))
  404. (repeat nx
  405.    (setq x0 (nth count listax))
  406.    (setq y0 (nth count listay))
  407.    (setq ycorr (- y0 (/ duct 2.0)))
  408.    (setq z0 (+ (tbfiledata wslope offset ycorr) (* -1.0 offset) (* 0.0 (/ duct 2.0))))
  409.    (if        (= count 0)
  410.      (progn
  411. (setq llz (list z0))
  412.      )
  413.      (progn
  414. (setq ltemp llz)
  415. (setq llz (cons z0 ltemp))
  416.      )
  417.    )
  418.    (setq count (+ 1 count))
  419. )
  420. (setq llz (reverse llz))
  421. (terpri)
  422. (setq llz llz)
  423. )
  424. (defun tbdataz3        (FICHA llx0   /         llx   lly   ang0  delta ss0
  425.          ss1   ss2   sl0   sl1         sn0   sn1   sn2   en0         en1
  426.          en2   p0    p1           dx         dxacum             dxtotal         count
  427.          x0    x1    x2           y0         y1    y2    ytext p2         p3
  428.          p20   p30   ptext dh txt0
  429.         )
  430. (setq delta 100000.0)
  431. (setq ALT1 300.0)
  432. (setq count 0)
  433. (print "...PLAN VIEW select reference object......")
  434. (setq ss0 (ssget))
  435. (terpri)
  436. (print "...select CG tendon......")
  437. (setq ss1 (ssget))
  438. (terpri)
  439. (setq p0 (getpoint "..........First Point........"))
  440. (terpri)
  441. (setq p1 (getpoint p0 "..........Last  Point........"))
  442. (terpri)
  443. (setq txt0 (getstring  ".................."))
  444. (terpri)
  445. (setvar "osmode" 0)
  446. (setq sl0 (sslength ss0))
  447. (setq sn0 (ssname ss0 (- sl0 1)))
  448. (setq en0 (entget sn0))
  449. (setq sl1 (sslength ss1))
  450. (setq sn1 (ssname ss1 (- sl1 1)))
  451. (setq en1 (entget sn1))
  452. (setq dxtotal (distance p0 p1))
  453. (setq x0 (car p0))
  454. (setq x1 (car p1))
  455. (setq y0 (min (cadr p0) (cadr p1)))
  456. (setq ang0 (angle p0 p1))
  457. (setq p2 (polar p0 (+ ang0 (* 1.5 pi)) delta))
  458. (setq p3 (polar p0 (+ ang0 (* 0.5 pi)) delta))
  459. (setq dxacum 0.0)
  460. (repeat (length llx0)
  461.    (setq p20 (tbinter sn0 p2 p3))
  462.    (setq p30 (tbinter sn1 p2 p3))
  463.    (setq dh (distance p20 p30))
  464.    (if        (= dh delta)
  465.      (progn
  466. (terpri)
  467. (print
  468.   " xxx NO INTERSECTION OF TENDON WITH REFERENCE OBJECT....PLEASE CHECK FIRST/LAST POINT XXXX"
  469. )
  470. (close FICHA)
  471. (QUIT)
  472.      )
  473.    )
  474.    (if        (= dxacum 0.0)
  475.      (progn
  476. (setq lly (list dh))
  477.      )
  478.      (progn
  479. (setq ltemp lly)
  480. (setq lly (cons dh ltemp))
  481.      )
  482.    )
  483.    
  484.    
  485.    (setq count (+ 1 count))
  486.    (if  (<  count (length llx0))
  487.      (setq dx (abs (- (nth count llx0) (nth (- count 1) llx0))))
  488.      (setq dx dx)
  489.    )
  490.    
  491.    (setq dxacum (+ dxacum dx))  
  492.    (setq p2 (polar p2 ang0 dx))
  493.    (setq p3 (polar p3 ang0 dx))
  494. )
  495. (setq lly (reverse lly))
  496. (setvar "osmode" 15359)
  497. (setq lly lly)
  498. )
  499. (defun tbdataalfa (lx        ly   lz          /    x0   y0         z0   x1   y1        z1
  500.            x2        y2   z2          nx   ltemp         count           lalfa
  501.            n0        n1   n2          alfa
  502.           )
  503. (setq nx (length lx))
  504. (setq count 1)
  505. (setq lalfa (list 0.0))
  506. (repeat (- nx 2)
  507.    (setq n0 (- count 1))
  508.    (setq n1 (- count 0))
  509.    (setq n2 (+ count 1))
  510.    (setq x0 (nth n0 lx))
  511.    (setq x1 (nth n1 lx))
  512.    (setq x2 (nth n2 lx))
  513.    (setq y0 (nth n0 ly))
  514.    (setq y1 (nth n1 ly))
  515.    (setq y2 (nth n2 ly))
  516.    (setq z0 (nth n0 lz))
  517.    (setq z1 (nth n1 lz))
  518.    (setq z2 (nth n2 lZ))
  519.    (setq alfa (tbangle x0 y0 z0 x1 y1 z1 x2 y2 z2))
  520.    (setq ltemp lalfa)
  521.    (setq lalfa (cons alfa ltemp))
  522.    (setq count (+ 1 count))
  523. )
  524. (setq ltemp lalfa)
  525. (setq lalfa (cons 0.0 ltemp))
  526. (setq lalfa (reverse lalfa))
  527. (setq lalfa lalfa)
  528. )
  529. (defun acos (x)
  530. (cond
  531.    ((equal x 1.0 5.0e-
  532.     0.0
  533.    )
  534.    ((equal x -1.0 5.0e-
  535.     pi
  536.    )
  537.    ((< (abs x) 1.0)
  538.     (- (* pi 0.5) (atan  x
  539.                     (sqrt (- 1.0 (* x x)))   
  540.                  ))
  541.    )
  542. )
  543. )
  544. (defun tbdatalargo (lx          ly        lz              /        x0    y0
  545.             z0          x1        y1    z1    nx          ltemp        count llargo
  546.             n0          n1        largo lacum
  547.            )
  548. (setq nx (length lx))
  549. (setq count 1)
  550. (setq llargo (list 0.0))
  551. (setq lacum 0.0)
  552. (repeat (- nx 1)
  553.    (setq n0 (- count 1))
  554.    (setq n1 (- count 0))
  555.    (setq x0 (nth n0 lx))
  556.    (setq x1 (nth n1 lx))
  557.    (setq y0 (nth n0 ly))
  558.    (setq y1 (nth n1 ly))
  559. (setq z0 (nth n0 lz))
  560. (setq z1 (nth n1 lz))
  561.    (setq largo (tbdist x0 y0 z0 x1 y1 z1))
  562.    (setq lacum (+ lacum largo))
  563.    (setq llargo (cons lacum llargo))
  564.    (setq count (+ 1 count))
  565. )
  566. (setq llargo (reverse llargo))
  567. (setq llargo llargo)
  568. )
  569. (defun tbf0 (largo  alfa   mu          k0         /        l0     l1     alfa0
  570.      nx            ltemp  count  llargo n0        n1     delta  pacum
  571.     )
  572. (setq nx (length largo))
  573. (setq count 1)
  574. (setq pacum 1.0)
  575. (setq lf0 (list 1.0))
  576. (repeat (- nx 1)
  577.    (setq n0 (- count 1))
  578.    (setq n1 (- count 0))
  579.    (setq l0 (nth n0 largo))
  580.    (setq l1 (nth n1 largo))
  581.    (setq alfa0 (nth n1 alfa))
  582.    (setq delta
  583.    (exp (* -1.0 (+ (* 0.001 k0 (abs (- l1 l0))) (* mu alfa0))))
  584.    )
  585.    (setq pacum (* delta pacum))
  586.    (setq lf0 (cons pacum lf0))
  587.    (setq count (+ 1 count))
  588. )
  589. (setq lf0 (reverse lf0))
  590. (setq lf0 lf0)
  591. )
  592. (defun tbdelta (largo  force  EP     sigma0 /           ld0          l0         l1
  593.         f0     f1     nx     ltemp  count  llargo n0         n1
  594.         delta  dacum
  595.        )
  596. (setq nx (length largo))
  597. (setq count 1)
  598. (setq dacum 0.0)
  599. (setq ld0 (list dacum))
  600. (repeat (- nx 1)
  601.    (setq n0 (- count 1))
  602.    (setq n1 (- count 0))
  603.    (setq l0 (nth n0 largo))
  604.    (setq l1 (nth n1 largo))
  605.    (setq f0 (nth n0 force))
  606.    (setq f1 (nth n1 force))
  607.    (setq delta (* (abs (- l0 l1)) (* 0.5 (+ f0 f1)) (/ sigma0 EP)))
  608.    (setq dacum (+ delta dacum))
  609.    (setq ld0 (cons dacum ld0))
  610.    (setq count (+ 1 count))
  611. )
  612. (setq ld0 (reverse ld0))
  613. (setq ld0 ld0)
  614. )
  615. (defun tbext2 (largo  force1 force2 delta1 delta2 EP         sigma0        /
  616.        p01    p02    p11    p12           elong1 elong2 x0        x1
  617.        x2     f2     f01    f02           f11          f12         nx        ltemp
  618.        count  ld0    n0            n1           delta  delta0 dacum
  619.       )
  620. (setq nx (length largo))
  621. (setq count 1)
  622. (setq ld0 (list 0.0 0.0 0.0))
  623. (repeat (- nx 1)
  624.    (setq n0 (- count 1))
  625.    (setq n1 (- count 0))
  626.    (setq x0 (nth n0 largo))
  627.    (setq x1 (nth n1 largo))
  628.    (setq f01 (nth n0 force1))
  629.    (setq f02 (nth n1 force1))
  630.    (setq f11 (nth n0 force2))
  631.    (setq f12 (nth n1 force2))
  632.    (setq p01 (list x0 f01))
  633.    (setq p02 (list x1 f02))
  634.    (setq p11 (list x0 f11))
  635.    (setq p12 (list x1 f12))
  636.    (IF        (INTERs p01 p02 p11 p12)
  637.      (progn
  638. (setq x2 (car (INTERs p01 p02 p11 p12)))
  639. (setq f2 (cadr (INTERs p01 p02 p11 p12)))
  640. (setq
  641.   delta        (* (abs (- x0 x2)) (* 0.5 (+ f01 f2)) (/ sigma0 EP))
  642. )
  643. (setq delta (+ delta (nth n0 delta1)))
  644. (setq
  645.   delta0 (* (abs (- x2 x1)) (* 0.5 (+ f12 f2)) (/ sigma0 EP))
  646. )
  647. (setq delta0 (+ delta0 (nth n1 delta2)))
  648. (setq ld0 (list x2 delta delta0 f2))
  649.      )
  650.    )
  651.    (setq count (+ 1 count))
  652. )
  653. (setq ld0 ld0)
  654. )
  655. (defun rtosf (num space fix0 / temp cont cont1)
  656. (setq temp (rtos num 2 fix0))
  657. (setq cont (strlen temp))
  658. (setq cont1 (- space cont))
  659. (repeat cont1
  660.    (setq temp (strcat " " temp))
  661. )
  662. (setq temp temp)
  663. )
  664. (defun tbdata (/      title1 title2 title3 Ep          fpu         Ap        Nstrand
  665.        Fjack  mu     k            Radio  stressing         ljack        lista
  666.        ,      ss     sl            sn           en          sn0         sn1        sn2
  667.        sn3    sn4    sn5    sn6           sn7          sn8         sn9        sn10
  668.        sn11   sn12   sn13   sn14   ,          en0         en1        en2
  669.        en3    en4    en5    en6           en7          en8         en9        en10
  670.        en11   en12   en13   en14   ,          let1         let2        let3
  671.        let4   let5   let6   let7   let8          let9         let10        let11
  672.        let12  let13  let14
  673.       )
  674. (terpri)
  675. (print "...Select Block with Datas ....")
  676. (setq ss (ssget))
  677. ;; Select entities
  678. (setq sl 1)
  679. ;; Get # ents selected
  680. (setq sn (ssname ss (- sl 1)))
  681. ;; Get entity name
  682. (setq en (entget sn))
  683. ;; Get entity structure
  684. (if (= (cdr (assoc 2 en)) "DATA-CABLE")
  685.    ;; If block entity
  686.    (progn
  687.      (setq sn0 (entnext sn))
  688.      (setq en0 (entget sn0))
  689.      (setq let1 (cdr (assoc 1 en0)))
  690.      (setq sn1 (entnext sn0))
  691.      (setq en1 (entget sn1))
  692.      (setq let2 (cdr (assoc 1 en1)))
  693.      (setq sn2 (entnext sn1))
  694.      (setq en2 (entget sn2))
  695.      (setq let3 (cdr (assoc 1 en2)))
  696.      (setq sn3 (entnext sn2))
  697.      (setq en3 (entget sn3))
  698.      (setq let4 (atof (cdr (assoc 1 en3))))
  699.      (setq sn4 (entnext sn3))
  700.      (setq en4 (entget sn4))
  701.      (setq let5 (atof (cdr (assoc 1 en4))))
  702.      (setq sn5 (entnext sn4))
  703.      (setq en5 (entget sn5))
  704.      (setq let6 (atof (cdr (assoc 1 en5))))
  705.      (setq sn6 (entnext sn5))
  706.      (setq en6 (entget sn6))
  707.      (setq let7 (atof (cdr (assoc 1 en6))))
  708.      (setq sn7 (entnext sn6))
  709.      (setq en7 (entget sn7))
  710.      (setq let8 (atof (cdr (assoc 1 en7))))
  711.      (setq sn8 (entnext sn7))
  712.      (setq en8 (entget sn8))
  713.      (setq let9 (atof (cdr (assoc 1 en8))))
  714.      (setq sn9 (entnext sn8))
  715.      (setq en9 (entget sn9))
  716.      (setq let10 (atof (cdr (assoc 1 en9))))
  717.      (setq sn10 (entnext sn9))
  718.      (setq en10 (entget sn10))
  719.      (setq let11 (atof (cdr (assoc 1 en10))))
  720.      (setq sn11 (entnext sn10))
  721.      (setq en11 (entget sn11))
  722.      (setq let12 (atoi (cdr (assoc 1 en11))))
  723.      (setq sn12 (entnext sn11))
  724.      (setq en12 (entget sn12))
  725.      (setq let13 (atof (cdr (assoc 1 en12))))
  726.      (setq sn13 (entnext sn12))
  727.      (setq en13 (entget sn13))
  728.      (setq let14 (atof (cdr (assoc 1 en13))))
  729.    )
  730.    (PROGN
  731.      (TERPRI)
  732.      (PRINT "...WRONG BLOCK...SHALL BE DATA-CABLE...")
  733.      (TERPRI)
  734.      (QUIT)
  735.    )
  736. )
  737. (setq        lista (list let1    let2    let3    let4    let5    let6
  738.             let7    let8    let9    let10   let11   let12
  739.             let13   let14
  740.            )
  741. )
  742. (setq lista lista)
  743. )
  744. (defun tbfill ( nelem value0 / ltemp count lista0)
  745.      (setq lista0 ( list value0 ))
  746. (repeat (- nelem 1)
  747.         (setq lista0 (cons value0 lista0))
  748. )
  749. )
  750. (defun tbadd ( ll1 ll2 / ii ltemp count lista0 value0)
  751.        (setq count (length ll1))
  752.         (if (not (= (length ll1) (length ll2))) (quit))
  753.         (setq ii 0)
  754.        (setq value0 (+ (nth ii ll1) (nth ii ll2)))
  755.         (setq lista0 (list value0))
  756. (repeat (- count 1)
  757.           (setq ii (+ 1 ii))
  758.           (setq value0 (+ (nth ii ll1) (nth ii ll2)))
  759.         (setq lista0 (cons value0 lista0))
  760. )
  761.         (setq lista0 (reverse lista0))
  762.        (setq lista0 lista0)
  763. )
  764. (defun tbextension (/            cont    title1  title2  title3  Ep
  765.             fpu            Ap            Nstrand Fjack   stressing
  766.             ljack   wslope  let1    let2    let3    llxy
  767.             llx            lly            llz            llz1    llz2    llz3 Radio
  768.             llalfa  llargo  lforce1 ,            lforce2 elong2
  769.             x0            y0            z0            largo0  alfa0   f0
  770.             f1            d0            d1            dj            alfacum datas
  771.             FICHA   offset  duct    ctrlpv
  772.            )
  773. (SETVAR "CMDECHO" 0)
  774. (command "_ucs" "_w" )
  775. (setq datas (tbdata))
  776. (setq title1 (nth 0 datas))
  777. (setq title2 (nth 1 datas))
  778. (setq title3 (nth 2 datas))
  779. (setq Ep (nth 3 datas))
  780. (setq fpu (nth 4 datas))
  781. (setq Ap (nth 5 datas))
  782. (setq Nstrand (nth 6 datas))
  783. (setq Fjack (nth 7 datas))
  784. (setq mu (nth 8 datas))
  785. (setq k (nth 9 datas))
  786. (setq Radio (nth 10 datas))
  787. (setq stressing (nth 11 datas))
  788. (setq ljack (nth 12 datas))
  789. (setq wslope (nth 13 datas))
  790. (setq Ep (* Ep 1000.0))
  791. (setq Radio (* Radio 1000.0))
  792. (setq ftension (/ (* Fjack 1000.0) (* Nstrand Ap fpu)))
  793. (setq f0 (* fpu ftension))
  794. (terpri)
  795. (setq let1 (getvar "dwgprefix"))
  796. (setq let2 (getstring T "Output file name   : "))
  797. (setq let3 (strcat let1 let2 ".prn"))
  798. (SETQ FICHA (OPEN let3 "w"))
  799. (terpri)
  800. (setq offset (getreal "Offset   of duct   : "))
  801. (terpri)
  802. (if offset
  803. (setq duct (getreal "Diameter of duct   : "))
  804.    (setq duct nil))
  805. (terpri)
  806. ;    (setq ctrlpv T)
  807. (setq ctrlpv (getstring  ".........PLAN VIEW : Y/N...."))
  808.    (if (or (=  ctrlpv "n") (= ctrlpv "N"))
  809.            (setq ctrlpv nil)
  810.        (setq ctrlpv T))
  811. (terpri)
  812.                                 ;(setq offset 93)
  813.                                 ;  (setq duct 102)
  814. (setq let2 "            ")
  815. (write-line let2 FICHA)
  816. (setq let2 "                                                                               VSL MIDDLE EAST LLC")
  817. (write-line let2 FICHA)
  818. (setq let2 "            ")
  819. (write-line let2 FICHA)
  820. (setq let2 "          EXTENSION CALCULATION   ")
  821. (write-line let2 FICHA)
  822. (setq let2 "            ")
  823. (write-line let2 FICHA)
  824. (write-line let2 FICHA)
  825. (setq let2 "PROJECT     :   ")
  826. (SETQ let2 (strcat let2 title1))
  827. (write-line let2 FICHA)
  828. (setq let2 "STRUCTURE   :   ")
  829. (SETQ let2 (strcat let2 title2))
  830. (write-line let2 FICHA)
  831. (setq let2 "TENDON REF  :   ")
  832. (SETQ let2 (strcat let2 title3))
  833. (write-line let2 FICHA)
  834. (setq let2 "Horiz Radius:   ")
  835. (if ctrlpv
  836.    (SETQ let2 (strcat let2 "Measured from plan view"))
  837.    (if (= Radio 0.0)
  838.      (SETQ let2 (strcat let2 "Straight"))
  839.      (SETQ let2 (strcat let2 (rtos (/ Radio 1000.0) 2 1) " m")))
  840.    )
  841. (write-line let2 FICHA)
  842. (setq let2 "Web Slope   :   1/")
  843. (SETQ let2 (strcat let2 (rtos wslope 2 2) "  "))
  844. (write-line let2 FICHA)
  845. (setq let2 "            ")
  846. (write-line let2 FICHA)
  847. (setq let2 "            ")
  848. (write-line let2 FICHA)
  849. (setq let2 "Steel References   ")
  850. (write-line let2 FICHA)
  851. (setq let2 "    Ultimate Tensile Strength  F's =    ")
  852. (SETQ let2 (strcat let2 (RTOS fpu 2 0) " MPa"))
  853. (write-line let2 FICHA)
  854. (setq let2 "    Young Modulus              Ep  =    ")
  855. (SETQ let2 (strcat let2 (RTOS (/ Ep 1000) 2 1) " KN/mm2"))
  856. (write-line let2 FICHA)
  857. (setq let2 "    Area Strand                As  =    ")
  858. (SETQ let2 (strcat let2 (RTOS Ap 2 0) " mm2"))
  859. (write-line let2 FICHA)
  860. (setq let2 "    Number of Strand           N   =    ")
  861. (SETQ let2 (strcat let2 (RTOS Nstrand 2 0) " nos"))
  862. (write-line let2 FICHA)
  863. (setq let2 "    Tendon Force               Pj  =    ")
  864. (SETQ let2 (strcat let2 (RTOS Fjack 2 1) " kN"))
  865. (write-line let2 FICHA)
  866. (setq let2 "    Stressing Force            sj  =    ")
  867. (SETQ let2 (strcat let2 (RTOS ftension 2 2) " x fpu"))
  868. (write-line let2 FICHA)
  869. (setq let2 "    Length Jack                Lj  =    ")
  870. (SETQ let2 (strcat let2 (RTOS ljack 2 1) " mm"))
  871. (write-line let2 FICHA)
  872. (setq let2 "    Stressing Operation            =    ")
  873. (IF (= stressing 3)
  874.        (SETQ let2 (strcat let2 (RTOS 2         2 1) " 2 sides not simoultanesly"))
  875.         (SETQ let2 (strcat let2 (RTOS stressing 2 1) " side"))
  876. )
  877. (write-line let2 FICHA)
  878. (setq let2 "            ")
  879. (write-line let2 FICHA)
  880. (setq let2 "Friction Constants   ")
  881. (write-line let2 FICHA)
  882. (setq let2 "    Curvature Coefficient      u   =    ")
  883. (SETQ let2 (strcat let2 (RTOS mu 2 5) " /radian"))
  884. (write-line let2 FICHA)
  885. (setq let2 "    Wobble Coefficient         k   =    ")
  886. (SETQ let2 (strcat let2 (RTOS k 2 5) " /m"))
  887. (write-line let2 FICHA)
  888. (IF (AND OFFSET DUCT)
  889.            (PROGN
  890. (setq let2 "            ")
  891.         (write-line let2 FICHA)
  892.         (write-line let2 FICHA)
  893.     (setq let2 "    Offset Web-Duct       Offset   =    ")
  894.     (SETQ let2 (strcat let2 (RTOS offset 2 0) " mm"))
  895.            (write-line let2 FICHA)
  896.             (setq let2 "    Duct Diameter          Ddiam   =    ")
  897.     (SETQ let2 (strcat let2 (RTOS duct 2 0) " mm"))
  898.            (write-line let2 FICHA)
  899. ))
  900. (setq let2 "            ")
  901. (write-line let2 FICHA)
  902. (write-line let2 FICHA)
  903. (write-line let2 FICHA)
  904. (setq        let2
  905. "       X(mm)       Y(mm)      Zh(mm)      Zw(mm)      ZT(mm)  Length(mm)   Alfa(rad)       P1/Pj  Delta1(mm)"
  906. )
  907. (if (= stressing 2)
  908.    (progn
  909.      (setq let3 "       P2/Pj  Delta2(mm)")
  910.      (setq let2 (strcat let2 let3))
  911.    )
  912. )
  913. (write-line let2 FICHA)
  914. (setq llxy (tbdataxy FICHA))
  915. (setq llx (car llxy))
  916. (setq lly (cadr llxy))
  917. (if (= Radio 0.0)
  918.        (SETQ llz1 (tbfill (length llx) 0.0))
  919.         (setq llz1 (tbdataz1 llx lly Radio))
  920. )
  921. (if (and  offset duct)
  922.         (setq llz2 (tbdataz2 llx lly wslope offset duct))
  923.            (SETQ llz2 (tbfill (length llx) 0.0))
  924.    )
  925. (SETQ llz3 (tbfill (length llx) 0.0))
  926. (if ctrlpv
  927.                   (if (= Radio 0.0)
  928.           (setq llz1 (cadr (tbdataxy FICHA)))
  929.                   (setq llz1 (tbz3  llx)))
  930.    )
  931. ;(print llz1) (print  llz2) (print llz3)
  932. ;  (print (length llz1)) (print (length llz2)) (print (length llz3))
  933. ;  (print (length llx)) (print (length lly)) (print (length llz1)) (print (length llz2)) (print (length llz3))
  934. ;  (print llx) (print lly) (print llz1) (print llz2) (print llz3)
  935. (setq llz (tbadd (tbadd llz1 llz2 ) llz3 ))
  936. ;  (print llz)
  937. (setq llalfa (tbdataalfa llx lly llz))
  938. (setq llargo (tbdatalargo llx lly (tbadd llz2 llz3 ) ))
  939. ;(print " 2       QUAIS>>> VSL")
  940. ;  (PRINT tbf0) (print llargo) (print llalfa) (print mu) (print k)
  941. (setq lforce1 (tbf0 llargo llalfa mu k))
  942. ;(print " 3       QUAIS>>> VSL")   
  943. (setq lforce2 (reverse (tbf0 (reverse llargo) (reverse llalfa) mu k)))
  944. ;(print " 4       QUAIS>>> VSL")
  945. (setq delta1 (tbdelta llargo lforce1 Ep f0))
  946. (setq        delta2
  947. (reverse (tbdelta (reverse llargo) (reverse lforce2) Ep f0))
  948. )
  949. (setq elong2 (tbext2 llargo lforce1 lforce2 delta1 delta2 Ep f0))
  950. (setq cont 0)
  951. (setq alfacum 0.0)
  952. (repeat (length llargo)
  953.    (setq x0 (nth cont llx))
  954.    (setq y0 (nth cont lly))
  955.    (setq z0 (nth cont llz))
  956.    (setq z1 (nth cont llz1))
  957.    (setq z2 (nth cont llz2))
  958.    (setq z3 (nth cont llz3))
  959.    (setq largo0 (nth cont llargo))
  960.    (setq alfa0 (nth cont llalfa))
  961.    (setq d0 (nth cont delta1))
  962.    (setq d1 (nth cont delta2))
  963.    (setq f0 (nth cont lforce1))
  964.    (setq f1 (nth cont lforce2))
  965.                                 ;            (setq let2 (strcat (rtosf x0 12 0)  (rtosf y0 12 0)  (rtosf z0 12 0)  (rtosf largo0 12 1)  (rtosf alfa0 12 2)  (rtosf f0 12 3) (rtosf d0 12 1)))
  966.    (setq let2 (strcat (rtosf x0 12 0)
  967.                (rtosf y0 12 0)
  968.                (rtosf z1 12 0)
  969.                (rtosf z2 12 0)
  970. ;                       (rtosf z3 12 0)
  971.                (rtosf z0 12 0)
  972.                (rtosf largo0 12 1)
  973.                (rtosf alfa0 12 3)
  974.                (rtosf f0 12 3)
  975.                (rtosf d0 12 1)
  976.        )
  977.    )
  978.    (if        (= stressing 2)
  979.      (progn
  980. (setq let1 (strcat (rtosf f1 12 3) (rtosf d1 12 1)))
  981. (setq let2 (strcat let2 let1))
  982.      )
  983.    )
  984.    (write-line let2 FICHA)
  985.    (setq alfacum (+ alfa0 alfacum))
  986.    (setq cont (+ 1 cont))
  987. )
  988. (setq let2 "            ")
  989. (write-line let2 FICHA)
  990. (write-line let2 FICHA)
  991. (setq let2 (strcat "Total Length     = " (rtosf largo0 12 1) " mm"))
  992. (write-line let2 FICHA)
  993. (setq let2 (strcat "Total Angle      = " (rtosf alfacum 12 2) " rad"))
  994. (write-line let2 FICHA)
  995. (if (= stressing 2)
  996.    (progn
  997.      (setq let2 (strcat "Length (P1=P2)   = "
  998.                  (rtosf (nth 0 elong2) 12 1)
  999.                  " mm"
  1000.          )
  1001.      )
  1002.      (write-line let2 FICHA)
  1003.      (setq let2 (strcat "Extension 1      = "
  1004.                  (rtosf (nth 1 elong2) 12 1)
  1005.                  " mm"
  1006.          )
  1007.      )
  1008.      (write-line let2 FICHA)
  1009.      (setq let2 (strcat "Extension 2      = "
  1010.                  (rtosf (nth 2 elong2) 12 1)
  1011.                  " mm"
  1012.          )
  1013.      )
  1014.      (write-line let2 FICHA)
  1015.    )
  1016.    (progn
  1017.      (setq let2 (strcat "Extension 1      = " (rtosf d0 12 1) " mm"))
  1018.      (write-line let2 FICHA)
  1019.      
  1020. (if (= stressing 3)
  1021.      (write-line (strcat "Topping up       = " (rtosf (+ (nth 1 elong2) (nth 2 elong2) (* -1.0 d0)) 12 1) " mm") FICHA)
  1022.   )
  1023.    )
  1024. )
  1025. (setq dj (/ (* 1.02 Fjack ljack 1000.0) (* Ap Ep Nstrand)))
  1026. (setq let2 (strcat "Extension Jack   = " (rtosf dj 12 1) " mm"))
  1027. (write-line let2 FICHA)
  1028. (close FICHA)
  1029. (SETVAR "CMDECHO" 1)
  1030. (terpri) (print "........END OF PROGRAM......") (TERPRI)
  1031. )
  1032. (defun tbfiledata (slope    offset   yvalue   /               data
  1033.            yvalue1  yvalue2  offset1  offset2  FICHA
  1034.            ncont    ncont0   ncont1   ncont2   ncont3
  1035.            ctrl            cad0     cad1     cad2     cad3
  1036.            cad4            let1     let2     let3
  1037.           )
  1038. (setq ctrl T)
  1039. (setq ncont
  1040. (setq ncont0 1)
  1041. (setq ncont1 (+ ncont0 ncont))
  1042. (setq ncont2 (+ ncont1 ncont))
  1043. (setq ncont3 (+ ncont2 ncont))
  1044. (setq yvalue1 0.0)
  1045. (setq yvalue2 0.0)
  1046. (setq offset1 0.0)
  1047. (setq offset2 0.0)
  1048. (setq let1 (getvar "dwgprefix"))
  1049. (setq let2 "zvalue")
  1050. (setq let3 (strcat let1 let2 ".prn"))
  1051. (SETQ FICHA (OPEN let3 "r"))
  1052. (SETQ CAD0 (READ-LINE FICHA))
  1053. (WHILE CTRL
  1054.    (IF        (SETQ CAD0 (READ-LINE FICHA))
  1055.      (PROGN
  1056. (SETQ CAD1 (atof (SUBSTR CAD0 ncont0 ncont)))
  1057. (SETQ CAD2 (atof (SUBSTR CAD0 ncont1 ncont)))
  1058. (SETQ CAD3 (atof (SUBSTR CAD0 ncont2 ncont)))
  1059. (SETQ CAD4 (atof (SUBSTR CAD0 ncont3 ncont)))
  1060. (if (and (= cad1 slope) (= cad2 offset))
  1061.   (if (not (> cad3 yvalue))
  1062.     (progn
  1063.       (setq yvalue1 cad3)
  1064.       (setq offset1 cad4)
  1065.     )
  1066.   )
  1067. )
  1068. (if (and (= cad1 slope) (= cad2 offset))
  1069.   (if (and (= yvalue2 0.0) (not (< cad3 yvalue)))
  1070.     (progn
  1071.       (setq yvalue2 cad3)
  1072.       (setq offset2 cad4)
  1073.     )
  1074.   )
  1075. )
  1076. (SETQ CTRL T)
  1077.      )
  1078.      (PROGN
  1079. (SETQ CTRL NIL)
  1080.      )
  1081.    )
  1082. )
  1083. (close FICHA)
  1084. (if (or (= offset1 0.0) (= offset2 0.0))
  1085.    (setq data offset)
  1086.    (if        (= offset1 offset2)
  1087.      (SETQ data offset1)
  1088.      (setq data (+ offset1
  1089.             (* (/ (- yvalue yvalue1) (- yvalue2 yvalue1))
  1090.                (- offset2 offset1)
  1091.             )
  1092.          )
  1093.      )
  1094.    )
  1095. )
  1096. (setq data (atoi (rtos data 2 0)))
  1097. )
  1098. (defun tbz3 ( llx0 / number tol list1 count count1 ctrl  ang ang1 ang2 dh dh1 p0 p10  pini pfin pref p1 p2 p3 p4 p5
  1099.          ss1 s1 s2 s3 en1 en2 en3 radio yref )
  1100. (setq tol 0.001)
  1101. ;  (print "...Delta H...")
  1102. ;  (setq dh (getreal))
  1103. (setq dh (abs (- (nth 1 llx0) (nth 0 llx0))))
  1104. (setq number 20.0)
  1105. (setq dh1 (/ dh number))
  1106. (terpri)
  1107. (print "......PLAN VIEW.......")
  1108. (print "...select cg tendon....")
  1109. (setq ss1 (ssget))
  1110. (terpri)
  1111. (print "...first point....")
  1112. (setq pini (getpoint))
  1113. (terpri)
  1114. (print "...last point....")
  1115. (setq pfin (getpoint))
  1116. (terpri)
  1117. (print "...reference point....")
  1118. (setq pref (getpoint))
  1119. (terpri)
  1120. (setq yref (nth 1 pref))
  1121. (setvar "osmode" 0)
  1122. (setvar "cmdecho" 0)
  1123. (setq s1 (ssname ss1 0))
  1124. (setq en1 (entget s1))
  1125. (setq p1 pini)
  1126. (setq p2 pfin)
  1127. (setq count 0) (setq count1 0)
  1128. (setq ctrl T)
  1129. (setq list1 (list (- (nth 1 p1) yref) ))
  1130. (setq ang (angle p1 p2))
  1131. (while ctrl
  1132.    
  1133.         (setq ang1 (- ang (/ pi 2 )))
  1134.         (setq ang2 (+ ang (/ pi 2 )))
  1135.    (if (< ang1 0.0) (setq ang1 (+ ang1 (* 2.0 pi))))
  1136.    (if (< ang2 0.0) (setq ang2 (+ ang2 (* 2.0 pi))))
  1137.         (setq p0  (polar p1 ang1 dh1))
  1138.         (setq p10 (polar p1 ang2 dh1))
  1139.         (command "arc" "c" p1 p0 p10 )
  1140.         (setq s2 (entlast))
  1141.         (setq en2 (entget s2))
  1142.         (command "trim" s1 "" s2 "")
  1143.         (setq s3 (entlast))
  1144.         (setq en3 (entget s3))
  1145.         (setq ang3 (cdr (assoc 50 en3)))
  1146.         (setq ang4 (cdr (assoc 51 en3)))
  1147.    
  1148. (if  (or (= (length list1) (- (length llx0 ) 1))
  1149.          (and (or (> tol (abs (- ang3 ang1)) ) (> tol (abs (- ang3 ang2))))
  1150.               (or (> tol (abs (- ang4 ang1)) ) (> tol (abs (- ang4 ang2))))
  1151.               )
  1152.          )
  1153.   (progn
  1154.     (setq ctrl nil)
  1155.     (setq p3 pfin)
  1156.     (setq count (- number 1))
  1157.        
  1158.     )
  1159.   (progn
  1160.         (setq ctrl T)
  1161.         
  1162.                     (if (or (> tol (abs (- ang3 ang1)) )
  1163.                 (> tol (abs (- ang3 ang2)) ))
  1164.                           (setq p3 (polar p1 ang4 dh1))
  1165.                           (setq p3 (polar p1 ang3 dh1))
  1166.                    )
  1167. ))
  1168.   (command "erase" s3 "")
  1169.    
  1170.            (setq count (+ 1 count))
  1171.        (if (= (fix (/ count number)) (/ count number))
  1172.   (progn
  1173.     (setq count1 (+ 1 count1))
  1174.                (setq list1 (cons (- (nth 1 p3) yref) list1))
  1175.     ))
  1176.             (setq ang (angle p1 p3))
  1177.            (setq p1 p3)
  1178.    )
  1179.   (setq list1 (reverse list1))
  1180. )
  1181. (defun tbrecess ( /        cont  largo largo1 datas  factorx factory title1 bw1 bw2 h1 h2 alfaa alfav alfah depth
  1182.          alfai alfa alfa1 alfa2 alfa3 x0 x1 y0 y1 z1 z2 z3 zvalue txt0 txt1
  1183.          p0  p01 p1 p2 p3 p4 p5 p6 p7 p8 alt1 ptext scale s1 s2 s3 s4 s5 s6 aux0 aux1 aux2 aux3 aux4 aux5 aux6
  1184.         beta1 beta2 v1 v2 v3 w1 w2 w3 u1 u2 u3 listw listh hvalue wvalue
  1185.          )
  1186. (SETVAR "CMDECHO" 0)
  1187. (command "_ucs" "_w" )
  1188. (setvar "plinetype" 0)
  1189. (setq ALT1 50)
  1190. (setq scale 1)
  1191. ;  (setq alfa (list  45 135 225 315 ))
  1192. (terpri)                  
  1193. (SETQ p0  (getpoint    "center point of anchorage"))
  1194.   (terpri)
  1195. (SETQ p01 (getpoint p0 "center point at the top of anchorage"))
  1196. (setq alfaa (/ (* 180.0 (angle p0 p01)) pi ))
  1197. (setq alfaa (- 90.0 alfaa ))
  1198. (setq x0 (nth 0 p0))
  1199. (setq y0 (nth 1 p0))
  1200. (setq datas (tbdata2))
  1201. (setq title1 (nth 0 datas))
  1202. (setq bw1    (nth 1 datas))
  1203. (setq bw2    (nth 2 datas))
  1204. (setq h1     (nth 3 datas))
  1205. (setq h2     (nth 4 datas))
  1206. ;  (setq alfaa  (nth 5 datas))
  1207. (setq alfav  (* -1.0 (nth 5 datas)))
  1208. (setq alfah  (* -1.0 (nth 6 datas)))
  1209. ;(print alfav ) (print alfah)
  1210. (setq depth  (nth 7 datas))
  1211. (setq alfai  (nth 8 datas))
  1212.   (setq alfa (list        
  1213.           
  1214.            (/ (* 180 (atan (/ h1 bw2))) pi)                  
  1215.            (- 180 (/ (* 180 (atan (/ h1 bw1))) pi))
  1216.                   (+ 180 (/ (* 180 (atan (/ h2 bw1))) pi))
  1217.            (- 360 (/ (* 180 (atan (/ h2 bw2))) pi))
  1218.            ))
  1219. (setq largo (list
  1220.         (sqrt (+ (* h1 h1) (* bw2 bw2)))
  1221.         (sqrt (+ (* h1 h1) (* bw1 bw1)))
  1222.        
  1223.         (sqrt (+ (* h2 h2) (* bw1 bw1)))
  1224.         (sqrt (+ (* h2 h2) (* bw2 bw2))) ))
  1225. (setq listh (list h1 h1 h2 h2))
  1226. (setq listw (list bw2 bw1 bw1 bw2))
  1227. ; (print datas) (print alfa) (print largo)
  1228. (setq u1 (* 1000 (sin (/ (*  alfah pi ) 180.0))))  
  1229. (setq u2 (* 1000 (cos (/ (*  alfah pi ) 180.0))))
  1230. (setq u3 (/ (* -1.0 u2 (sin (/ (*  alfav pi ) 180.0))) (cos (/ (*  alfav pi ) 180.0))))
  1231. (setq aux0 (sqrt (+ (* u1 u1) (* u2 u2) (* u3 u3))))
  1232. (setq u1 (/ u1 aux0))   (setq u2 (/ u2 aux0))   (setq u3 (/ u3 aux0))
  1233. (setq v1   (* 1000 (sin (/ (*  alfaa  pi ) 180.0))))
  1234. (setq v2 0.0)
  1235. (setq v3   (* 1000 (cos (/ (*  alfaa  pi ) 180.0))))
  1236. (setq aux0 (sqrt (+ (* v1 v1) (* v2 v2) (* v3 v3))))
  1237. (setq v1 (/ v1 aux0))   (setq v2 (/ v2 aux0))   (setq v3 (/ v3 aux0))
  1238. (setq w1   (* 1000 (sin (/ (*  (+ 90.0 alfaa)  pi ) 180.0))))
  1239. (setq w2 0.0)
  1240. (setq w3   (* 1000 (cos (/ (*  (+ 90.0 alfaa)  pi ) 180.0))))
  1241. (setq aux0 (sqrt (+ (* w1 w1) (* w2 w2) (* w3 w3))))
  1242. (setq w1 (/ w1 aux0))   (setq w2 (/ w2 aux0))   (setq w3 (/ w3 aux0))
  1243. (setq aux1 (- (* u2 v3) (* v2 u3)))
  1244. (setq aux2 (- (* v1 u3) (* u1 v3)))
  1245. (setq aux3 (- (* u1 v2) (* v1 u2)))
  1246. (setq aux0 (sqrt (+ (* aux1 aux1) (* aux2 aux2) (* aux3 aux3))))
  1247. (setq aux1 (/ aux1 aux0))   (setq aux2 (/ aux2 aux0))   (setq aux3 (/ aux3 aux0))
  1248. (setq aux4 (- (* u2 aux3)  (* aux2 u3) ))
  1249. (setq aux5 (- (* aux1 u3)  (* u1 aux3) ))
  1250. (setq aux6 (- (* u1 aux2)  (* aux1 u2) ))
  1251. (setq aux0 (sqrt (+ (* aux4 aux4) (* aux5 aux5) (* aux6 aux6))))
  1252. (setq aux4 (/ aux4 aux0))   (setq aux5 (/ aux5 aux0))   (setq aux6 (/ aux6 aux0))
  1253. (setq beta1 (tbangle w1 w2 w3 0.0 0.0  0.0 aux1 aux2 aux3))
  1254. (setq beta2 (tbangle v1 v2 v3 0.0 0.0  0.0 aux4 aux5 aux6))
  1255. (setq aux0 (/ (/ (sin beta1) (cos beta1)) (cos beta2)  ))
  1256. (setq beta1 (/ (sin beta2) (cos beta2)   ))
  1257. (setq beta2 aux0)
  1258. ;  (print (list u1 u2 u3 v1 v2 v3  w1 w2 w3))
  1259. ;  (print (list aux1 aux2 aux3 aux4 aux5 aux6))
  1260. ;  (print (list beta1 beta2))
  1261.   
  1262. (setvar "osmode" 0)
  1263. (setq cont 0)
  1264. (repeat 4
  1265.    (setq alfa1 (- (nth cont alfa) alfaa))
  1266.    
  1267.    (setq largo1   (nth cont largo))
  1268.    (setq hvalue   (nth cont listh))
  1269.    (setq wvalue   (nth cont listw))
  1270.    
  1271.    (setq x1 (* largo1 (cos (/ (* pi alfa1 ) 180.0))))
  1272.    (setq y1 (* largo1 (sin (/ (* pi alfa1 ) 180.0))))
  1273.    (if (> y1 0.0) (setq factorx 1.0) (setq factorx -1.0))
  1274.    (if (> x1 0.0) (setq factory 1.0) (setq factory -1.0))
  1275.     (setq z1 (* factorx hvalue beta1  (/ aux5 (abs aux5))    ) )
  1276.     (setq z2 (* factory wvalue beta2  (/ aux2 (abs aux2))    ) )
  1277. ;     (PRINT (LIST  factorx hvalue beta1  (/ aux5 (abs aux5))   Z1 ) )
  1278. ;     (PRINT (LIST  factory wvalue beta2  (/ aux2 (abs aux2))   Z2 ) )
  1279.    (setq z3 (+ z1 z2))
  1280.    (setq temp (list x1 y1 z1 z2 z3)) (print temp)
  1281.    
  1282.    (setq ptext (list (+ x0 x1) (+ y0 y1)))
  1283.    (if (= cont 0)
  1284.      (setq zvalue  (list (list x1 y1 z3 ptext)))
  1285.      (setq zvalue (append  zvalue (list (list  x1 y1 z3 ptext )))))
  1286.    (if (> cont 1) (setq txt0 "TC") (setq txt0 "BC"))
  1287.    (setq txt1 (strcat "(" (rtos (abs x1) 2 0) "," (rtos (abs y1) 2 0) "," (rtos  z3 2 0) ")") )
  1288.    (command "_TEXT"
  1289.      "J"
  1290.      txt0
  1291.      ptext
  1292.      ALT1
  1293.      0.0
  1294.      txt1
  1295.    )
  1296.    
  1297.    (setq cont (+ 1  cont))
  1298.    )
  1299. (setq p1 (nth 3 (nth 0 zvalue)))
  1300. (setq p2 (nth 3 (nth 1 zvalue)))
  1301. (setq p3 (nth 3 (nth 2 zvalue)))
  1302. (setq p4 (nth 3 (nth 3 zvalue)))
  1303. (setq p5 (polar p1 (+ (angle p1 p2) (* pi 0.25)) (* -1.0 (nth 2 (nth 0 zvalue)) scale)))
  1304. (setq p6 (polar p2 (+ (angle p1 p2) (* pi 0.25)) (* -1.0 (nth 2 (nth 1 zvalue)) scale)))
  1305. (setq p7 (polar p3 (+ (angle p4 p3) (* pi 0.25)) (* -1.0 (nth 2 (nth 2 zvalue)) scale)))
  1306. (setq p8 (polar p4 (+ (angle p4 p3) (* pi 0.25)) (* -1.0 (nth 2 (nth 3 zvalue)) scale)))
  1307.   (command "pline" p1 p5 p8 p4 p1 "")   ;(command "region" (entlast) "") (setq s1 (entlast))
  1308.   (command "pline" p2 p6 p7 p3 p2 "")   ;(command "region" (entlast) "") (setq s2 (entlast))
  1309.   (command "pline" p1 p2 p3 p4 p1 "")   ;(command "region" (entlast) "") (setq s3 (entlast))
  1310.   (command "pline" p5 p6 p7 p8 p5 "")   ;(command "region" (entlast) "") (setq s4 (entlast))
  1311. ;   (command "union" s1 s2 s3 s4 "")
  1312. (terpri) (print "........END OF PROGRAM......") (TERPRI)
  1313. )
  1314. (defun tbdata2 (/      title1 title2 title3 Ep          fpu         Ap        Nstrand
  1315.        Fjack  mu     k            Radio  stressing         ljack        lista
  1316.        ,      ss     sl            sn           en          sn0         sn1        sn2
  1317.        sn3    sn4    sn5    sn6           sn7          sn8         sn9        sn10
  1318.        sn11   sn12   sn13   sn14   ,          en0         en1        en2
  1319.        en3    en4    en5    en6           en7          en8         en9        en10
  1320.        en11   en12   en13   en14   ,          let1         let2        let3
  1321.        let4   let5   let6   let7   let8          let9         let10        let11
  1322.        let12  let13  let14
  1323.       )
  1324. (terpri)
  1325. (print "...Select Block with Datas ....")
  1326. (setq ss (ssget))
  1327. (setq sl 1)
  1328. (setq sn (ssname ss (- sl 1)))
  1329. (setq en (entget sn))
  1330. (if (= (cdr (assoc 2 en)) "RECESS-DATA")
  1331.    (progn
  1332.      (setq sn0 (entnext sn))
  1333.      (setq en0 (entget sn0))
  1334.      (setq let1 (cdr (assoc 1 en0)))
  1335.      (setq sn1 (entnext sn0))
  1336.      (setq en1 (entget sn1))
  1337.      (setq let2 (atof (cdr (assoc 1 en1))))
  1338.      (setq sn2 (entnext sn1))
  1339.      (setq en2 (entget sn2))
  1340.      (setq let3 (atof (cdr (assoc 1 en2))))
  1341.      
  1342.      (setq sn3 (entnext sn2))
  1343.      (setq en3 (entget sn3))
  1344.      (setq let4 (atof (cdr (assoc 1 en3))))
  1345.      (setq sn4 (entnext sn3))
  1346.      (setq en4 (entget sn4))
  1347.      (setq let5 (atof (cdr (assoc 1 en4))))
  1348.      (setq sn5 (entnext sn4))
  1349.      (setq en5 (entget sn5))
  1350.      (setq let6 (atof (cdr (assoc 1 en5))))
  1351.      (setq sn6 (entnext sn5))
  1352.      (setq en6 (entget sn6))
  1353.      (setq let7 (atof (cdr (assoc 1 en6))))
  1354.      (setq sn7 (entnext sn6))
  1355.      (setq en7 (entget sn7))
  1356.      (setq let8 (atof (cdr (assoc 1 en7))))
  1357.      (setq sn8 (entnext sn7))
  1358.      (setq en8 (entget sn8))
  1359.      (setq let9 (atof (cdr (assoc 1 en8))))
  1360.      
  1361.      
  1362.    )
  1363.    (PROGN
  1364.      (TERPRI)
  1365.      (PRINT "...WRONG BLOCK...SHALL BE DATA-CABLE...")
  1366.      (TERPRI)
  1367.      (QUIT)
  1368.    )
  1369. )
  1370. (setq        lista (list let1    let2    let3    let4    let5    let6
  1371.             let7  let8 let9
  1372.            )
  1373. )
  1374. (setq lista lista)
  1375. )

 
192400z35zu71ue3tz3311.jpg
工具B_5h。lsp
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:44:49 | 显示全部楼层
试着从点开始画线,perp到object1,然后intesect到第一个距离,然后使用extend到object2。这条线给出了总长度。
 
研究Vl intersectwith比Inters更好地使用直线和pline等对象。
回复

使用道具 举报

6

主题

15

帖子

9

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 19:04:55 | 显示全部楼层
 
我们总是这样做,但当跨度大、腹板太多时,每1米手动一次是令人头痛的。。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:43:56 | 显示全部楼层
这是在lisp中使用该方法的建议,只需使用手动检查来查看这是否是所需的。此外,90年代的vlax curve getclosestpointto再次使用对象,而不是捕捉perp。
 
  1. ;example by Alan JT modified by me to use a PoinT
  2. (setvar "osmode" 0)
  3. (setq ent (entsel))
  4. (setq pnt (vlax-curve-getclosestpointto (car ent) PT))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:53 , Processed in 0.466648 second(s), 74 queries .

© 2020-2025 乐筑天下

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