明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2900|回复: 11

哪们大侠能发个更改多段线指定顶点的函数啊

  [复制链接]
发表于 2012-9-12 15:55:02 | 显示全部楼层 |阅读模式
1明经币
哪们大侠能发个更改多段线指定顶点的函数啊

最佳答案

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2012-9-12 15:55:03 | 显示全部楼层
本帖最后由 Gu_xl 于 2012-9-12 16:32 编辑

  1. ;用法 (putVertex (car(entsel)) (trans (getpoint) 0 1) 1)
  2. ;; pl = LWPOLYLINE POLYLINE 3DPOLY
  3. ;; pt = 顶点坐标
  4. ;; index = 顶点索引
  5. (defun putVertex  (pl pt index)
  6.   (if (= 'ename (type pl))
  7.     (setq pl (vlax-ename->vla-object pl))
  8.     )
  9.   (if (= "AcDbPolyline" (vla-get-ObjectName pl))
  10.     (setq pt (list (car pt) (cadr pt)))
  11.     )
  12.   (VL-CATCH-ALL-APPLY
  13.     'vla-put-coordinate
  14.     (list
  15.       pl
  16.       index
  17.       (vlax-make-variant
  18.         (vlax-safearray-fill
  19.           (vlax-make-safearray
  20.             vlax-vbdouble
  21.             (cons 0 (1- (length pt)))
  22.             )
  23.           pt
  24.           )
  25.         )
  26.       )
  27.     )
  28.   )

回复

使用道具 举报

发表于 2012-9-12 16:23:33 | 显示全部楼层
得有实例指述 程序执行前/后以供调试核验...
回复

使用道具 举报

发表于 2012-9-12 23:31:24 | 显示全部楼层
搜索就有,你试试
回复

使用道具 举报

发表于 2012-9-13 10:06:54 | 显示全部楼层
顶起来,改PL线顶点很常用。
回复

使用道具 举报

发表于 2012-9-13 17:09:48 | 显示全部楼层
本帖最后由 mandala 于 2012-9-13 17:15 编辑

  1. ;;修改以捕捉端点方式“闭合”的pline使其真正闭合,
  2. ;;并按指定点作为起点重绘pline,最后返回pline的组码。
  3. ;;ee:pl的图元名 p1:新指定的起点
  4. (defun plchangestart
  5.        (ee p1 / pt dat ptfrst ename aa data datb dat0 dat1 dat9)
  6.   (setq pt (list (car p1) (cadr p1)))
  7.   (setq dat (entget ee))
  8.   (setq ptfrst (cons 10 pt))
  9.   (setq ename (vlax-ename->vla-object ee))
  10.   (if (vlax-curve-isclosed ename)
  11.     (setq dat dat)
  12.     (progn (setq dat (subst (cons 70 129) (assoc 70 dat) dat))
  13.     (setq data (list (last dat)))
  14.     (setq datb (reverse (cdr (cdr (cdr (cdr (cdr (reverse dat))))))))
  15.     (setq dat (entmod (append datb data)))
  16.     ) ;_ 结束progn
  17.   ) ;_ 结束if
  18.   ;;以上一段:如果pl最终不是以“c”闭合而是以捕捉端点方式“闭合”,
  19.   ;;则修改组码使其达到闭合效果。
  20.   (setq dat0 (reverse (member (assoc 39 dat) (reverse dat)))
  21. dat1 (cdr (member (assoc 39 dat) dat))
  22. dat9 (list (last dat1))
  23. dat1 (reverse (cdr (reverse dat1)))
  24. data (member ptfrst dat1)
  25. datb (reverse (cdr (member ptfrst (reverse dat1))))
  26.   ) ;_ 结束setq
  27.   (entmod (append dat0 data datb dat9))
  28.   ;;以上一段:修改组码,使pline从指定点开始。
  29. ) ;_ 结束defun
  30. ;;;;;;;;;;;;;;;;;;;;;;;;
回复

使用道具 举报

 楼主| 发表于 2012-9-14 16:59:50 | 显示全部楼层
Gu_xl 发表于 2012-9-12 16:29

非常不错,学习了
回复

使用道具 举报

发表于 2012-9-15 09:04:50 | 显示全部楼层
感谢分享学习!
回复

使用道具 举报

发表于 2012-9-18 08:48:58 | 显示全部楼层
mandala 发表于 2012-9-13 17:09

这个怎么个用法啊?
回复

使用道具 举报

发表于 2012-9-18 08:55:11 | 显示全部楼层
mandala 发表于 2012-9-13 17:09

为什么我用这个命令时,会把多线删除掉一些线段呢,比如画个矩形,调用这个函数后,选择不同的顶点,画出来的线不一样的,有的只有两条边了、有的变成三角形。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 15:59 , Processed in 0.198246 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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