明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1529|回复: 3

懂曲线的高手来看看,我又遇到 麻烦了

[复制链接]
发表于 2013-1-14 20:44:15 | 显示全部楼层 |阅读模式
本帖最后由 邹锋 于 2013-1-14 21:13 编辑





;BY ZZXXQQ
(defun c:ttT()
  (vl-load-com)
  (if (and (setq s1 (entsel "\nselect a polyline ????? :"))
    (setq ent (entget (car s1)))
    (= (cdr (assoc 1 ent)) "LWPOLYLINE")
    (= (cdr (assoc 70 ent)) 1)
      )
    (progn
      (setq objen (car s1))
      (setq plst (list))
      (foreach n ent
(if (= (car n) 10)
   (setq plst (cons (cdr n) plst))
)
      )
      (setq plst (reverse plst));;;;;;;
      (setq ss (ssget "wp" plst '((0 . "CIRCLE"))))
    )
  )
  (if ss (sslength ss)  0);取得封闭多义线内的一个圆
  (setq na (ssname ss 0))
  (setq obj (vlax-ename->vla-object objen))
  (setq pt1 (cdr(assoc 10 (entget na))));取得圆心
  (setq pt2 (vlax-curve-getClosestPointTo obj pt1));返回点到曲线最近的点
  (addpt obj pt2);在多义线上添加刚刚搜索到的点
  ;写到这里,以下调试失败,不明白是哪出问题了,老是转出来的图变了
  
  ;(这里将这条封闭的多线段转成首尾相连的不封闭的线;
  (setq pte (getendpt obj 0.0001));返回在距离曲线结束点为0.0001的地方的点
  (addpt obj pte);再添加一个点然后将其做成不封闭的,失败了
  (setq pte (getendpt obj 0.5));返回在距离曲线结束点为0.5的地方的点
  (addpt obj pte);在多义线上添加点也失败了,不知为何了,要么多义线变样了
  (princ)
  )





;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;返回曲线距离终点为多久的一个点
(DEFUN getendpt(obj dist / len endpt)
  (setq len (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj)))
  (setq endpt (vlax-curve-getPointAtDist obj (- len dist)))
  )

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;多线段添加点
;;;;;;;;;;;;BY CAO YIN
(defun addpt (Obj Pt / PP)
  (setq PT (trans Pt 1 0)
        PP (vlax-curve-getclosestpointto OBJ PT))
  (vlax-invoke
    OBJ
    'ADDVERTEX
    (1+ (fix (vlax-curve-getparamatpoint OBJ PP)))
    (list (car PT) (cadr PT))
  )
)




看不明白吗?
我这程序想实现这样的目地
1选择封闭多义线
2求出多义线内的圆心
3算出圆心到多义线最近的点,并在这条多义线添加这个点
4将这条多义线变成首尾相连而不封闭的多义线(就是起始与结束点重合)
5算出距离这条多线段结束点为0.5的的点而且这个点在曲线上,最后 在这条多线段上面添加这个点


本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-1-14 21:17:25 | 显示全部楼层
还是没搞懂,这个的目的是干啥,有啥用处?
 楼主| 发表于 2013-1-14 21:32:13 | 显示全部楼层
阿霸jun 发表于 2013-1-14 21:17
还是没搞懂,这个的目的是干啥,有啥用处?

这只是我写的软件中其中的一点点开始,在这只是做图用
发表于 2013-1-17 14:39:05 | 显示全部楼层
找到原因了,看来楼主还是不够细心啊,犯了个低级错误
(= (cdr (assoc 1 ent)) "LWPOLYLINE")  =>
(= (cdr (assoc 0 ent)) "LWPOLYLINE")
改后,用你的测试图,检验通过!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 05:13 , Processed in 0.173994 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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