明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2779|回复: 6

[基础] 求助,如何重新生成PLINE的起始点。(已解决)

[复制链接]
发表于 2011-5-13 14:44:59 | 显示全部楼层 |阅读模式
本帖最后由 zhb236623 于 2011-5-16 10:30 编辑

已有PLINE画的封闭图形

1.获取PLINE坐标(这个程序会点),存入  坐标.txt文件
2.点选 哪个坐标点作为起始点(setq Definestartpoint (getpoint))
3.读取坐标.txt文件   读取每行判断是否和Definestartpoint值相同,  (就是这个程序感觉有点难度)

                     不相同  读取下行再判断

                     相同写入  2.txt文件   写完到文件结束,再读取  坐标.txt文件  写入 2.txt文件,直到相同时停止写入。完成该操作


4.删除原来的PLINE线(这个也好办),
5.读取2.txt文件画PLINE线,(也比较好办)


本帖子中包含更多资源

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

x
发表于 2011-5-13 20:03:34 | 显示全部楼层
本帖最后由 mandala 于 2011-5-13 20:06 编辑
  1. ;;子程序,修改以捕捉端点方式“闭合”的pline使其闭合,
  2. ;;并按指定点作为起点重绘pline,最后返回pline的组码。
  3. (defun plchangestart
  4.        (ee p1 / pt dat ptfrst ename aa data datb dat0 dat1 dat9)
  5.   (setq pt (list (car p1) (cadr p1)))
  6.   (setq dat (entget ee))
  7.   (setq ptfrst (cons 10 pt))
  8.   (setq ename (vlax-ename->vla-object ee))
  9.   (if (vlax-curve-isclosed ename)
  10.     (setq dat dat)
  11.     (progn (setq dat (subst (cons 70 129) (assoc 70 dat) dat))
  12.      (setq data (list (last dat)))
  13.      (setq datb (reverse (cdr (cdr (cdr (cdr (cdr (reverse dat))))))))
  14.      (setq dat (entmod (append datb data)))
  15.     ) ;_ 结束progn
  16.   ) ;_ 结束if
  17.   ;;以上一段:如果pl最终不是以“c”闭合而是以捕捉端点方式“闭合”,
  18.   ;;则修改组码使其达到闭合效果。
  19.   (setq  dat0 (reverse (member (assoc 39 dat) (reverse dat)))
  20.   dat1 (cdr (member (assoc 39 dat) dat))
  21.   dat9 (list (last dat1))
  22.   dat1 (reverse (cdr (reverse dat1)))
  23.   data (member ptfrst dat1)
  24.   datb (reverse (cdr (member ptfrst (reverse dat1))))
  25.   ) ;_ 结束setq
  26.   (entmod (append dat0 data datb dat9))
  27.   ;;以上一段:修改组码,使pline从指定点开始。
  28. ) ;_ 结束defun
试试这个。

ee是多段线的图元名,p1是指定起点的坐标,前者可用entsel、后者可用getpoint获得。

最后返回的是指定起点之后重绘的多段线组码,有了组码你想干嘛就可以干嘛。

 楼主| 发表于 2011-5-16 08:33:16 | 显示全部楼层
本帖最后由 zhb236623 于 2011-5-16 08:44 编辑

这个要怎么用呢。
(defun c:ww()
(setq ee(car(entsel"选择对象")))
(setq p1(getpoint"选择顶点"))
(plchangestart);;后面还要加什么函数呢
)
加了这两句,提示。。。; 错误: 参数太少,还麻烦mandala指点下。谢谢。
发表于 2011-5-16 08:52:46 | 显示全部楼层
本帖最后由 yoyoho 于 2011-5-16 08:54 编辑

感谢mandala分享函数
(defun c:ww()
(setq ee(car(entsel"选择对象")))
(setq p1(getpoint"选择顶点"))
(plchangestart ee p1)
)

 楼主| 发表于 2011-5-16 10:04:40 | 显示全部楼层
本帖最后由 zhb236623 于 2011-5-16 10:11 编辑

多谢mandala和yoyoho,还要再加一句,可以正常使用

(defun c:ww()
(VL-LOAD-COM)
(setq ee(car(entsel"选择对象")))
(setq p1(getpoint"选择顶点"))
(plchangestart ee p1)

)
获取多义线点坐标1.lsp,出自哪里倒忘记了。有需要的可以下来看下,用这个函数也可以验证下起始点是否更改,还可以获得多义线坐标点。

本帖子中包含更多资源

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

x
发表于 2011-8-16 20:58:15 | 显示全部楼层
有好厉害呀
发表于 2011-12-26 20:20:04 | 显示全部楼层
真的很厉害,正在找这个方面的代码,太感谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 15:28 , Processed in 0.166431 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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