乐筑天下

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

归范化多义线

[复制链接]

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2004-8-17 12:16:00 | 显示全部楼层 |阅读模式
;;;------------------------------------------------------------------------;;;
;;; 归范化多义线                                                                         ;;;
;;;                                 1. 消除折环                                                                         ;;;
;;;                                 2. 消除冗余结点                                                                         ;;;
;;;------------------------------------------------------------------------;;; ;;;
(vl-load-com)
(defun c:test (         / old_osmd sset len i item lst coords name ssp txtobj
                                                         retlst ptcur pt j pti)
         (setq old_osmd (getvar "osmode"))
         (setvar "osmode" 0)
         
         (vla-ZoomExtents (vlax-get-acad-object))
         
         (setq sset (ssget "x" (list
                                 (cons -4 "")
                                                 (cons -4 "")
                                 (cons -4 "or>")
                         )
                                         ))
         (setq len (sslength sset))
         (setq i 0)
         (repeat len
                         (setq ename (ssname sset i))
                         (setq item (vlax-ename->vla-object ename))
                         ;取得多义线坐标
                         (setq lst (vlax-safearray->list
                (vlax-variant-value
                         (vlax-get-property item 'Coordinates))
                )
                 )
                         
                         (setq coords nil)
                         (if (= (vlax-get-property item 'ObjectName) "AcDb2dPolyline")
                                         (progn
        (while lst
                 (if (= coords nil)
                                 (setq coords (list (list (nth 0 lst) (nth 1 lst))) )
                                 (setq coords (append coords (list (list (nth 0 lst) (nth 1 lst)))))
                                 )
                 (setq lst (cdr (cdr (cdr lst))))
                 )
        )
                                         )
                         
                         (if (= (vlax-get-property item 'ObjectName) "AcDbPolyline")
                                         (progn
        (while lst
                 (if (= coords nil)
                                 (setq coords (list (list (nth 0 lst) (nth 1 lst))) )
                                 (setq coords (append coords (list (list (nth 0 lst) (nth 1 lst)))))
                                 )
                 (setq lst (cdr (cdr lst)))
                 )
        )
                                         )
                         ;处理坐标coords
                         (setq lastpt (car (reverse coords)))                ;提取最后一个结点坐标
                         (setq coords (reverse (cdr (reverse coords))))        ;从coords中删除最后一个结点坐标
                         ;构建新的坐标表
                         (setq retlst nil)
                         (while coords
                 (if (= retlst nil)
                                 (setq retlst (list (nth 0 coords) ))                ;提取第一个点
                                 (progn
                                                 (setq ptcur (nth 0 coords))
                                                 ;判断pt是否已经在retlst中,若为F,加入到retlst
                                                 (setq exist nil j 0)
                                                 (while (setq pt (nth j retlst))
                ;ptcur与pt和lastpt比较
                (if (or (and (= (nth 0 ptcur) (nth 0 pt)) (= (nth 1 ptcur) (nth 1 pt)))
                        (and (= (nth 0 ptcur) (nth 0 lastpt)) (= (nth 1 ptcur) (nth 1 lastpt)))
                        )
                         (setq exist t)
                );
                (setq j (+ j 1))
                                                 );while
                                                 
                                                 ;
                                                 (if (not exist)
                                                                 (setq retlst (append retlst (list ptcur)))
                                                 )
                                 );progn
                 );if
                 (setq coords (cdr coords))
                         )
                         (setq retlst (append retlst (list lastpt)))
                         ;判断是否封闭
                         (setq closed nil)
                         (vlax-dump-object item t)
                         (if (vlax-property-available-p item 'Closed)
                                         (setq closed (vlax-get-property item 'Closed))
                         )
                         
                         ;绘新多义线
                         (command "pline")
                         (foreach pti retlst (command pti))
                         (if (= closed :vlax-true)
                                         (command "C" "")
                                         (command "" "")
                         )
                         
                         (command)
                         ;属性匹配
                         (command "matchprop" ename (entlast) "")
                         ;删除线对象
                         (vlax-invoke-method item 'Delete)
                         (setq i (+ i 1))
                         (grtext -1 (itoa i))
         );repeat
         (setvar "osmode" old_osmd)
         (grtext -1 "OK")
         (princ "\nOK!")
         (alert "OK!")
         (grtext -1 "")
         (princ)
);defun


归范化多义线

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

20

主题

872

帖子

10

银币

中流砥柱

Rank: 25

铜币
952
发表于 2004-8-25 03:43:00 | 显示全部楼层
好像只是专门对付闭合冗余结点的,对么? 看上去只是处理了第一和最末尾的点试了一下,曲线段都变成直的了:(
回复

使用道具 举报

124

主题

837

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1333
发表于 2004-8-28 09:34:00 | 显示全部楼层
是, 有些方法给初学者借鉴吧.
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-19 17:34 , Processed in 2.299347 second(s), 65 queries .

© 2020-2025 乐筑天下

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