乐筑天下

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

[编程交流] 帮助学习斜坡Lisp程序

[复制链接]

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 16:07:26 | 显示全部楼层 |阅读模式
你好我正在使用此代码,但我需要做一些更改
 
1) 我希望文本自动插入到行的中间(在带有小空格的行上方)
 
2) 该代码计算斜率%。如果斜率为0.02 wrte 2%,但如果斜率为0002%,则写入0.2%。我想写2‰。
 
 
  1. (defun c:TanLineanot(/           doc            spc             *error*  TH:UnDo
  2.           TH:StartUnDo            p1             p2              p3       scl   ht
  3.           tan2           TL-Line  TH:UnDo
  4.          )
  5. ;;; Authour : Hasan Asos    -> Modified by Tharwat
  6. (vl-load-com)
  7. (COMMAND "_layer" "_m" "_slope" "_c" "140" "" "")
  8. (command "-style" "_TanLine" "wgsimpl.shx" "_annotative" "_yes" "_no" 1.75 1.0 0.0 "_no" "_no" "" "")
  9. (and (setq doc (cond (doc)
  10.                ((vla-get-ActiveDocument (vlax-get-Acad-Object)))
  11.          )
  12.       )
  13.       (setq spc (if (zerop (vla-get-activespace doc))
  14.            (if (= (vla-get-mspace doc) :vlax-true)
  15.              (vla-get-modelspace doc)
  16.              (vla-get-paperspace doc)
  17.            )
  18.            (vla-get-modelspace doc)
  19.          )
  20.       )
  21. )
  22. (defun *error* (msg)
  23.    (and TH:UnDo (vla-EndUndoMark doc))
  24.    (or        (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  25. (princ (strcat "\n** Error: " msg " **"))
  26.    )
  27.    (princ)
  28. )
  29. (setq TH:StartUnDo (vla-StartUndoMark doc))
  30. (initget "Line Points")
  31. (if (eq (setq        TL-sel
  32.          (getkword (strcat "\nselect line or points[Line/Points]: " "< Line >"))
  33.   )
  34.   "Points"
  35.      )
  36.    (progn
  37.         (setq p1 (getpoint "\n select the first point : "))
  38.      (setq p2 (getpoint p1 "\n select the second point : "))
  39.      (setq p3 (getpoint "\n pick a point : "))
  40.          (setq tan2 (/ (- (cadr p2) (cadr p1)) (- (car p2) (car p1))))
  41.      (entmake (list (cons 0 "LINE")
  42.              (cons 10 (trans p1 1 0))
  43.              (cons 11 (trans p2 1 0))
  44.        )
  45.      )
  46.     (vla-AddText spc (strcat (rtos (abs (* tan2 100)) 2 2) "%") (vlax-3d-point (trans p3 1 0))  (/ (getvar 'TEXTSIZE) (getvar 'cannoscalevalue)))
  47.    )
  48.    (progn
  49.      (prompt "\n select a line : ")
  50.      (setq TL-Line (ssget '((0 . "LINE"))))
  51.      (setq e (ssname TL-Line 0))
  52.      (setq p1 (cdr (assoc 10 (entget e))))
  53.      (setq p2 (cdr (assoc 11 (entget e))))
  54.      (setq p3 (getpoint "\n pick a point : "))
  55.      (setq tan2 (/ (- (cadr p2) (cadr p1)) (- (car p2) (car p1))))
  56.      (vla-AddText spc (strcat (rtos (abs (* tan2 100)) 2 2) "%") (vlax-3d-point (trans p3 1 0))  (/ (getvar 'TEXTSIZE) (getvar 'cannoscalevalue)))
  57.    )
  58. )
  59. (setq TH:UnDo (vla-EndUndoMark Doc))
  60. (princ "\n ")
  61. (princ)
  62. )

 
谢谢
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:13:27 | 显示全部楼层
类似的旧线程?
它有一个小错误,现在还没有修复不能测试,正在享受oldtown白咖啡
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 16:21:01 | 显示全部楼层
我想问一个问题。当我点击末端的点时,创建一条线和一个带有坡度的文本。我不想要这行,但我在代码中找不到要删除的内容。有人能帮忙吗?
 
我想是的
 
  1. (entmake (list (cons 0 "LINE")
  2.              (cons 10 (trans p1 1 0))
  3.              (cons 11 (trans p2 1 0))
  4.        )
  5.      )

 
但不起作用
 
谢谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:24:33 | 显示全部楼层
我有一个版本的作品与线和普林斯。
 
  1. ; xfall as a percentage
  2. ; Modified to work with plines
  3. ; By Alan H July 2017
  4. ;(defun trap (errmsg)
  5. ;  (prompt "\nAn error has occured.")
  6. ;  (command "undo" "b")
  7. ;  (setvar "osmode" os)
  8. ;  (setq *error* temperr)
  9. (defun rtd (a)(/ (*  a 180.0) pi))
  10. (setvar "TEXTSTYLE" "STANDARD")
  11. ; cross fall as a percentage
  12. ; modified to recognise a pline
  13. ; By Alan H July 2017
  14. (defun c:xfallper ( / pt1 pt2 pt3 pt4 )
  15. (setvar "cmdecho" 0)
  16. (SETQ ANGBASEE (GETVAR "ANGBASE"))
  17. (SETQ ANGDIRR (GETVAR "ANGDIR"))
  18. (SETQ LUNITSS (GETVAR "LUNITS"))
  19. (SETQ LUPRECC (GETVAR "LUPREC"))
  20. (SETQ AUNITSS (GETVAR "AUNITS"))
  21. (SETQ AUPRECC (GETVAR "AUPREC"))
  22. (SETVAR "LUNITS" 2)
  23. (SETVAR "ANGBASE" 0.0)
  24. (SETVAR "ANGDIR" 0)
  25. (SETVAR "LUPREC" 3)
  26. (SETVAR "AUNITS" 0)
  27. (SETVAR "AUPREC" 3)
  28. (setq os (getvar "osmode"))
  29. (setvar "osmode" 0)
  30. (if (= horiz nil)
  31. (progn
  32. (if (not AH:getval3)(load "getvals3"))
  33. (ah:getval3 "Enter Horizontal scale " 5 4 "100" "Enter Vertical scale" 5 4 "50" "Enter number of decimal places" 5 4 "2")
  34. (setq horiz (atof val1))
  35. (setq vert (atof val2))
  36. (setq prec (atoi val3))
  37. )
  38. )
  39. (alert "Pick lines or plines")
  40. (while (setq s (entsel "Select line"))
  41. (setq objname (cdr (assoc 0 (entget (car s)))))
  42. (if (=  objname  "LWPOLYLINE")
  43. (progn
  44. (setq pr (vlax-curve-getparamatpoint (car s) (setq p (vlax-curve-getclosestpointto (car s) (cadr s)))))
  45. (setq pt1 (vlax-curve-getpointatparam (car s) (fix pr)))
  46. (setq pt2 (vlax-curve-getpointatparam (car s) (1+ (fix pr))))
  47. (setq found "Y")
  48. )
  49. )
  50. (if (=  objname  "LINE")
  51. (progn
  52. (setq pt1 (cdr (assoc 10 (entget (car s)))))
  53. (setq pt2 (cdr (assoc 11 (entget (car s)))))
  54. (setq found "Y")
  55. )
  56. )
  57. (if (= Found nil)
  58. (progn
  59. (alert "Do again object has no slope")
  60. (exit)
  61. )
  62. )
  63. (setq pt1x (car pt1))
  64. (setq pt1y (cadr pt1))
  65. (setq pt2x (car pt2))
  66. (setq pt2y (cadr pt2))
  67. (setq ydist (abs (- pt1y pt2y)))
  68. (setq xdist (abs (- pt1x pt2x)))
  69. (setq xfall (strcat (rtos  (* (/ (* ydist vert) (* xdist horiz)) 100) 2 prec) "%") )
  70. (setq ang (angle pt1 pt2))
  71. (setq dist (distance pt1 pt2))
  72. (if (> dist 0)
  73. (progn
  74. (setq halfdist (/ dist 2))
  75. (setq pt3 (polar pt1 ang halfdist))
  76. (if (> ang pi) (setq ang (- ang pi)))
  77. (if (> ang (/ pi 2)) (setq pt4ang (- ang (/ pi 2))) (setq pt4ang (+ ang (/ pi 2))))
  78. (setq pt4 (polar pt3 pt4ang 0.75))
  79. (if (> ang (/ pi 2)) (setq ang (+ ang pi)))
  80. (setq tang (rtd ang))
  81. )
  82. )
  83. (command "TEXT" pt4 2.5 tang xfall "")
  84. (setq s nil)
  85. ) ;while
  86. ;  (setvar "DIMZIN" dimz)
  87. (setvar "cmdecho" 1)
  88. (setvar "osmode" os)
  89. ;  (setq *error* temperr)
  90. (SETVAR "LUNITS" lunitss)
  91. (SETVAR "ANGBASE" angbasee)
  92. (SETVAR "ANGDIR" angdirr)
  93. (SETVAR "LUPREC" luprecc)
  94. (SETVAR "AUNITS" aunitss)
  95. (SETVAR "AUPREC" auprecc)
  96. (princ)
  97. ) ;defun

GETVALS3.lsp
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 16:31:03 | 显示全部楼层
抱歉Biggal不工作
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 16:37:33 | 显示全部楼层
prodromosm,你加载了上面显示的附加文件(GETVALS3.lsp)了吗?没有它,这个程序就无法运行。
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 16:41:45 | 显示全部楼层
是的,我从同一条路径加载它们。但不起作用。我正在使用Autocad 2017
回复

使用道具 举报

BKT

1

主题

124

帖子

123

银币

初来乍到

Rank: 1

铜币
7
发表于 2022-7-5 16:46:25 | 显示全部楼层
六羟甲基三聚氰胺六甲醚。。。嗯,我相信比格尔有时间的时候会回复这个帖子。同时,我会把这个扔出去。当我只需要两点之间的斜率时,我就使用它。可以是一条直线、一条直线或任意选定的两点。
 
只是看看别的。
 
编辑:没关系-最近的更改使其仅在正象限中正常工作。等我有时间再看一遍。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:56:36 | 显示全部楼层
我从论坛上复制并粘贴了代码,效果很好。
 
这个出现了吗?该代码允许横截面和长截面上的坡度,而不是2个3d点。如果没有缩放,只需将hor和vertical设置为100
170731wgmss95mgz9g4ltt.jpg
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:58:31 | 显示全部楼层
BKT可能会看两点之间的角度,如果你设置为弧度,那么零方向正确,你知道你在哪个象限,所以可以反转角度等,然后转换为斜率。另一种方法是使用x1-x2上的检查反转这两个点,它是+还是-,向左还是向右,与Y1-Y2相同。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 20:20 , Processed in 0.720079 second(s), 74 queries .

© 2020-2025 乐筑天下

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