乐筑天下

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

[编程交流] 二维直线/多段线到三维多段线

[复制链接]

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 20:55:02 | 显示全部楼层
O、 iain,这是我的lisp例程,它用文字中的z值在直线和交点的端点的x,y处绘制点。
 
  1. (defun c:grlev ( / p1 tx e zd os); puts 3D point at level shown by text
  2. (setvar "OSMODE" 33); sets osnap to endpoint & intersection
  3. (setq p1 (getpoint "\n Pick plan point..... "))
  4. (setq os (getvar "OSMODE"))
  5. (setvar "OSMODE" 64)
  6. (setq tx (entsel "\n Pick Level text...... "))
  7. (setvar "OSMODE" 0)
  8. (setq e (entget (car tx)))
  9. (setq zd (atof (cdr (assoc 1 e))))
  10. (setq p1 (list (car p1) (cadr p1) zd))
  11. (command "point" p1)
  12. (setvar "OSMODE" os)
  13. )

 
它可以工作,但不会循环,但通过右键单击鼠标,它会重复该命令,您可以非常快速地创建三维点。然后,您必须使用这些点绘制三维多段线。
 
如果我想更改osnap,我会编辑lisp文件——这是我的lisp级别。
回复

使用道具 举报

5

主题

25

帖子

20

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:58:02 | 显示全部楼层
上载图形?。。。我想我可以,我所要求的只是把二维多段线画成三维。。。通过在命令提示下指定顶点高程(甚至通过选择高程文字),可以通过捕捉到一个点来选择x和y坐标。。。。。
 
还有谁不明白??
回复

使用道具 举报

5

主题

25

帖子

20

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 20:58:49 | 显示全部楼层
非常感谢艾尔顿,
 
试用该例程,它在正确的高程处绘制节点,然后在这些点上绘制多段线。
由于某种原因,我无法使多段线准确地捕捉到节点。。。。
 
让我们看看Kbplc能否想出一个例程,直接从文本和/或用户输入绘制多段线。
 
你看到他为三维多段线上的低点写的那个吗?。。。
 
再次感谢
伊恩
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 21:02:13 | 显示全部楼层
只需尝试一到两个想法-您是否已将osnap设置为仅节点?可以冻结所有其他图层,以便只显示点和三维多段线吗?是否使用3DPolyline命令?
 
祝您在三维多段线方面好运。当我发现不能像使用“多段线编辑”的普通多段线那样将它们连接在一起时,我放弃了使用它们。
回复

使用道具 举报

scj

0

主题

29

帖子

31

银币

限制会员

铜币
-2
发表于 2022-7-5 21:05:55 | 显示全部楼层
Hi eldon,
试用PEDIT3Dhttp://www.black-cad.de
祝你好运
约琴
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 21:08:23 | 显示全部楼层
嗨,Jochen,
 
非常感谢您的链接。
 
我现在试着整理一下自己,这样我就可以一次画出一条三维多段线,但很高兴知道一个备份。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 21:12:54 | 显示全部楼层
为什么不直接使用内置的呢。xy输入滤波器-大卫
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 21:16:07 | 显示全部楼层
内置。XY过滤器是手动执行此操作的方法。
 
但是,您必须阅读级别文本,然后正确输入该值,如果有很多点,则可能存在错误。最好让lisp为您阅读级别文本。
 
我永远也找不到办法保持沉默。XY过滤器打开。我必须在每一个点上设置它,这与OSNAP在开始时设置的不同。由于需要将一幅大图转换为地面模型,它为学习一点lisp提供了动力。
回复

使用道具 举报

5

主题

25

帖子

20

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 21:17:52 | 显示全部楼层
我不知道KPBLC对此有何想法。
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
223
发表于 2022-7-5 21:21:55 | 显示全部楼层
很抱歉,我必须重新安装Windows、AutoCAD等。请尝试以下代码:
  1. (defun c:3dp (/ adoc pt_prev h_prev pt_lst vla_pline vla_pt_lst answer)
  2. ;;; Written by kpblc at 2006 Oct 11 by req of iain9876
  3. ;;; at cadtutor.net forum
  4. (vl-load-com)
  5. (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  6. (vla-startundomark adoc)
  7. (if (setq pt_prev (getpoint "\nSelect start point <Exit> : "))
  8.    (progn
  9.      (setq
  10.        h_prev (cond
  11.                 ((setq h_prev
  12.                         (car
  13.                           (entsel
  14.                             (strcat
  15.                               "\nSelect the TEXT (or MTEXT) to get elevation <"
  16.                               (rtos (caddr pt_prev))
  17.                               "> : "
  18.                               ) ;_ end of strcat
  19.                             ) ;_ end of entget
  20.                           ) ;_ end of car
  21.                        ) ;_ end of setq
  22.                  (atof
  23.                    (vla-get-textstring (vlax-ename->vla-object h_prev))
  24.                    ) ;_ end of rtos
  25.                  )
  26.                 (caddr pt_prev)
  27.                 ) ;_ end of cond
  28.        pt_lst (list (list (car pt_prev) (cadr pt_prev) h_prev))
  29.        ) ;_ end of setq
  30.      (while (setq cur_pt (getpoint pt_prev "\nSelect next point <Enough> : "))
  31.        (setq pt_prev    cur_pt
  32.              h_prev     (cond
  33.                           ((setq h_prev
  34.                                   (car
  35.                                     (entsel
  36.                                       (strcat
  37.                                         "\nSelect the TEXT (or MTEXT) to get elevation <"
  38.                                         (rtos (caddr pt_prev))
  39.                                         "> : "
  40.                                         ) ;_ end of strcat
  41.                                       ) ;_ end of entget
  42.                                     ) ;_ end of car
  43.                                  ) ;_ end of setq
  44.                            (atof
  45.                              (vla-get-textstring (vlax-ename->vla-object h_prev))
  46.                              ) ;_ end of rtos
  47.                            )
  48.                           (caddr pt_prev)
  49.                           ) ;_ end of cond
  50.              pt_lst     (append pt_lst
  51.                                 (list (list (car pt_prev) (cadr pt_prev) h_prev))
  52.                                 ) ;_ end of append
  53.              vla_pt_lst (vlax-make-variant
  54.                           (vlax-safearray-fill
  55.                             (vlax-make-safearray
  56.                               vlax-vbdouble
  57.                               (cons 1 (length (apply 'append pt_lst)))
  58.                               ) ;_ end of vlax-make-safearray
  59.                             (apply 'append pt_lst)
  60.                             ) ;_ end of vlax-safearray-fill
  61.                           ) ;_ end of vlax-make-variant
  62.              ) ;_ end of setq
  63.        (if (not vla_pline)
  64.          (setq vla_pline (vla-add3dpoly (vla-get-modelspace adoc) vla_pt_lst))
  65.          (vla-put-coordinates vla_pline vla_pt_lst)
  66.          ) ;_ end of if
  67.        ) ;_ end of while
  68.      (initget "Yes No _ Y N")
  69.      (if (= (cond ((getkword "Close it [Yes/No] <Yes> : ")
  70.                    )
  71.                   (t "Y")
  72.                   ) ;_ end of cond
  73.             "Y"
  74.             ) ;_ end of =
  75.        (vla-put-closed vla_pline :vlax-true)
  76.        ) ;_ end of if
  77.      ) ;_ end of progn
  78.    ) ;_ end of if
  79. (vla-endundomark adoc)
  80. (princ)
  81. ) ;_ end of defun

---
补充:
我忘了说:没有提供从lisp应该得到textstring的实体类型测试!小心!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 01:06 , Processed in 0.767149 second(s), 70 queries .

© 2020-2025 乐筑天下

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