乐筑天下

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

[编程交流] 帮我处理我的脏代码

[复制链接]

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:06:55 | 显示全部楼层 |阅读模式
嘿伙计们,
祝大家新年快乐!
祝你在新的一年里身体健康,万事如意。
 
我需要代码方面的帮助。我正试图编写一个lisp,将高程文本放置在选定多段线的交点处。
我的英语太差了,所以我附上了一个文件来更好地解释我的任务。
 
任何想法都很好。
测试。图纸
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:11:34 | 显示全部楼层
对不起,伙计们,
我忘了发代码。
 
  1. (defun c:perfil()
  2. (setq cota-base (getpoint "\nInforme um ponto para cota base :"))
  3. (setq valor-cota (getreal "\nInforme a cota :"))
  4. (setq mostre (entsel "\nSelecione a linha do projeto : "))
  5. (setq bto (getpoint "\nInforme um ponto base para os textos :"))
  6. ;;;------------------------------------------------------------------------------------------------------------
  7. (setvar"cmdecho" 0)
  8. ;(command "osmode" 0)
  9. (command "angbase" 270)
  10. (command "angdir" 1)
  11. (setq flagv "falso")
  12. (setq controle 0)
  13. (setq controle1 0)
  14. (setq contador 0)
  15. (while (= flagv "falso")
  16. (setq linha (entget (car mostre )))
  17. (setq verificador (cdr(assoc 0 linha)))
  18. (if (= verificador "LWPOLYLINE")
  19. (progn
  20.   (setq verif (cdr (assoc 70 linha)))
  21.   (setq flagv "verdade")
  22. )
  23. (princ "tNão é Polyline !! ")
  24. )
  25. )
  26. (setq controle1 (length linha))
  27. (setq amostra '())
  28. (repeat controle1
  29.   (setq x (caar linha))
  30.   (if (= x 10)
  31.    (progn
  32.     (setq item (car linha))
  33.     (setq amostra (cons item amostra))
  34.     (setq contador (1+ contador))
  35.    )
  36.   )
  37.   (setq linha (cdr linha))
  38. )
  39. (setq amostra1 (reverse amostra))
  40. (if (= verif 1)
  41.   (setq  amostra (cons (car amostra1)  amostra))
  42.   (setq contador (1- contador))
  43. )
  44. (setq controle contador)
  45. (repeat controle
  46.   (setq PTO1 (cdr(car amostra)))
  47.   (setq PTO2 (cdr(car(cdr amostra))))
  48.   (AZIMUTAR)
  49.   (setq amostra(cdr amostra))
  50. )
  51. (princ)
  52. )
  53. (defun AZIMUTAR ()
  54. (setq padroes (getvar "osmode"))
  55. (setvar"cmdecho" 0)
  56. (command "osmode" 0)
  57. (setq  A  PTO1)
  58. (setq  B PTO2)
  59. ;;(setq  C  " - Az  ")
  60. ;;(setq  D  (angtos (angle A B) 1 4))
  61. ;;(MUDAR)
  62. ;;(setq  E (rtos (distance A B) 2 4))
  63. ;;(setq DADO (strcat E C PALAV))
  64. ;;(PARALELO)
  65. ;;(command "text" "j" "mc" ponto_meio 2.5 inicio dado )
  66. ;;(command "osmode" padroes)
  67. (setq angulo (angle A B))
  68. (setq ang2 (+ angulo (dtr 90)))
  69. (princ angulo)
  70. (princ ang2)
  71. ;-------------------------------------------------------------------------------------------------------------------------------------
  72. (setq x-bto (car bto)
  73.      x-b (car b))
  74. (setq dist (- x-b x-bto))  
  75. (setq p-proj (polar bto 0 dist))
  76. (setq p-proj (polar p-proj (/ pi 2) 0.1))
  77.    (setq p-proj (polar p-proj 179 0.1))
  78. (setq cota (cadr cota-base)
  79.    c-proj (cadr b))
  80. (setq cota-final (rtos(+(abs(- c-proj cota))valor-cota)2 3))
  81. (command "zoom" "o" mostre "")
  82. (command "text" p-proj (/ pi 2) cota-final "")
  83. ;-------------------------------------------------------------------------------------------------------------------------------------
  84. )
  85. (defun PARALELO   ()
  86. (setq  A1  (polar A (+ (/ pi 2)(angle B A )) 2))
  87. (setq  B1  (polar B (+ (/ pi 2)(angle B A )) 2))
  88. (setq ptx (/    (+ (car B1) (car A1)) 2))
  89. (setq pty (/    (+ (cadr B1) (cadr A1)) 2))
  90. (setq ponto_meio (list ptx pty))
  91. (if (< (car A1)(car B1))
  92. (setq inicio  B1)
  93. (setq inicio A1)
  94. )
  95. )
  96. (defun MUDAR ()
  97. (setq XL 2)
  98. (setq  J "d")
  99. (setq COM1 (substr D 1 1))
  100. (while (< XL   5)
  101. (setq LETRAT (substr D XL 1))
  102. (setq RESTOT (substr D (+ 1 XL) ))
  103. (if  (= LETRAT J)
  104.   (progn (setq J "%%d")
  105.    (setq  XL 6)
  106.    (setq  PALAV (strcat  COM1  J   RESTOT))
  107.   )
  108. )
  109. (setq  COM1 (strcat  COM1 LETRAT ))
  110. (setq XL (1+ XL))
  111. )
  112. )
  113. (defun RTD ()
  114. (/ (* (angle A B) 180) Pi)
  115. )
  116. (defun DTR (AZIMUTE)
  117. (* (/ AZIMUTE 180.0) pi) ;; esta linha também foi alterada
  118.    (setvar "osmode" 16383)
  119. )
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:18:59 | 显示全部楼层
此例程将高程放置在项目线的每个端点。(选定的多段线)
我只需要更改交点的端点。
 
有人能帮我吗?
 
提前感谢。
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:21:42 | 显示全部楼层
Madruga_SP,
一种不同的方法,但我希望结果是你想要的。
随附的是您的dwg和一些注释,以解释代码的使用。
 
  1. (defun c:perfil (/  ss1  ss  itm  obj  ptlst
  2.   ent1  obj1  int  osm_old ct_base base_obj
  3.   lbtxt  txt_obj dist  pt_txt
  4. )
  5. (vl-load-com)
  6. (prompt "\nSelecione a Polyline do projeto : ")
  7. (if (setq ss1 (ssget "_:S:E" '((0 . "LWPOLYLINE"))))
  8.    (progn
  9.      (prompt "\nSelecione as linhas verticais: ")
  10.      (if (setq ss (ssget '((0 . "LINE"))))
  11. (progn
  12.   (setq itm   0
  13. obj   (vlax-ename->vla-object (ssname ss1 0))
  14. ptlst nil
  15.   )
  16.   (repeat (sslength ss)
  17.     (setq ent1 (ssname ss itm)
  18.    obj1 (vlax-ename->vla-object ent1)
  19.     )
  20.     (if (setq int (vla-IntersectWith obj obj1 acExtendNone))
  21.       (progn
  22. (setq int   (vlax-safearray->list (vlax-variant-value int))
  23.        ptlst (append ptlst (list int))
  24. )
  25.       )
  26.       ;; progn
  27.     )
  28.     ;; If
  29.     (setq itm (1+ itm))
  30.   )
  31.   (setq osm_old (getvar "OSMODE"))
  32.   (setvar "OSMODE" 0)
  33.   (setq ct_base (entsel "\nSelecione a linha da cota base :"))
  34.   (setq base_obj (vlax-ename->vla-object (car ct_base)))
  35.   (setq ref
  36.   (atof
  37.     (cdr
  38.       (assoc
  39.         1
  40.         (entget
  41.    (car
  42.      (entsel "\nSelecione o texto da cota base :")
  43.    )
  44.         )
  45.       )
  46.     )
  47.   )
  48.   )
  49.   (setq
  50.     lbtxt (entsel "\nSelecione a linha base para os textos :")
  51.   )
  52.   (setq txt_obj (vlax-ename->vla-object (car lbtxt)))
  53.   (foreach n ptlst
  54.     (setq dist (vlax-curve-getClosestPointTo base_obj n T))
  55.     (setq dist (+ (distance n dist) ref))
  56.     (setq pt_txt (vlax-curve-getClosestPointTo txt_obj n))
  57.     (setq pt_txt (polar pt_txt (* (/ pi 4) 3) 0.1))
  58.     (command "TEXT" pt_txt 0. (rtos dist 2 3))
  59.   )
  60.   ;; foreach
  61. )
  62. ;; progn
  63.      )
  64.      ;; if
  65.    )
  66.    ;; progn
  67. )
  68. ;; if
  69. (setvar "OSMODE" osm_old)
  70. (princ)
  71. )

 
希望有帮助
 
亨里克
测试1。图纸
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:26:43 | 显示全部楼层
嗨,Henrinque,
谢谢你的快速回放。
 
出色的lisp例程!
非常感谢,非常感谢你的帮助。
 
当做
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:31:24 | 显示全部楼层
不客气,Madruga_SP
 
亨里克
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:38:47 | 显示全部楼层
亨里克,
我可以请你再修改一件代码吗?
因为我需要添加两个信息:cota do coletor e defoundidade do coletor。
 
顺致敬意,
 
例如
Lisp Perfil。图纸
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:41:10 | 显示全部楼层
Madruga_SP,
随附的是示例图纸,
我认为代码可以满足您的需要。
 
  1. (defun c:perfil (/   ss1    ss     itm      obj      osm_old
  2.   angb_old angd_old ct_base  base_obj ref      lbtxt
  3.   pt1   pt2    pt3     ent1     obj1     ss
  4.   itm   ptint    lent     txt_obj  ptdist   grade
  5.   pt_txt   pt_txt1  pt_txt2
  6. )
  7. (vl-load-com)
  8. (prompt "\nSelecione a Polyline do Grade : ")
  9. (if (setq ss1 (ssget "_:S:E" '((0 . "LWPOLYLINE"))))
  10.    (progn
  11.      (prompt "\nSelecione as linhas verticais do Coletor: ")
  12.      (if (setq ss (ssget '((0 . "LINE,LWPOLYLINE"))))
  13. (progn
  14.   (setq itm  0
  15. obj  (vlax-ename->vla-object (ssname ss1 0))
  16. osm_old  (getvar "OSMODE")
  17. angb_old (getvar "ANGBASE")
  18. angd_old (getvar "ANGDIR")
  19.   )
  20.   (setvar "OSMODE" 0)
  21.   (setvar "ANGBASE" (/ PI 2.))
  22.   (setvar "ANGDIR" 1)
  23.   (setq ct_base  (entsel "\nSelecione a linha da cota base :")
  24. base_obj (vlax-ename->vla-object (car ct_base))
  25. ref  (atof
  26.      (cdr
  27.        (assoc
  28.          1
  29.          (entget
  30.     (car
  31.       (entsel "\nSelecione o texto da cota base :")
  32.     )
  33.          )
  34.        )
  35.      )
  36.    )
  37.   )
  38.   (setvar "OSMODE" 512)
  39.   (prompt
  40.     "\nSelecione a linha base para os textos cota do grade:"
  41.   )
  42.   (setq lbtxt
  43.   (nentselp
  44.     "\nSelecione a linha base para os textos cota do grade:"
  45.     (setq pt1 (getpoint))
  46.   )
  47.   )
  48.   (setvar "OSMODE" 128)
  49.   (setq pt2   (getpoint
  50.   pt1
  51.   "\nSelecione a linha base para os textos cota do coletor:"
  52.        )
  53. pt3   (getpoint
  54.   pt1
  55.   "\nSelecione a linha base para os textos profundidade do coletor:"
  56.        )
  57. dist1 (distance pt1 pt2)
  58. dist2 (distance pt1 pt3)
  59.   )
  60.   (repeat (sslength ss)
  61.     (setq ent1 (ssname ss itm)
  62.    obj1 (vlax-ename->vla-object ent1)
  63.     )
  64.     (if (setq ptint (vla-IntersectWith obj obj1 acExtendNone))
  65.       (progn
  66. (setq lent    (vla-get-length obj1)
  67.        txt_obj (vlax-ename->vla-object (car lbtxt))
  68.        ptint   (vlax-safearray->list
  69.    (vlax-variant-value ptint)
  70.         )
  71.        ptdist  (vlax-curve-getClosestPointTo base_obj ptint T)
  72.        grade   (+ (distance ptint ptdist) ref)
  73.        pt_txt  (vlax-curve-getClosestPointTo txt_obj ptint)
  74.        pt_txt  (polar pt_txt (* (/ pi 4) 3) 0.15)
  75. )
  76. (command "TEXT" pt_txt 0. (rtos grade 2 3))
  77. (setq pt_txt1 (polar pt_txt (angle pt1 pt2) dist1))
  78. (command "TEXT" pt_txt1 0. (rtos (- grade lent) 2 3))
  79. (setq pt_txt2 (polar pt_txt (angle pt1 pt3) dist2))
  80. (command "TEXT" pt_txt2 0. (rtos lent 2 3))
  81.       )
  82.       ;; progn
  83.     )
  84.     ;; If
  85.     (setq itm (1+ itm))
  86.   )
  87.   ;; repeat
  88. )
  89. ;; progn
  90.      )
  91.      ;; if
  92.    )
  93.    ;; progn
  94. )
  95. ;; if
  96. (setvar "OSMODE" osm_old)
  97. (setvar "ANGBASE" angb_old)
  98. (setvar "ANGDIR" angd_old)
  99. (princ)
  100. )

 
希望有帮助
 
亨里克
Lisp Perfil-2。图纸
回复

使用道具 举报

24

主题

135

帖子

111

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
120
发表于 2022-7-6 07:47:53 | 显示全部楼层
嗨,Henrique,
再次感谢。你的代码太棒了!
这正是我多年来一直在寻找的。我真的很感谢你的帮助和很好的解释如何使用代码。
 
但是你的文字位置不正确。也许我做错了什么。
你能帮我找出我的错误吗?
 
再次感谢你,我的朋友。
Muito obrigado,meu amigo。
 
Lisp Perfil-3。图纸
回复

使用道具 举报

1

主题

475

帖子

481

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 07:51:21 | 显示全部楼层
Madruga_SP,
我已经看到了错误,
我现在正在做另一个项目,
但我会尽快修复,
 
亨里克
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 15:09 , Processed in 1.401494 second(s), 72 queries .

© 2020-2025 乐筑天下

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