明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 世井

[提问] 求大师一个,曲线断开,分开 生成外轮廓

[复制链接]
 楼主| 发表于 昨天 09:57 | 显示全部楼层

大师,断口大于4或者小 于4 的时候,加长2,不是空着的就是交叉,(COMMAND "_.pedit" "m" ss "" "j" 50 "")容差50都连不了
回复

使用道具 举报

 楼主| 发表于 昨天 10:02 | 显示全部楼层

大师,提取外轮廓,2007版好像   没有LOO这个功能,
回复

使用道具 举报

 楼主| 发表于 11 小时前 | 显示全部楼层
本帖最后由 世井 于 2025-2-22 14:58 编辑

大师提取外轮廓有没有函数之类的提供一下哦,谢谢, 我只能写到偏移这里了
回复

使用道具 举报

 楼主| 发表于 6 小时前 | 显示全部楼层
本帖最后由 世井 于 2025-2-22 17:05 编辑

大师帮我看一个,为什么 有时候会出错(defun c:tt ( / ss obj p1 P9 ss1 n en pt1 pt2 SS2 ssaa s0 iidx SS3 idx ent1)
  (setvar "CMDECHO" 0)
  (command "_undo" "be")
  (setq ss (ssget))
  (SETQ obj (baoweihe SS))
  (setq p1 (car obj));左下角点
  (setq p9 (cadr obj));右上角点
  (command "_copyclip" "non" p1 ss "");复制一个隐藏
  (SETVAR 'PEDITACCEPT 1) ;转化为多段线
  (COMMAND "_.pedit" "m" ss "" "j" 0 "")
(setq ss1 (ssget "w" p9 p1))
  (repeat (setq n (sslength ss1))
    (setq en  (ssname ss1 (setq n (1- n)))
          pt1 (vlax-curve-getstartpoint en)
          pt2 (vlax-curve-getendpoint en)
    )
    (command "lengthen" "de" 2 "non" (list en pt1) "non" (list en pt2) "")
  )
  (setvar "QAFLAGS" 1)
  (command "explode" ss1 "")
  (setvar "QAFLAGS" 0)
  (setq ss2 (ssget "p"))
  (COMMAND "_.pedit" "m" ss2 "" "j" 0 "")
  (setq ssaa (ssget "w" p9 p1 '((0 . "*POLYLINE,*LWPOLYLINE"))))
      (setq s0 (ss->lst ssaa))  
  (mapcar '(lambda (x) (vla-Offset (Vlax-Ename->Vla-Object x) 15)) s0)
  (repeat  (setq iidx (sslength ssaa)) (entdel (ssname ssaa (setq iidx (1- iidx)))) )
  (setq SS3 (ssget "C" p9 p1 '((0 . "*POLYLINE,*LWPOLYLINE"))))            
            (LM:outline SS3)
  ;(set ent1 (entlast))   
           (repeat  (setq idx (sslength SS3))
                    (entdel (ssname SS3 (setq idx (1- idx)))) ) ;删除原来
  ;(vla-Offset (Vlax-Ename->Vla-Object ent1) -5)
  ;(entdel ent1)
  (command "_pasteclip" "non" p1)
  (command "_undo" "e")
  (princ))  
(defun ss->lst(ss);选择集转图元名列表
(vl-remove-if(function listp)(mapcar (function cadr) (ssnamex SS))))
(defun baoweihe (sel / idx llp ls1 ls2 obj urp) ;算出包围框
    (repeat (setq idx (sslength sel))
      (setq obj (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))
      (if
    (and
      (vlax-method-applicable-p obj 'getboundingbox)
      (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list obj 'llp 'urp))))    )
     (setq ls1 (cons (vlax-safearray->list llp) ls1)
           ls2 (cons (vlax-safearray->list urp) ls2)     )      )    )
    (if (and ls1 ls2)
      (mapcar '(lambda (a b) (apply 'mapcar (cons a b))) '(min max) (list ls1 ls2))    ))
(defun LM:outline ( sel / app are box cmd dis enl ent lst obj rtn tmp );创建外轮廓
    (if (setq box (LM:ssboundingbox sel))
        (progn
            (setq app (vlax-get-acad-object)
                  dis (/ (apply 'distance box) 20.0)
                  lst (mapcar '(lambda ( a o ) (mapcar o a (list dis dis))) box '(- +))
                  are (apply '* (apply 'mapcar (cons '- (reverse lst))))
                  dis (* dis 1.5)
                  ent
                (entmakex
                    (append
                       '(   (000 . "LWPOLYLINE")
                            (100 . "AcDbEntity")
                            (100 . "AcDbPolyline")
                            (090 . 4)
                            (070 . 1)
                        )
                        (mapcar '(lambda ( x ) (cons 10 (mapcar '(lambda ( y ) ((eval y) lst)) x)))
                           '(   (caar   cadar)
                                (caadr  cadar)
                                (caadr cadadr)
                                (caar  cadadr)
                            )   )) ))
            (apply 'vlax-invoke
                (vl-list* app 'zoomwindow
                    (mapcar '(lambda ( a o ) (mapcar o a (list dis dis 0.0))) box '(- +))) )
            (setq cmd (getvar 'cmdecho)
                  enl (entlast)
                  rtn (ssadd)            )
            (while (setq tmp (entnext enl)) (setq enl tmp))
            (setvar 'cmdecho 0)
            (command  "_.-boundary" "_a" "_b" "_n" sel ent "" "_i" "_y" "_o" "_p" "" "_non"
                (trans (mapcar '- (car box) (list (/ dis 3.0) (/ dis 3.0))) 0 1) ""  )
            (while (< 0 (getvar 'cmdactive)) (command ""))
            (entdel ent)
            (while (setq enl (entnext enl))
                (if (and (vlax-property-available-p (setq obj (vlax-ename->vla-object enl)) 'area)
                         (equal (vla-get-area obj) are 1e-4) )
                    (entdel enl)
                    (ssadd  enl rtn)
                ) )
            (vla-zoomprevious app)
            (setvar 'cmdecho cmd)
            rtn
        )    ))
(defun LM:ssboundingbox ( s / a b i m n o )
    (repeat (setq i (sslength s))
        (if            (and
                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
                (vlax-method-applicable-p o 'getboundingbox)
                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b)))) )
            (setq m (cons (vlax-safearray->list a) m)
                  n (cons (vlax-safearray->list b) n)            )        )    )
    (if (and m n)
        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))    ))

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-22 21:30 , Processed in 0.218721 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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