乐筑天下

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

[编程交流] 重复测量

[复制链接]

1

主题

12

帖子

11

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 15:57:44 | 显示全部楼层 |阅读模式
大家好!
 
我在Autocad和Lisp中都不是很流畅。
 
 
我需要定期测量从给定直线到样条(多边形)曲线的距离。每个样条需要做大约100个,所以每只手做这个有点无聊。
 
现在没有找到任何解决方法,也许有人可以启发我。
 
见附图
 
 

                               
登录/注册后可看大图

 
谢谢你,汤姆
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:02:40 | 显示全部楼层
您是否使用:
[列表]
  • 尺寸之间的固定距离
  • 固定数量的尺寸
    [/列表]
     
    第二种选择对我来说听起来不切实际(当它用于项目执行时)。
  • 回复

    使用道具 举报

    1

    主题

    12

    帖子

    11

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:05:03 | 显示全部楼层
    测量线始终与基准线呈90度角(示例中的红色或绿色)。
     
    尺寸之间的距离始终相同(如100mm)。
     
    谢谢
    回复

    使用道具 举报

    1

    主题

    12

    帖子

    11

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:10:51 | 显示全部楼层
    P、 S.测量的起点是基线的起点。然后每隔X mm,直到基线结束。我还可以提供更多数据,如X=距离,Z=测量数量
     
    汤姆
    回复

    使用道具 举报

    1

    主题

    12

    帖子

    11

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:12:16 | 显示全部楼层
    更新了草图以使其更清晰
    回复

    使用道具 举报

    18

    主题

    1529

    帖子

    973

    银币

    中流砥柱

    Rank: 25

    铜币
    649
    发表于 2022-7-5 16:15:51 | 显示全部楼层
    下面的代码假设图形是二维的(在WCS中),基线是水平的。
    1. (defun KGA_List_Divide_3 (lst / ret)
    2. (repeat (/ (length lst) 3)
    3.    (setq ret (cons (list (car lst) (cadr lst) (caddr lst)) ret))
    4.    (setq lst (cdddr lst))
    5. )
    6. (reverse ret)
    7. )
    8. (defun KGA_Sys_ObjectOwner (obj)
    9. (vla-objectidtoobject (vla-get-database obj) (vla-get-ownerid obj))
    10. )
    11. (defun DimCurveAtPoint (curve pt / space tmp)
    12. (setq space (KGA_Sys_ObjectOwner curve))
    13. (setq tmp (vlax-invoke space 'addxline pt (mapcar '+ '(0.0 1.0 0.0) pt)))
    14. (foreach int (KGA_List_Divide_3 (vlax-invoke curve 'intersectwith tmp acextendnone))
    15.    (vlax-invoke space 'adddimaligned pt int pt)
    16. )
    17. (vla-delete tmp)
    18. )
    19. (defun c:DimCurve ( / baseEntselLst basePtLst curve dist doc pt vec)
    20. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
    21. (vla-endundomark doc)
    22. (vla-startundomark doc)
    23. (if
    24.    (and
    25.      (setq curve (car (entsel "\nSelect curve: ")))
    26.      (setq baseEntselLst (entsel "\nSelect base line near start point: "))
    27.      (setq dist (getdist "\nDistance between dimensions: "))
    28.    )
    29.    (progn
    30.      (setq pt (cadr baseEntselLst))
    31.      (setq basePtLst
    32.        (list
    33.          (vlax-curve-getstartpoint (car baseEntselLst))
    34.          (vlax-curve-getendpoint (car baseEntselLst))
    35.        )
    36.      )
    37.      (if (> (distance pt (car basePtLst)) (distance pt (cadr basePtLst)))
    38.        (setq basePtLst (reverse basePtLst))
    39.      )
    40.      (setq curve (vlax-ename->vla-object curve))
    41.      (setq pt (car basePtLst))
    42.      (setq vec
    43.        (list
    44.          (if (> (caar basePtLst) (caadr basePtLst)) (- dist) dist)
    45.          0.0
    46.          0.0
    47.        )
    48.      )
    49.      (repeat (fix (/ (apply 'distance basePtLst) dist))
    50.        (DimCurveAtPoint curve pt)
    51.        (setq pt (mapcar '+ pt vec))
    52.      )
    53.    )
    54. )
    55. (vla-endundomark doc)
    56. (princ)
    57. )
    回复

    使用道具 举报

    1

    主题

    12

    帖子

    11

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:20:13 | 显示全部楼层
    谢谢你,罗伊!
     
    无法运行代码。我必须删除以下几行,否则我将不会被要求提供参数。就像这样。。它不起作用
     
    ;(setq doc(vla get activedocument(vlax get acad object)))
    ;(vla ENDUDOMARK文件)
    ;(vla startundomark文件)
     
    我错过了什么?Im使用ACad 2017 Mac。
     
    谢谢-汤姆
    回复

    使用道具 举报

    1

    主题

    12

    帖子

    11

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:24:28 | 显示全部楼层
    嗯,似乎在非windows平台上不支持ALisp中的ActiveX命令。我不知道还有一个不同的命令集。纯Lisp的东西正在工作。。直到现在
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

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

    铜币
    325
    发表于 2022-7-5 16:25:15 | 显示全部楼层
     
    没有ActiveX?-听起来很有趣
     
    然而,仍然可以编写一个适用于具有直线段的多段线的解决方案(即使有凸起-如果有人已经有了计算圆弧/凸起和直线之间交点的子函数)。
    因此,您需要重新考虑使用多段线或至少将该样条线转换为一条。
    回复

    使用道具 举报

    1

    主题

    12

    帖子

    11

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-5 16:30:53 | 显示全部楼层
    嗯,我不确定。我发现一个Autodesk文档,其中说明ActiveX在非Windows平台上不存在。
     
    https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-AutoLISP/files/GUID-FC6FC3E3-ED3E-4E4D-9766-8E4D037241A5-htm.html
     
    AutoCAD对象是以层次方式构造的,应用程序对象位于根。
     
    注意:AutoLISP中的ActiveX支持仅限于Windows。
     
     
    另一方面,实际文件的状态不同:
     
    https://knowledge.autodesk.com/support/autocad-for-mac/learn-explore/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-MAC-Core/files/GUID-BC26675C-A124-4612-81AB-3087AE06F5AC-htm.html
     
    创建实体的最新方法是使用VLISP中的ActiveX函数。ActiveX与entmake和command相比有几个优点。
     
    六羟甲基三聚氰胺六甲醚。。。。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-13 20:02 , Processed in 0.383479 second(s), 76 queries .

    © 2020-2025 乐筑天下

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