乐筑天下

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

[编程交流] 确定特定Z值i

[复制链接]

57

主题

243

帖子

190

银币

后起之秀

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

铜币
285
发表于 2022-7-6 09:13:20 | 显示全部楼层 |阅读模式
必要性和挑战:
他需要一个例程,您可以选择一条具有不同Z值的线,并沿其长度确定示例中Z的特定值,即值10。应使用点及其注释值Z进行标记。
以一条线为例,但理想的情况是,该检查可以在一组线中同时发生。
101326f5kjw2wj92mk9z98.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:21:32 | 显示全部楼层
在伪代码中:
 
[列表]
  • 获取行实体
  • 获取起点/终点
  • 计算点之间的Z差
  • 计算点之间的2D距离(现在有了渐变)
  • 使用Z=gd(g=梯度,d=2D距离)计算具有指定Z值的点的距离。
    [/列表]
  • 回复

    使用道具 举报

    26

    主题

    1495

    帖子

    20

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    118
    发表于 2022-7-6 09:26:33 | 显示全部楼层
    命令:ID
     
    ???
    回复

    使用道具 举报

    57

    主题

    243

    帖子

    190

    银币

    后起之秀

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

    铜币
    285
    发表于 2022-7-6 09:27:14 | 显示全部楼层
    李,这是一个很好的指导方针。
    我的知识是基础的。不知道我是否可以。
    用另一种方式描述它,我想要的是在调查工作中得到等高线的效果。指定特定的Z坐标,例程必须能够查看每条线。同时,您必须通过引入点实体及其符号Z坐标文本在每条线上标记该点。
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 09:31:59 | 显示全部楼层
    这是一个非常详细的例子,我指出的路线-我使用了长变量名和逐步变量分配,以便您可以看到我使用的方法。
     
    以下是一个测试函数示例:
    1. (defun c:test ( / e p z )
    2. (if
    3.    (and
    4.      (setq e (car (entsel "\nSelect Line: ")))
    5.      (eq "LINE" (cdr (assoc 0 (entget e))))
    6.      (setq z (getreal "\nSpecify Z-Value: "))
    7.      (setq p (PointonLine e z))
    8.    )
    9.    (entmakex (list (cons 0 "POINT") (cons 10 p)))
    10. )
    11. (princ)
    12. )
    回复

    使用道具 举报

    44

    主题

    3166

    帖子

    2803

    银币

    中流砥柱

    Rank: 25

    铜币
    557
    发表于 2022-7-6 09:40:38 | 显示全部楼层
    李的代码要简洁得多,但我想到的是(另一个ActiveX示例-LoL):
     
    1. (defun c:FOO ( / *error* oldNomutt ss elev acDoc startElev endElev lp hp flag len space)
    2. (vl-load-com)
    3. (defun *error*  (msg)
    4.    (and oldNomutt (setvar 'nomutt oldNomutt))
    5.    (vla-endundomark acDoc)
    6.    (cond ((not msg))                                                   ; Normal exit
    7.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
    8.          ((princ (strcat "\n** Error: " msg " ** "))))                 ; Fatal error, display it
    9.    (princ))
    10. (prompt "\nSelect 3D polylines to mark elevation: ")
    11. (and (setq oldNomutt (getvar 'nomutt)) (setvar 'nomutt 1))
    12. (if (and (setq ss (ssget "_:L" '((0 . "POLYLINE"))))
    13.           (setvar 'nomutt oldNomutt)
    14.           (setq elev (getreal "\nEnter elevation: ")))
    15.    (progn
    16.      (vla-startundomark
    17.        (setq acDoc (vla-get-activedocument (vlax-get-acad-object))))
    18.      (vlax-for x  (setq ss (vla-get-activeselectionset acDoc))
    19.        (setq startElev (last (vlax-curve-getstartpoint x)))
    20.        (setq endElev (last (vlax-curve-getendpoint x)))
    21.        (cond ((< startElev endElev)
    22.               (setq lp startElev)
    23.               (setq hp endElev)
    24.               (setq flag T))
    25.              ((> startElev endElev)
    26.               (setq lp endElev)
    27.               (setq hp startElev))
    28.              ((= startElev endElev)
    29.               (prompt "\n** Flat polylines not accepted ** ")
    30.               (redraw (vlax-vla-object->ename x) 3)
    31.               (quit)))
    32.        (setq len (vla-get-length x))
    33.        (vla-put-color
    34.          (vla-addpoint
    35.            (cond (space)
    36.                  ((setq space (vla-get-modelspace acDoc))))
    37.            (vlax-3d-point
    38.              (cond (flag
    39.                     (vlax-curve-getpointatdist
    40.                       x
    41.                       (/ (- elev lp)
    42.                          (/ (abs (- hp lp)) len))))
    43.                    ((vlax-curve-getpointatdist
    44.                       x
    45.                       (- len
    46.                          (/ (- elev lp)
    47.                             (/ (abs (- hp lp)) len))))))))
    48.          acred))
    49.      (vla-endundomark acDoc)
    50.      (vla-delete ss))
    51.    (cond (ss (prompt "\n** Invalid input: No elevation ** "))
    52.          ((prompt "\n** No 3D polylines selected ** "))))
    53. (princ))
    回复

    使用道具 举报

    57

    主题

    243

    帖子

    190

    银币

    后起之秀

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

    铜币
    285
    发表于 2022-7-6 09:43:09 | 显示全部楼层
    李麦克:
    杰出的这是正确的。只剩下集成配额值Z的注释文本。
    此外,对于多段线和三维多段线,也可以接受相同的过程。
     
    RenderMan:
    您的版本无效。当然,因为失败是目前不理解的事情。
    回复

    使用道具 举报

    44

    主题

    3166

    帖子

    2803

    银币

    中流砥柱

    Rank: 25

    铜币
    557
    发表于 2022-7-6 09:49:57 | 显示全部楼层
     
    当我选择三维多段线时,它在我的一端工作得很好。英雄联盟
     
    (PDMODE=3时显示的结构)
    101328jyzhe7b474hbggnn.png
    回复

    使用道具 举报

    63

    主题

    6297

    帖子

    6283

    银币

    后起之秀

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

    铜币
    358
    发表于 2022-7-6 09:50:43 | 显示全部楼层
     
    可能是因为RenderMan将直线视为多段线!!
    回复

    使用道具 举报

    44

    主题

    3166

    帖子

    2803

    银币

    中流砥柱

    Rank: 25

    铜币
    557
    发表于 2022-7-6 09:55:34 | 显示全部楼层
     
    这是正确的。。。这两条线和LWpolyline都没有坡度。
     
    如果没有三维多段线,起点和终点之间的高程差如何?
     
    ... 除非立面图纯粹是注释?在这种情况下,我完全误解了OP.LoL
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-7-7 09:32 , Processed in 1.070616 second(s), 75 queries .

    © 2020-2025 乐筑天下

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