乐筑天下

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

[编程交流] 舱口2组

[复制链接]

24

主题

141

帖子

115

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2022-7-5 16:15:16 | 显示全部楼层 |阅读模式
你好
 
我从表单中提取了以下代码行,并尝试进行更改。
我的问题是它并不总是有效。
不幸的是,我看不出为什么它经常有效,也经常无效。
 
此Lisp应:
 
图形中有多组对象。
图形已包含一些默认图案填充。
 
1) 用户选择现有图案填充,然后填充属于不同组的不同区域
用这个图案填充。
2) 当用户完成“_ADDSELECTED”命令后,Lisp应该将每个单独的图案填充添加到他们拥有的组中
封闭。
 
它经常工作,但并不总是如此!为什么?
请帮忙。
 
马丁
 
Lisp程序:
  1. ;;----------------------=={ Inside-p }==----------------------;;
  2. ;;                                                            ;;
  3. ;;  Predicate function to determine whether a point lies      ;;
  4. ;;  inside a supplied LWPolyline.                             ;;
  5. ;;------------------------------------------------------------;;
  6. ;;  Author: Lee Mac - www.lee-mac.com                         ;;
  7. ;;  Using some code by gile (as marked below), thanks gile.   ;;
  8. ;;------------------------------------------------------------;;
  9. ;;  Arguments:                                                ;;
  10. ;;  pt  - 3D WCS point to test                                ;;
  11. ;;  ent - LWPolyline Entity against which to test point       ;;
  12. ;;------------------------------------------------------------;;
  13. ;;  Returns:  T if supplied point lies inside supplied LWPoly ;;
  14. ;;------------------------------------------------------------;;
  15. (defun LM:Inside-p (pt ent / _GroupByNum lst nrm obj tmp)
  16. (defun _GroupByNum (l n / r)
  17.    (if        l
  18.      (cons
  19. (reverse (repeat n
  20.            (setq r (cons (car l) r)
  21.                  l (cdr l)
  22.            )
  23.            r
  24.          )
  25. )
  26. (_GroupByNum l n)
  27.      )
  28.    )
  29. )
  30. (if (= (type ent) 'VLA-OBJECT)
  31.    (setq obj ent
  32.   ent (vlax-vla-object->ename ent)
  33.    )
  34.    (setq obj (vlax-ename->vla-object ent))
  35. )
  36. (setq        lst
  37. (_GroupByNum
  38.    (vlax-invoke
  39.      (setq tmp
  40.             (vlax-ename->vla-object
  41.               (entmakex
  42.                 (list
  43.                   (cons 0 "RAY")
  44.                   (cons 100 "AcDbEntity")
  45.                   (cons 100 "AcDbRay")
  46.                   (cons 10 pt)
  47.                   (cons 11 (trans '(1. 0. 0.) ent 0))
  48.                 )
  49.               )
  50.             )
  51.      )
  52.      'IntersectWith
  53.      obj
  54.      acextendnone
  55.    )
  56.    3
  57. )
  58. )
  59. (vla-delete tmp)
  60. (setq nrm (cdr (assoc 210 (entget ent))))
  61. ;; gile:
  62. (and
  63.    lst
  64.    (not (vlax-curve-getparamatpoint ent pt))
  65.    (=
  66.      1
  67.      (rem
  68. (length
  69.   (vl-remove-if
  70.     (function
  71.       (lambda (p / pa p- p+ p0 s1 s2)
  72.         (setq pa (vlax-curve-getparamatpoint ent p))
  73.         (or
  74.           (and (equal (fix (+ pa
  75.                               (if (minusp pa)
  76.                                 -0.5
  77.                                 0.5
  78.                               )
  79.                            )
  80.                       )
  81.                       pa
  82.                       1e-8
  83.                )
  84.                (setq p-
  85.                       (cond
  86.                         ((setq p- (vlax-curve-getPointatParam
  87.                                     ent
  88.                                     (- pa 1e-
  89.                                   )
  90.                          )
  91.                          (trans p- 0 nrm)
  92.                         )
  93.                         ((trans        (vlax-curve-getPointatParam
  94.                                   ent
  95.                                   (- (vlax-curve-getEndParam ent) 1e-
  96.                                 )
  97.                                 0
  98.                                 nrm
  99.                          )
  100.                         )
  101.                       )
  102.                )
  103.                (setq p+
  104.                       (cond
  105.                         ((setq p+ (vlax-curve-getPointatParam
  106.                                     ent
  107.                                     (+ pa 1e-
  108.                                   )
  109.                          )
  110.                          (trans p+ 0 nrm)
  111.                         )
  112.                         ((trans        (vlax-curve-getPointatParam
  113.                                   ent
  114.                                   (+ (vlax-curve-getStartParam ent) 1e-
  115.                                 )
  116.                                 0
  117.                                 nrm
  118.                          )
  119.                         )
  120.                       )
  121.                )
  122.                (setq p0 (trans pt 0 nrm))
  123.                (<= 0 (* (sin (angle p0 p-)) (sin (angle p0 p+))))
  124.                ;; LM Mod
  125.           )
  126.           (and
  127.             (/= 0. (vla-getBulge obj (fix pa)))
  128.             (equal
  129.               '(0. 0.)
  130.               (cdr
  131.                 (trans (vlax-curve-getFirstDeriv ent pa) 0 nrm)
  132.               )
  133.               1e-9
  134.             )
  135.           )
  136.         )
  137.       )
  138.     )
  139.     lst
  140.   )
  141. )
  142. 2
  143.      )
  144.    )
  145. )
  146. )
  147. (defun c:hatch2group (/ ss i lst pt ent drehwink pt1 as OBJ AWS mypick)
  148. (setq mypick (getvar "pickstyle"))
  149. (setvar "pickstyle" 0)
  150. (setq OBJ (entlast))
  151. (command "_ADDSELECTED"
  152.    Pause
  153.    (setq pt1 (getpoint "\nPick Point: "))
  154. )
  155. (while (/= (getvar "CMDACTIVE") 0) (command pause))
  156. (setq AWS (ssadd))
  157. (while (setq OBJ (entnext OBJ)) (ssadd OBJ AWS))
  158. (sssetfirst AWS AWS)
  159. (setq as (entlast))
  160. (if
  161.    (and (setq ss (ssget "_X" '((0 . "LWPOLYLINE"))))
  162. (repeat (setq i (sslength ss))
  163.    (setq lst (cons (ssname ss (setq i (1- i))) lst))
  164. )
  165. (setq pt pt1)
  166.    )
  167.     ;(if
  168.       (setq ent
  169.       (car
  170.         (vl-member-if
  171.           (function
  172.             (lambda (x) (LM:Inside-p (trans pt 1 0) x))
  173.           )
  174.           lst
  175.         )
  176.       )
  177.       )
  178. ;(vla-put-color (vlax-ename->vla-object ent) acRed)
  179.    
  180. )
  181. (princ)
  182. (command "_groupedit" ent "H" AWS "")
  183. (while (/= (getvar "CMDACTIVE") 0) (command pause))
  184. (setvar "pickstyle" mypick)
  185. (princ)
  186. )
  187. (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 16:36 , Processed in 0.741960 second(s), 54 queries .

© 2020-2025 乐筑天下

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