乐筑天下

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

[编程交流] lisp例程帮助,添加bl

[复制链接]

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:54:55 | 显示全部楼层 |阅读模式
大家好,
 
我想把块放在多段线上,因为模型是从20米到20米,但20米是水平测量的,使用带有属性的块。
 
虽然在我看来应该工作,但不明白问题出在哪里。
 
我绘制了块“COTAL1.DWG”和模型“lg-mc22_00.DWG”
  1. (vl-load-com)
  2. (princ "\n***The command is CS***")
  3. (defun c:CS (/ pct_0 startpt endpt  )
  4. (setq acadObject (vlax-get-acad-object))
  5. (setq acadDocument (vlax-get-property acadObject 'ActiveDocument))
  6. (setq mSpace (vlax-get-property acadDocument 'Modelspace))
  7. (setvar "osmode" 32)
  8. (setq pct_0 (getpoint "\nSelect one point on the reference line: "))
  9. (setq Linia_obiect (vlax-ename->vla-object (car (entsel "\nSelect polyline >>"))))
  10. (setq objLength (vlax-curve-getDistAtParam Linia_obiect (vlax-curve-getEndParam Linia_obiect)))
  11. (setq startpt (vlax-curve-getPointAtParam Linia_obiect (vlax-curve-getStartParam Linia_obiect)))
  12. (setq endpt (vlax-curve-getPointAtParam Linia_obiect (vlax-curve-getEndParam Linia_obiect)))
  13. (setq plan_ref (/ (cadr pct_0) 10.0 ))
  14. (setq Dx (car startpt))
  15. (while (< Dx (car endpt))
  16. (setq pct_pe_l_ref
  17.       (list (car startpt)
  18.         (cadr pct_0)))
  19. (setq Xline (vlax-invoke mSpace 'AddXLine startPt pct_pe_l_ref))
  20. (if
  21.   (setq secondpt (vlax-invoke  Xline 'IntersectWith Linia_obiect 0))
  22.   
  23.   (progn
  24. (setq Dy (/ (- (cadr secondpt) (cadr pct_0)) 10.0 ) )
  25. (command "insert" "C:\\WBLOCK\\COTAL1.DWG" (polar pt 0.0 0.0) 10 10 0 (rtos (+ plan_ref Dy) 2 2))  ; (vl-cmdf "_.scale" "l" "" startPt dis )
  26. ));;; end if
  27. (vla-delete Xline)
  28. (setq Dx (+ Dx  20.0 ))
  29. (setq startpt secondpt)
  30. )
  31. (gc)
  32. (princ)
  33. )

115457qodkgf0dd9ou506k.jpg
COTAL1.DWG
lg-mc22_00。图纸
Cote\U scurgere\U ape v1.2-eng.LSP
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 11:03:25 | 显示全部楼层
为什么不使用Measure或Divide命令来做同样的事情?两者都可以利用块。我不认为有任何禁止使用属性块。
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:06:31 | 显示全部楼层
我想添加块,但要插入的距离(20m)必须在x方向上水平测量,与多段线的斜率无关。
每个块的属性表示纵向纵断面中的高程点。
Measure或Divide命令使用两个插入块之间的段长度,但对我来说这是未知的(是可变的)。
常数为水平距离20m。
回复

使用道具 举报

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 11:11:20 | 显示全部楼层
你是说这些方块的间距不同?
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:15:38 | 显示全部楼层
 
是的,如果看一下我的示例“lg-mc22_00.dwg”,你会看到我想要如何绘制块。
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:23:21 | 显示全部楼层
大家好,
 
我有一个旧的例程,这就是我想要的,但把块放在多段线的每个顶点。
你们可以告诉我怎样改变,把块只放在从20m到20m的顶点上,正如你们在第二个例子中看到的那个样?
115458fkqddq0wwyqy1qek.jpg
115500v235nr3rn3kirg44.jpg
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:28:14 | 显示全部楼层
我忘了输入代码。
 
  1. (princ "\n***Type CS***")
  2. (defun c:CS (/ ent i idx pt ss totparam rot)
  3. (setq old_cmdecho (getvar "cmdecho"))
  4. (setq old_osmode (getvar "OSMODE"))
  5. (setq old_clayer (getvar "clayer"))
  6. (setq old_ucsview (getvar "ucsview"))
  7. (setq old_dimzin (getvar "dimzin"))
  8. (setq old_EXPERT (getvar "EXPERT"))
  9. (setq oldcol (getvar "CECOLOR"))
  10. (setq old_error *error*)
  11. (setvar "cmdecho" 0)
  12. (setvar "UCSVIEW" 1)
  13. (setvar "osmode" 32)
  14. (setvar "EXPERT" 4)
  15. (setvar "DIMZIN" 0)
  16. (command "view" "s" "orig")
  17. (defun *error* (msg)
  18.    (setvar "osmode" old_osmode)
  19.    (setvar "clayer" old_clayer)
  20.    (setvar "DIMZIN" old_DIMZIN)
  21.    (setvar "EXPERT" old_EXPERT)
  22.    (setvar "CECOLOR" oldcol)
  23.    (command "view" "s" "orig")
  24.    (if    (tblsearch "view" "orig")
  25.      (progn
  26.    (command "view" "r" "orig")
  27.    (command "view" "d" "orig")
  28.      )
  29.    )
  30.    (setvar "ucsview" old_ucsview)
  31.    (setvar "cmdecho" old_cmdecho)
  32.    (if
  33.      (/= "function cancelled" msg)
  34.       (if
  35.     (= msg "quit / exit abort")
  36.      (princ)
  37.      (princ (strcat "\nerror: " msg))
  38.       )
  39.       (princ)
  40.    )
  41.    (setq *error* old_error)
  42.    (princ)
  43. )
  44. (if
  45.    (= 1 (logand 1 (getvar "undoctl")))
  46.     (progn
  47.       (command "._undo" "group")
  48.       (setq intors t)
  49.     )
  50.     (set intors nil)
  51. )
  52. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  53. (setq plan_ref (getreal "\nWhat Bench mark have Pl.ref: "))
  54. (setq pct_0 (getpoint "\nSelect one point on the reference line: "))
  55. (if (setq ss (ssget '((0 . "*POLY*"))))
  56.    (progn
  57.      (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
  58.      (setq idx -1)
  59.      (while (< (setq idx (1+ idx))(sslength ss))
  60.    (setq ent (ssname ss idx))
  61.    (setq totparam (fix (vlax-curve-getendparam ent))
  62.          i -1
  63.          r (getvar "circlerad"))
  64.    (if (= r 0.0)
  65.      (setq r 1.5)
  66.      )
  67.    (while (< (setq i (1+ i)) totparam)
  68.      (setq pt (vlax-curve-getpointatparam ent i))
  69. (setq Dy (/ (- (cadr pt) (cadr pct_0)) 10.0 ) )
  70. (command "insert" "C:\\WBLOCK\\COTAL1.DWG" (polar pt 0.0 0.0) 10 10 0 (rtos (+ plan_ref Dy) 2 2))
  71.      
  72.      )
  73.    (setq pt (vlax-curve-getpointatparam ent (vlax-curve-getendparam ent)))
  74. (setq Dy (/ (- (cadr pt) (cadr pct_0)) 10.0 ) )
  75. (command "insert" "C:\\WBLOCK\\COTAL1.DWG" (polar pt 0.0 0.0) 10 10 0 (rtos (+ plan_ref Dy) 2 2))
  76.    )
  77.      (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
  78.      )
  79.    )
  80. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  81. (if
  82.    intors
  83.     (progn
  84.       (command ".undo" "_end")
  85.       (setq intors nil)
  86.     )
  87. )
  88. (setvar "osmode" old_osmode)
  89. (setvar "clayer" old_clayer)
  90. (setvar "ucsview" old_ucsview)
  91. (setvar "EXPERT" old_EXPERT)
  92. (setvar "CECOLOR" oldcol)
  93. (setVAR "dimzin" old_dimzin)
  94. (setvar "cmdecho" old_cmdecho)
  95. (gc)
  96. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  97. (princ)
  98. )

Cote\u scurgere\u ape v1.4。LSP
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:30:11 | 显示全部楼层
这里没有人能帮我吗?
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 11:35:21 | 显示全部楼层
问题在于您沿多段线按距离计算点
但是你需要沿着X轴计算它们
这是一个快速而肮脏的代码(没有数学)
  1. (princ "\n***Type CS***")
  2. (vl-load-com)
  3. (defun c:CS (/ acsp adoc cnt dy ent ep intors obj oldcol old_clayer
  4.      old_cmdecho old_dimzin old_error old_expert old_osmode
  5.      old_ucsview p1 p2 pct_0 plan_ref pt sset sp ss xdelta xdist
  6.      xend xline xstart yzero)
  7. (setq old_cmdecho (getvar "cmdecho"))
  8. (setq old_osmode (getvar "OSMODE"))
  9. (setq old_clayer (getvar "clayer"))
  10. (setq old_ucsview (getvar "ucsview"))
  11. (setq old_dimzin (getvar "dimzin"))
  12. (setq old_EXPERT (getvar "EXPERT"))
  13. (setq oldcol (getvar "CECOLOR"))
  14. (setq old_error *error*)
  15. (setvar "cmdecho" 0)
  16. (setvar "UCSVIEW" 1)
  17. (setvar "osmode" 32)
  18. (setvar "EXPERT" 4)
  19. (setvar "DIMZIN" 0)
  20. (command "view" "s" "orig")
  21. (defun *error* (msg)
  22.    (setvar "osmode" old_osmode)
  23.    (setvar "clayer" old_clayer)
  24.    (setvar "DIMZIN" old_DIMZIN)
  25.    (setvar "EXPERT" old_EXPERT)
  26.    (setvar "CECOLOR" oldcol)
  27.    (command "view" "s" "orig")
  28.    (if (tblsearch "view" "orig")
  29.      (progn
  30. (command "view" "r" "orig")
  31. (command "view" "d" "orig")
  32.      )
  33.    )
  34.    (setvar "ucsview" old_ucsview)
  35.    (setvar "cmdecho" old_cmdecho)
  36.    (if
  37.      (/= "function cancelled" msg)
  38.       (if
  39. (= msg "quit / exit abort")
  40.   (princ)
  41.   (princ (strcat "\nerror: " msg))
  42.       )
  43.       (princ)
  44.    )
  45.    (setq *error* old_error)
  46.    (princ)
  47. )
  48. (if
  49.    (= 1 (logand 1 (getvar "undoctl")))
  50.     (progn
  51.       (command "._undo" "group")
  52.       (setq intors t)
  53.     )
  54.     (set intors nil)
  55. )
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  57. (setq plan_ref (getreal "\nWhat Bench mark have Pl.ref: "))
  58. (setq pct_0 (getpoint "\nSelect one point on the reference line: ")
  59. yzero (cadr pct_0)
  60. )
  61. (princ "\n >>  Select polyline  >>")
  62. (if (setq ss (ssget "+.:S:E" '((0 . "*POLY*"))))
  63.    (progn
  64.      (vla-startundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
  65.       (if (not (tblsearch "layer" "Defpoints"))
  66.     (command "._-layer" "_M" "Defpoints" "_S" "" "")
  67.   )
  68.      (setq acsp (vla-get-modelspace adoc))
  69.      (setq ent (ssname ss 0))
  70.      (setq obj (vlax-ename->vla-object ent))
  71.      (setq sp (vlax-curve-getstartpoint obj)
  72.     ep (vlax-curve-getendpoint obj)
  73.     xstart (car sp)
  74.     xend (car ep)
  75.     xdelta (- xend xstart)
  76.     )
  77.      (setq xdist 0 cnt -1)
  78.      (while (< xdist xdelta)
  79. (setq cnt (1+ cnt)
  80.       p1 (list (+ xstart (* 20. cnt)) yzero 0)
  81.       p2 (list (car p1) (+ yzero 1000.0) 0)
  82.       )
  83. (setq xline (vla-addxline acsp (vlax-3d-point p1) (vlax-3d-point p2)))
  84. (vlax-put xline 'Layer "Defpoints")
  85. (setq pt (vlax-invoke xline 'IntersectWith obj 0))
  86.        (setq Dy (/ (- (cadr pt) (cadr pct_0)) 10.0 ) )
  87. (command "._-insert" (strcat (getvar "dwgprefix")"COTAL1.DWG") "_non" pt 0.01 0.01 0 (rtos (+ plan_ref Dy) 2 2))
  88. (setq xdist (+ xdist 20))
  89. )
  90. (command "._-insert" (strcat (getvar "dwgprefix")"COTAL1.DWG") "_non" ep 0.01 0.01 0 (rtos (+ plan_ref Dy) 2 2))
  91. (setq sset (ssget "X" (list (cons 0 "XLINE")(cons 8 "Defpoints")(cons 410 (getvar "CTAB")))))
  92.      (if sset (command "._erase" sset ""))
  93.      (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
  94.      )
  95.    )
  96. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  97. (if
  98.    intors
  99.     (progn
  100.       (command ".undo" "_end")
  101.       (setq intors nil)
  102.     )
  103. )
  104. (setvar "osmode" old_osmode)
  105. (setvar "clayer" old_clayer)
  106. (setvar "ucsview" old_ucsview)
  107. (setvar "EXPERT" old_EXPERT)
  108. (setvar "CECOLOR" oldcol)
  109. (setVAR "dimzin" old_dimzin)
  110. (setvar "cmdecho" old_cmdecho)
  111. (gc)
  112. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  113. (princ)
  114. )

 
 
~'J'~
回复

使用道具 举报

2

主题

16

帖子

14

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:43:24 | 显示全部楼层
谢谢你的回复,
 
我尝试了你的代码,给了我一个错误,只在第一点绘制了xline。
错误是:
 
********************
 
命令:CS
Pl.ref:268有什么基准点
在参考线上选择一个点:
>>选择多段线>>
选择对象:
错误:AutoCAD。应用:未找到密钥
 
********************
 
我跟着代码走了,好像还好,不知道哪里出了问题。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 12:03 , Processed in 0.500578 second(s), 86 queries .

© 2020-2025 乐筑天下

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