乐筑天下

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

[编程交流] 两个相交点之间的距离

[复制链接]

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:14:32 | 显示全部楼层 |阅读模式
你好
我在任何地方都找不到,所以我正在发布新的帖子。有没有人遇到过这种Lisp程序的情况:
我有3条线,其中2条相互平行,第三条线与这两条线相交(每一条线在一个随机的焦点中),现在,当我单击相交线(两个交点之间)上的任何位置时,我的动作会导致在这两个交点之间放置一个平行于相交线的文字/多行文字,并具有这两个交点之间的距离值。
对不起,如果我的解释不够清楚,但英语不是我的第一语言
提前感谢您的帮助
回复

使用道具 举报

2

主题

74

帖子

72

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:20:53 | 显示全部楼层
为什么不使用标准工具AutoSAD?
_dimaligned(平行尺寸),如果您只需要文字调整样式,已抑制所有线条和箭头,仅保留文字
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:22:08 | 显示全部楼层
问题是我有将近100个(甚至更多)这样的交叉点(这是一个地面剖面和一个沿路有声屏的剖面。屏幕的柱子彼此之间的距离约为4-5米(这是我的相交线-柱子轴)。我一直在使用标准的cad工具,但我认为点击一次总比点击三次来实现相同的目标要好
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:26:42 | 显示全部楼层
试一试:
 
对于交叉口数大于2的情况,并非100%万无一失。
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:28:19 | 显示全部楼层
实际上,这样更好,选择要测量的交点之间的曲线对象。
 
对于非线性对象,距离测量为该对象在点之间穿过的路径,而不是直线距离。
 
  1. (defun c:int_dist (/
  2.                   *error*
  3.                   isCurveObj ss->list
  4.                   vlax-list->3D-point
  5.                   SortFromPt
  6.                   
  7.                   DIST
  8.                   ENT
  9.                   ILST
  10.                   LANG
  11.                   MA MI MPT
  12.                   OBJ
  13.                   PT
  14.                   SS
  15.                   TOBJ
  16.                   UFLAG
  17.                   
  18.                   )
  19. (vl-load-com)
  20. ;; Lee Mac  ~  04.03.10
  21. (setq *doc (cond (*doc) ((vla-get-ActiveDocument
  22.                             (vlax-get-acad-object)))))
  23. (defun *error* (msg)
  24.    (and uFlag (vla-EndUndoMark *doc))
  25.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  26.        (princ (strcat "\n** Error: " msg " **"))
  27.    ) ;_  or
  28.    (princ)
  29. ) ;_  defun
  30. (defun isCurveObj (ent)
  31.    (not
  32.      (vl-catch-all-error-p
  33.        (vl-catch-all-apply
  34.          (function
  35.            vlax-curve-getEndParam
  36.          ) ;_  function
  37.          (list ent)
  38.        ) ;_  vl-catch-all-apply
  39.      ) ;_  vl-catch-all-error-p
  40.    ) ;_  not
  41. ) ;_  defun
  42. (defun ss->list (ss / i ent ObjLst)
  43.    (setq i -1)
  44.    (while (setq ent (ssname ss (setq i (1+ i))))
  45.      (setq ObjLst
  46.             (cons
  47.               (vlax-ename->vla-object ent)
  48.               Objlst
  49.             ) ;_  cons
  50.      ) ;_  setq
  51.    ) ;_  while
  52.    ObjLst
  53. ) ;_  defun
  54. (defun vlax-list->3D-point (lst)
  55.    (if lst
  56.      (cons (list (car lst) (cadr lst) (caddr lst))
  57.            (vlax-list->3D-point (cdddr lst))
  58.      ) ;_  cons
  59.    ) ;_  if
  60. ) ;_  defun
  61. (defun SortFromPt (pt lst)
  62.    (vl-sort lst
  63.             (function
  64.               (lambda (a b)
  65.                 (< (distance a pt)
  66.                    (distance b pt)
  67.                 ) ;_  <
  68.               ) ;_  lambda
  69.             ) ;_  function
  70.    ) ;_  vl-sort
  71. ) ;_  defun
  72. (while
  73.    (progn
  74.      (setq ent (entsel)
  75.            pt  (cadr ent)
  76.            ent (car ent)
  77.      ) ;_  setq
  78.      (cond ((eq 'ENAME (type ent))
  79.             (if (isCurveObj ent)
  80.               (progn
  81.                 (vla-getBoundingBox
  82.                   (setq obj
  83.                          (vlax-ename->vla-object ent)
  84.                   ) ;_  setq
  85.                   'Mi
  86.                   'Ma
  87.                 ) ;_  vla-getBoundingBox
  88.                 (mapcar
  89.                   (function set)
  90.                   '(Mi Ma)
  91.                   (mapcar
  92.                     (function
  93.                       vlax-safearray->list
  94.                     ) ;_  function
  95.                     (list Mi Ma)
  96.                   ) ;_  mapcar
  97.                 ) ;_  mapcar
  98.                 (setq ss
  99.                        (ssget "_C"
  100.                               (list (car Mi) (cadr Ma) 0.)
  101.                               (list (car Ma) (cadr Mi) 0.)
  102.                        ) ;_  ssget
  103.                 ) ;_  setq
  104.                 (if
  105.                   (and
  106.                     (setq iLst
  107.                            (apply
  108.                              (function
  109.                                append
  110.                              ) ;_  function
  111.                              (vl-remove 'nil
  112.                                         (mapcar
  113.                                           (function
  114.                                             (lambda (x)
  115.                                               (vlax-list->3D-point
  116.                                                 (vlax-invoke
  117.                                                   obj
  118.                                                   'IntersectWith
  119.                                                   x
  120.                                                   acExtendNone
  121.                                                 ) ;_  vlax-invoke
  122.                                               ) ;_  vlax-list->3D-point
  123.                                             ) ;_  lambda
  124.                                           ) ;_  function
  125.                                           (ss->list
  126.                                             (ssdel ent ss)
  127.                                           ) ;_  ss->list
  128.                                         ) ;_  mapcar
  129.                              ) ;_  vl-remove
  130.                            ) ;_  apply
  131.                     ) ;_  setq
  132.                     (< 1 (length iLst))
  133.                   ) ;_  and
  134.                    (progn
  135.                      (setq uFlag
  136.                             (not
  137.                               (vla-StartUndoMark *doc)
  138.                             ) ;_  not
  139.                      ) ;_  setq
  140.                      (setq iLst (SortFromPt
  141.                                   (vlax-curve-getClosestPointto ent pt)
  142.                                   iLst
  143.                                 ) ;_  SortFromPt
  144.                            iLst (list (car iLst) (cadr iLst))
  145.                      ) ;_  setq
  146.                      (setq mPt
  147.                             (vlax-curve-getPointatDist
  148.                               ent
  149.                               (/
  150.                                 (+
  151.                                   (vlax-curve-getDistatPoint
  152.                                     ent
  153.                                     (cadr iLst)
  154.                                   ) ;_  vlax-curve-getDistatPoint
  155.                                   (vlax-curve-getDistAtPoint
  156.                                     ent
  157.                                     (car ilst)
  158.                                   ) ;_  vlax-curve-getDistAtPoint
  159.                                 ) ;_  -
  160.                                 2.
  161.                               ) ;_  /
  162.                             ) ;_  vlax-curve-getPointatDist
  163.                      ) ;_  setq
  164.                      (setq dist
  165.                             (abs
  166.                               (-
  167.                                 (vlax-curve-getDistatPoint
  168.                                   ent
  169.                                   (cadr iLst)
  170.                                 ) ;_  vlax-curve-getDistatPoint
  171.                                 (vlax-curve-getDistAtPoint
  172.                                   ent
  173.                                   (car ilst)
  174.                                 ) ;_  vlax-curve-getDistAtPoint
  175.                               ) ;_  -
  176.                             ) ;_  abs
  177.                      ) ;_  setq
  178.                      (setq lAng
  179.                             (angle '(0 0 0)
  180.                                    (vlax-curve-getFirstDeriv
  181.                                      ent
  182.                                      (vlax-curve-getParamatPoint
  183.                                        ent
  184.                                        mPt
  185.                                      ) ;_  vlax-curve-getParamatPoint
  186.                                    ) ;_  vlax-curve-getFirstDeriv
  187.                             ) ;_  angle
  188.                      ) ;_  setq
  189.                      (cond ((and (> lAng (/ pi 2)) (<= lAng pi))
  190.                             (setq lAng (- lAng pi))
  191.                            )
  192.                            ((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
  193.                             (setq lAng (+ lAng pi))
  194.                            )
  195.                      ) ;_  cond
  196.                      (setq tObj
  197.                             (vla-AddText
  198.                               (if
  199.                                 (zerop
  200.                                   (vla-get-ActiveSpace *doc)
  201.                                 ) ;_  zerop
  202.                                  (if
  203.                                    (eq :vlax-true
  204.                                        (vla-get-MSpace *doc_)
  205.                                    ) ;_  eq
  206.                                     (vla-get-ModelSpace *doc)
  207.                                     (vla-get-PaperSpace *doc)
  208.                                  ) ;_  if
  209.                                  (vla-get-ModelSpace *doc)
  210.                               ) ;_  if
  211.                               (rtos dist)
  212.                               (vlax-3D-point
  213.                                 '(0 0 0)
  214.                               ) ;_  vlax-3D-point
  215.                               (getvar 'TEXTSIZE)
  216.                             ) ;_  vla-AddText
  217.                      ) ;_  setq
  218.                      (vla-put-Alignment tObj acAlignmentMiddleCenter)
  219.                      (vla-put-TextAlignmentPoint
  220.                        tObj
  221.                        (vlax-3D-point
  222.                          (polar mPt
  223.                                 (+ lAng (/ pi 2.))
  224.                                 (getvar 'TEXTSIZE)
  225.                          ) ;_  polar
  226.                        ) ;_  vlax-3D-point
  227.                      ) ;_  vla-put-TextAlignmentPoint
  228.                      (vla-put-rotation tObj lAng)
  229.                      (setq uFlag
  230.                             (vla-EndUndomark *doc)
  231.                      ) ;_  setq
  232.                    ) ;_  progn
  233.                    (princ "\n** Object Has less than Two Intersections **")
  234.                 ) ;_  if
  235.               ) ;_  progn
  236.               (princ "\n** Invalid Object Selected **")
  237.             ) ;_  if
  238.            )
  239.      ) ;_  cond
  240.    ) ;_  progn
  241. ) ;_  while
  242. (princ)
  243. ) ;_  defun

 
决定更改代码格式?
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:30:37 | 显示全部楼层
 
这就是我之前的代码所做的。
 
 
这是当前由LUPREC Sys Var设置的,但我也可以在代码中手动更改它。
 
 
代码当前使用您的TextStyle设置,但是的,我可以更改此设置。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:34:32 | 显示全部楼层
 
 
啊!新手失误!难怪我没有注意到!谢谢伙计
 
我想试试我的风格
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:38:01 | 显示全部楼层
 
克里给了你太多的困难眨眼:
 
想想你为这种风格的格式对我唠叨了多少次。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:40:20 | 显示全部楼层
 
嗯,受克里言论的刺激,我想我会看看它会是什么样子——但说实话,我不喜欢这样,所以我可能会回到我以前的风格。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:45:48 | 显示全部楼层
好的,之前的代码已更新,以反映Alan的错误点
 
现在试一试Pontifex
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 11:13 , Processed in 1.127941 second(s), 72 queries .

© 2020-2025 乐筑天下

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