乐筑天下

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

[编程交流] 关于LM的一个问题:傅提纲

[复制链接]

36

主题

161

帖子

125

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
182
发表于 2022-7-5 17:40:03 | 显示全部楼层 |阅读模式
如果选择集有椭圆。样条曲线,所以轮廓不是“LWPOLYLINE”,而是“region”。如何解决这个问题?
 
  1. ;; Outline Objects  -  Lee Mac
  2. ;; Attempts to generate a polyline outlining the selected objects.
  3. ;; sel - [sel] Selection Set to outline
  4. ;; Returns: [sel] A selection set of all objects created
  5. (defun LM:outline ( sel / app are box cmd dis enl ent lst obj rtn tmp )
  6.    (if (setq box (LM:ssboundingbox sel))
  7.        (progn
  8.            (setq app (vlax-get-acad-object)
  9.                  dis (/ (apply 'distance box) 20.0)
  10.                  lst (mapcar '(lambda ( a o ) (mapcar o a (list dis dis))) box '(- +))
  11.                  are (apply '* (apply 'mapcar (cons '- (reverse lst))))
  12.                  dis (* dis 1.5)
  13.                  ent
  14.                (entmakex
  15.                    (append
  16.                       '(   (000 . "LWPOLYLINE")
  17.                            (100 . "AcDbEntity")
  18.                            (100 . "AcDbPolyline")
  19.                            (090 . 4)
  20.                            (070 . 1)
  21.                        )
  22.                        (mapcar '(lambda ( x ) (cons 10 (mapcar '(lambda ( y ) ((eval y) lst)) x)))
  23.                           '(   (caar   cadar)
  24.                                (caadr  cadar)
  25.                                (caadr cadadr)
  26.                                (caar  cadadr)
  27.                            )
  28.                        )
  29.                    )
  30.                )
  31.            )
  32.            (apply 'vlax-invoke
  33.                (vl-list* app 'zoomwindow
  34.                    (mapcar '(lambda ( a o ) (mapcar o a (list dis dis 0.0))) box '(- +))
  35.                )
  36.            )
  37.            (setq cmd (getvar 'cmdecho)
  38.                  enl (entlast)
  39.                  rtn (ssadd)
  40.            )
  41.            (while (setq tmp (entnext enl)) (setq enl tmp))
  42.            (setvar 'cmdecho 0)
  43.            (command
  44.                "_.-boundary" "_a" "_b" "_n" sel ent "" "_i" "_y" "_o" "_p" "" "_non"
  45.                (trans (mapcar '- (car box) (list (/ dis 3.0) (/ dis 3.0))) 0 1) ""
  46.            )
  47.            (while (< 0 (getvar 'cmdactive)) (command ""))
  48.            (entdel ent)
  49.            (while (setq enl (entnext enl))
  50.                (if (and (vlax-property-available-p (setq obj (vlax-ename->vla-object enl)) 'area)
  51.                         (equal (vla-get-area obj) are 1e-4)
  52.                    )
  53.                    (entdel enl)
  54.                    (ssadd  enl rtn)
  55.                )
  56.            )
  57.            (vla-zoomprevious app)
  58.            (setvar 'cmdecho cmd)
  59.            (if (> (sslength rtn) 0);Code added by Chris Wade to return nill if there are no objects
  60.             rtn
  61.             nil
  62.         )
  63.        )
  64.    )
  65. )
  66. ;; Selection Set Bounding Box  -  Lee Mac
  67. ;; Returns a list of the lower-left and upper-right WCS coordinates of a
  68. ;; rectangular frame bounding all objects in a supplied selection set.
  69. ;; s - [sel] Selection set for which to return bounding box
  70. (defun LM:ssboundingbox ( s / a b i m n o )
  71.    (repeat (setq i (sslength s))
  72.        (if
  73.            (and
  74.                (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
  75.                (vlax-method-applicable-p o 'getboundingbox)
  76.                (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'b))))
  77.            )
  78.            (setq m (cons (vlax-safearray->list a) m)
  79.                  n (cons (vlax-safearray->list b) n)
  80.            )
  81.        )
  82.    )
  83.    (if (and m n)
  84.        (mapcar '(lambda ( a b ) (apply 'mapcar (cons a b))) '(min max) (list m n))
  85.    )
  86. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:12:49 | 显示全部楼层
多段线不能包含椭圆段(不使用线性或圆弧近似),因此必须使用区域。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 03:36 , Processed in 0.505312 second(s), 56 queries .

© 2020-2025 乐筑天下

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