乐筑天下

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

[编程交流] 用于输出的2D级lisp

[复制链接]

18

主题

78

帖子

61

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 07:21:16 | 显示全部楼层 |阅读模式
曾经想要斜坡坡度的尺寸。(在二维/平面中绘制时)
我有,所以我创建了这个lisp来节省手动计算和创建一些文本的时间。
  1. ; Grade     
  2. ;      
  3. ;  by Robert Condon   
  4. ; 13/9/12     
  5. ;      
  6. ;      
  7. ;  To use: Select two points from left to
  8. ;  right and it will give you the
  9. ;  grade between the points
  10. ;      
  11. ;      
  12. ;      
  13. (defun c:grd ()
  14. (setq p1 (getpoint "\n1st point of Grade:"))
  15. (setq p1X (car p1))
  16. (setq p1Y (cadr p1))
  17. (setq p2 (getpoint "\n2nd point of Grade:"))
  18. (setq p2X (car p2))
  19. (setq p2Y (cadr p2))
  20. (setq rise (- p2Y p1Y))
  21. (setq run (- p2X p1X))
  22. (setq textposY (float
  23.   (if(> (+ p1Y p2Y) 0)
  24.     (/ (+ p1Y p2Y) 2 )
  25.     (setq textdisp 0)
  26.         )))
  27. (setq textposX (float(/ (+ p1X p2X) 2 )))
  28. (setq textpos (list textposX textposY 0.0))
  29. (setq trot (angle p1 p2))
  30. (if (> rise 0)
  31. (progn
  32.    (setq rise1a (/ run rise)
  33.   )
  34.    (setq rise1 (rtos(/ run rise)
  35.   )
  36.      )
  37. )
  38. )
  39. (if (< rise 0)
  40. (progn
  41.    (setq rise1a (/ run rise)
  42.   )
  43.    (setq rise1 (rtos(/ run rise)
  44.   )
  45.      )
  46. )
  47. )
  48. (if (> run 0)
  49. (setq grade (rtos(* 100 (/ rise run))
  50.   )
  51.      )
  52. )
  53. (if (< run 0)
  54. (setq grade (rtos(* 100 (/ rise run))
  55.   )
  56.      )
  57. )
  58. (if (>= 9.999 rise1a)
  59. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" rise1 ":1"))
  60. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" grade "%"))
  61. )
  62. (if (progn (> 1 rise1a)(< 0 rise1a)
  63. )
  64. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" "1:" (rtos(* rise1a 100)
  65.   ) ))
  66.       )
  67. (if (progn (< -1 rise1a)(> 0 rise1a)
  68. )
  69. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" "1:" (rtos(* rise1a 100)
  70.   ) ))
  71.       )
  72. (if (= rise 0)
  73.     (progn (setq textdisp "")(princ "\nGrade is flat"))
  74.    )
  75. (if (= run 0)
  76.     (progn (setq textdisp "")(princ "\nGrade is vertical")
  77.       )
  78.    )
  79. ;(setq text size (getint "Text size: "))
  80. (entmake (list
  81.    '(0 . "MTEXT")
  82.    '(100 . "AcDbEntity")
  83.    '(67 . 0)
  84.    '(410 . "Model")
  85.    '(100 . "AcDbMText")
  86.    (cons 10 textpos)
  87.    '(40 . 0.5)
  88.    '(41 . 0)
  89.    '(71 .
  90.    '(72 . 5)
  91.    (cons 1 textdisp)
  92.    '(7 . "ISO3098B")
  93.    '(210 0.0 0.0 1.0)
  94.    '(11 1.0 0.0 0.0)
  95.    '(42 . 0.833333)
  96.    '(43 . 4.66667)
  97.    (cons 50 trot)
  98.    '(73 .
  99.    '(44 . 1.0)))
  100. (princ)
  101. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:32:27 | 显示全部楼层
第一眼看到两条评论:
[列表]
  • 不确定这是什么“\\pxsa1.4286;”代码的意思是,请验证在显示时似乎被解析为链接(在高级编辑器中有一个“自动解析文本中的链接”选项,您可能想要禁用)。
  • 当选择第二个点作为视觉辅助点时,我想要一条动态线,并且与内置命令兼容:
    [/列表]
    1. (setq p2 (getpoint [color=magenta]p1[/color] "\n2nd point of Grade:"))
  • 回复

    使用道具 举报

    18

    主题

    78

    帖子

    61

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    90
    发表于 2022-7-6 07:50:45 | 显示全部楼层
    这将从插入点偏移文本1.4286。如果你愿意的话,这只是我为periouse lisp删除继承的东西。
     
     
     
     
    谢谢你的代码我不知道该怎么做谢谢
    回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-6 07:54:28 | 显示全部楼层
    如果这有助于选择两个点,则Civ3d可以选择坡度标签。
    回复

    使用道具 举报

    18

    主题

    78

    帖子

    61

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    90
    发表于 2022-7-6 08:06:51 | 显示全部楼层
     
    是,但用于处理MX或12D的2D输出
     
    在这方面做了一些工作,以消除我遇到的一些错误
    1. ; Grade     
    2. ;      
    3. ;  by Robert Condon   
    4. ; 29/10/12   
    5. ;      
    6. ;      
    7. ;  To use: Select two points from left to
    8. ;  right and it will give you the
    9. ;  grade between the points
    10. ;      
    11. ;      
    12. ;      
    13. (defun c:grd ()
    14. (setq p1 (getpoint "\n1st point of Grade:"))
    15. (setq p1X (car p1))
    16. (setq p1Y (cadr p1))
    17. (setq p2 (getpoint p1 "\n2nd point of Grade:"))
    18. (setq p2X (car p2))
    19. (setq p2Y (cadr p2))
    20. (setq rise (- p2Y p1Y))
    21. (setq run (- p2X p1X))
    22. (setq textposY (float
    23.   (if(> (+ p1Y p2Y) 0)
    24.     (/ (+ p1Y p2Y) 2 )
    25.     (setq textdisp 0)
    26.         )))
    27. (setq textposX (float(/ (+ p1X p2X) 2 )))
    28. (setq textpos (list textposX textposY 0.0))
    29. (setq trot (angle p1 p2))
    30. (if (> rise 0)
    31. (progn
    32.    (setq rise1a (/ run rise)
    33.   )
    34.    (setq rise1 (rtos(/ run rise)
    35.   )
    36.      )
    37. )
    38. )
    39. (if (< rise 0)
    40. (progn
    41.    (setq rise1a (/ run rise)
    42.   )
    43.    (setq rise1 (rtos(/ run rise)
    44.   )
    45.      )
    46. )
    47. )
    48. (if (> run 0)
    49. (progn
    50. (setq grade (rtos(* 100 (/ rise run))
    51.   )
    52.      )
    53. (setq gradeA (* 100 (/ rise run))))
    54. )
    55. (if (< run 0)
    56. (progn
    57. (setq grade (rtos(* 100 (/ rise run))
    58.   )
    59.      )
    60. (setq gradeA (* 100 (/ rise run))))
    61. )
    62. (if (cond (< 10 gradeA)(> -10 gradeA))
    63. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" rise1 ":1"))
    64. )
    65. (if (= nil (< 10 gradeA)(> -10 gradeA))
    66. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" grade "%"))
    67. )
    68. (if (and(< 100 gradeA)(< 0 gradeA))
    69. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" "1:" (rtos(* rise1a 100)
    70.   ) ))
    71.       )
    72. (if (and(> -100 gradeA)(> 0 gradeA))
    73. (setq textdisp (strcat "[url="file://\\pxsa1.4286"]\\pxsa1.4286[/url];" "1:" (rtos(* rise1a 100)
    74.   ) ))
    75.       )
    76. (if (= rise 0)
    77.     (progn (setq textdisp "")(princ "ERROR\nGrade is flat"))
    78.    )
    79. (if (= run 0)
    80.     (progn (setq textdisp "")(princ "ERROR\nGrade is vertical")
    81.       )
    82.    )
    83. ;(setq text size (getint "Text size: "))
    84. (entmake (list
    85.    '(0 . "MTEXT")
    86.    '(100 . "AcDbEntity")
    87.    '(67 . 0)
    88.    '(410 . "Model")
    89.    '(100 . "AcDbMText")
    90.    (cons 10 textpos)
    91.    '(40 . 0.5)
    92.    '(41 . 0)
    93.    '(71 .
    94.    '(72 . 5)
    95.    (cons 1 textdisp)
    96.    '(7 . "ISO3098B")
    97.    '(210 0.0 0.0 1.0)
    98.    '(11 1.0 0.0 0.0)
    99.    '(42 . 0.833333)
    100.    '(43 . 4.66667)
    101.    (cons 50 trot)
    102.    '(73 .
    103.    '(44 . 1.0)))
    104. (princ)
    105. )
    回复

    使用道具 举报

    35

    主题

    2471

    帖子

    2447

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    174
    发表于 2022-7-6 08:19:09 | 显示全部楼层
    我注意到这个分配:
    良好的编程实践是确保除法运算的至少一部分是实数(双精度),以避免得到舍入结果:
    1. 4

    (我知道坐标来自GETPOINT ar实数)
    回复

    使用道具 举报

    18

    主题

    78

    帖子

    61

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    90
    发表于 2022-7-6 08:29:21 | 显示全部楼层
    谢谢你的建议,我会考虑的。但在这种情况下,这并不重要,因为它只需要粗糙
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-10 05:41 , Processed in 1.629519 second(s), 77 queries .

    © 2020-2025 乐筑天下

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