明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1576|回复: 7

[求助]怎么得到多义线各顶点相对应的水平线的各点

[复制链接]
发表于 2007-8-14 12:18 | 显示全部楼层 |阅读模式
<h2>有一条多义线,在其上方或下方有一水平线,怎么能得到多义线各顶点相对应的水平线上的点,即沿各顶点垂直向上或向下与水平线的交点?lisp里面怎么实现?</h2>
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2007-8-14 12:27 | 显示全部楼层
用SSGET加点选如何?
发表于 2007-8-14 12:43 | 显示全部楼层

取多义线顶点,分别求顶点到水平线的最近点

用vlax-curve-getclosestpointto 

发表于 2007-8-14 13:08 | 显示全部楼层

如果不用vl函数也可以这样。

(defun c:test(/ pline pllst hline hllst p1 p2 a1 a2 p3 pt lst)
  (if (and (setq pline (car (entsel "\n请选取多段线:")))
    (setq pllst (entget pline))
    (= (cdr (assoc 0 pllst)) "LWPOLYLINE")
    (setq Hline (car (entsel "\n请选取水平线:")))
    (setq hllst (entget hline))
    (= (cdr (assoc 0 hllst)) "LINE")
      )
    (progn
      (setq p1 (cdr (assoc 10 hllst)))
      (setq p2 (cdr (assoc 11 hllst)))
      (setq A1 (angle p1 p2))
      (setq a2 (+ (/ pi 2) a1))
      (foreach pp pllst
 (if (= (car pp) 10)
   (progn
     (setq p3 (polar (cdr pp) a2 1))
     (setq pt (inters p1 p2 (cdr pp) p3 nil))
     (setq lst (cons pt lst))
     (entmake
       (list
         (cons 0 "POINT")
         (cons 10 pt)
       )
            )
   )
 )
      )
      (reverse lst)
    )
  )
)  
    

或者用trans函数-〉坐标变换的形式,我不知道哪一种更快,只有你自己去试验了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-8-14 13:58 | 显示全部楼层

谢谢,这是我原来程序的代码,我想要标注多义线各顶点到水平线的距离。

程序功能是可以完成,但是各标注的尺寸线的一个起点都是到水平线的一个端点。另一个是在顶点处。这样不太好,我想标注的尺寸界线原点与尺寸线位置重合,这样不会都以水平线为端点为起点。

可能说得不是很清楚,执行一下我得程序代码就知道了。

(defun c:tt (/ D I LEAME P10 PLEAME PLST)
  (defun get_pt    (ename / elist ptlist)
    (setq elist (entget ename))
    (foreach n elist
      (if (= 10 (car n))
    (setq ptlist (cons (cdr n) ptlist))
      )
    )
    (reverse ptlist)
  )
  (if (and (setq pleame (car (entsel "\n>>>选择多段线<退出>:")))
       (setq leame (car (entsel "\n>>>选择水平线<退出>:")))
       ;(setq d (getdist "\n>>>输入标注间隔<退出>:"))
       (setq plst (get_pt pleame))
       (setq p10 (cdr (assoc 10 (entget leame))))
       (setq i 0)
      )
    (repeat (length plst)
      (command ".DIMLINEAR"
           (nth i plst)
           p10
           "v"
           (nth i plst) 
           ;(polar p10 pi (* (+ i 1) d))
      )
      (setq i (1+ i))
    )
    (princ "\n>>>安全退出!<<<")
  )
  (princ "\n>>>程序执行完毕!<<<")
  (princ)
)

发表于 2007-8-14 14:23 | 显示全部楼层

repeat处改为:

(repeat (length plst)
      (command ".DIMLINEAR"
           (nth i plst)
        "per"
           p10
           "v"
           (nth i plst) 
      )
      (setq i (1+ i))
    )

是这个意思?

发表于 2007-8-14 14:24 | 显示全部楼层

我运行了你的程序,发现你说的问题完全可以不用编程就能实现。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2007-8-14 15:37 | 显示全部楼层

就是无痕斑竹的意思。这么简单怎么没想到呢。

呵呵,不编程是可以实现,但是好多各一个个标注好累的。

现在可以了。谢谢两位斑竹的帮助。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 14:55 , Processed in 0.273569 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表