乐筑天下

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

根据不同的区域大小插入不同的块

[复制链接]

101

主题

507

帖子

11

银币

中流砥柱

Rank: 25

铜币
910
发表于 2004-1-14 10:40:00 | 显示全部楼层 |阅读模式
这次又要麻烦飞版主了,上次你帮我解决的那个根据两个交点间距不同,插入不同的块,十分好用。这次我遇到了一个新的情况。你可以看看这张图。它是希望能够,根据不同的区域大小,插入不同的块,我想了很久也没什么好办法,你能帮助一下吗?
再次谢谢。

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

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

使用道具 举报

101

主题

507

帖子

11

银币

中流砥柱

Rank: 25

铜币
910
发表于 2004-1-15 10:50:00 | 显示全部楼层
我做了一个可以点选的,要和1搂的图配合用,可能也只能这样了。
各位版主,有好办法可以实现复选,请跟帖告知,谢谢。
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:sg1z2iamc4s.lsp 
下载次数:0  文件大小:1.83 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2004-1-15 12:28:00 | 显示全部楼层
  1. ;;有是有,只是要先框選到要插入圖塊的圍範,不夠完整
  2. ;;BY 龍龍仔(LUCAS)
  3. ;;-------------------------------------------------------------
  4. (defun GETINTERPOINTS (ENT2 / E2 PT3 PT4)
  5.   (setq E2 (entget ENT2))
  6.   (setq PT3 (cdr (assoc 10 E2)))
  7.   (setq PT4 (cdr (assoc 11 E2)))
  8.   (inters PT1 PT2 PT3 PT4)
  9. )
  10. (defun GETALLINTERS (SS / N I J ENT1 POINTS POINT S1 PT1 PT2)
  11.   (setq        N      (sslength SS)
  12.         POINTS '()
  13.   )
  14.   (setq I 0)
  15.   (repeat N
  16.     (setq ENT1 (ssname SS I))
  17.     (setq PT1 (cdr (assoc 10 (entget ENT1))))
  18.     (setq PT2 (cdr (assoc 11 (entget ENT1))))
  19.     (setq S1 (ssget "F" (list PT1 PT2)))
  20.     (setq J 0)
  21.     (repeat (sslength S1)
  22.       (if (and (setq POINT (GETINTERPOINTS (ssname S1 J)))
  23.                (not (member POINT POINTS))
  24.           )
  25.         (setq POINTS (append POINTS (list POINT)))
  26.       )
  27.       (setq J (1+ J))
  28.     )
  29.     (setq I (1+ I))
  30.   )
  31.   POINTS
  32. )
  33. (defun C:TTT (/ OS CMD SS PT_LIST)
  34.   (setq OS (getvar "osmode"))
  35.   (setq CMD (getvar "cmdecho"))
  36.   (setq SS (ssget '((0 . "LINE"))))
  37.   (command "_.undo" "be")
  38.   (setvar "osmode" 0)
  39.   (setvar "cmdecho" 0)
  40.   (setq PT_LIST (GETALLINTERS SS))
  41.   (setq
  42.     PT_LIST
  43.      (vl-sort PT_LIST
  44.               (function
  45.                 (lambda        (P1 P2)
  46.                   (cond        ((vla-object AOBJ1)
  47.           N2        (1+ N1)
  48.     )                                        ;index for inner loop
  49. ;;; Inner loop, go through remaining objects
  50.     (while (vla-object AOBJ2)
  51. ;;;Find intersections of Objects
  52.             IPTS  (vla-intersectwith
  53.                     AOBJ1
  54.                     AOBJ2
  55.                     0
  56.                   )                        ; variant result
  57.             IPTS  (vlax-variant-value IPTS)
  58.       )
  59. ;;;Variant array has values?
  60.       (if (> (vlax-safearray-get-u-bound IPTS 1) 0)
  61.         (progn                                ;array holds values, convert it
  62.           (setq        IPTS                        ;to a list.
  63.                  (vlax-safearray->list IPTS)
  64.           )
  65. ;;;Loop through list constructing points
  66.           (while (> (length IPTS) 0)
  67.             (setq PTS  (cons (list (car IPTS)
  68.                                    (cadr IPTS)
  69.                                    (caddr IPTS)
  70.                              )
  71.                              PTS
  72.                        )
  73.                   IPTS (cdddr IPTS)
  74.             )
  75.           )
  76.         )
  77.       )
  78.       (setq N2 (1+ N2))
  79.     )                                        ;inner loop end
  80.     (setq N1 (1+ N1))
  81.   )                                        ;outer loop end
  82.   (setvar "OSMODE" HOLDOSMODE)
  83.   (command "_.UNDO" "_END")
  84.   PTS
  85. )
  86. (defun C:TTT (/ OS CMD SS PT_LIST EN ENT1 EN1 ENT ARE)
  87.   (setq PT_LIST (INTLINES))
  88.   (setq CMD (getvar "cmdecho"))
  89.   (setvar "cmdecho" 0)
  90.   (command "_.undo" "be")
  91.   (setq OS (getvar "osmode"))
  92.   (setvar "osmode" 0)
  93.   (setq
  94.     PT_LIST
  95.      (vl-sort PT_LIST
  96.               (function
  97.                 (lambda        (P1 P2)
  98.                   (cond        ((vla-object EN1)))
  99.         (cond
  100.           ((equal ARE (* 1200.0 1200.0) 0.001)
  101.            (vl-cmdf "_.insert" "1100x1100" ENT1 "" "" "")
  102.           )
  103.           ((equal ARE (* 1200.0 600.0) 0.001)
  104.            (vl-cmdf "_.insert" "1100x500" ENT1 "" "" "")
  105.           )
  106.           ((equal ARE (* 600.0 600.0) 0.001)
  107.            (vl-cmdf "_.insert" "500x500" ENT1 "" "" "")
  108.           )
  109.         )
  110.         (command "_.erase" EN1 "")
  111.       )
  112.     )
  113.   )
  114.   (setvar "osmode" OS)
  115.   (command "_.undo" "e")
  116.   (setvar "cmdecho" CMD)
  117.   (princ)
  118. )
  119. ;;-------------------------------------------------------------

2樓的程序不用那麼長
;;BY 龍龍仔(LUCAS)
(defun C:TT (/ CMD OS PT1 EN EN1 ARE ENT1)
  (defun AX:GETBOUNDINGBOX (ENT / LL UR)
    (vla-getboundingbox (vlax-ename->vla-object ENT) 'LL 'UR)
    (mapcar 'vlax-safearray->list (list LL UR))
  )
  (setq CMD (getvar "cmdecho"))
  (setvar "cmdecho" 0)
  (command "_.undo" "be")
  (setq OS (getvar "osmode"))
  (setvar "osmode" 0)
  (while (setq PT1 (getpoint "\n指定內部點: "))
    (setq EN (entlast))
    (vl-cmdf "_.boundary" PT1 "")
    (setq EN1 (entlast))
    (if        (not (equal EN EN1))
      (progn
        (setq ARE (vla-get-area (vlax-ename->vla-object EN1)))
        (setq ENT1 (car (AX:GETBOUNDINGBOX EN1)))
        (cond
          ((equal ARE (* 1200.0 1200.0) 0.001)
           (vl-cmdf "_.insert" "1100x1100" ENT1 "" "" "")
          )
          ((equal ARE (* 1200.0 600.0) 0.001)
           (vl-cmdf "_.insert" "1100x500" ENT1 "" "" "")
          )
          ((equal ARE (* 600.0 600.0) 0.001)
           (vl-cmdf "_.insert" "500x500" ENT1 "" "" "")
          )
        )
        (command "_.erase" EN1 "")
      )
    )
  )
  (setvar "osmode" OS)
  (command "_.undo" "e")
  (setvar "cmdecho" CMD)
  (princ)
)
回复

使用道具 举报

20

主题

872

帖子

10

银币

中流砥柱

Rank: 25

铜币
952
发表于 2004-1-15 18:54:00 | 显示全部楼层
谢谢龙版主帮我改程序。
对于龙版主那个框选的程序我有点看不懂,我现在想多增加两个功能不知行不行?
1.能不能判断框中有东西就不要插块?
2.能不能自动实现,实际插的是同一个块,只是方向旋转90度。因为在同一张图中,长方形的
   块,可能是横放,也有可能是竖放。
详见附件。
万分感谢,若能实现,龙版主可帮了我一大忙了。
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:qtgwh3t5awr.dwg 
下载次数:0  文件大小:41.58 KB  售价:2银币 [记录]
下载权限: 不限 以上或 Vip会员   [开通Vip]   [签到领银币]  [免费赚银币]

回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2004-1-16 07:52:00 | 显示全部楼层

  1. ;;BY 龍龍仔(LUCAS)
  2. ;;要先框選到要插入圖塊的圍範,不夠完整
  3. ;;-----------------------------------------------
  4. ;;(setq SS (ssget '((0 . "*LINE") (8 . "right"))));;注意:選線的條件
  5. 1.能不能判斷框中有東西就不要插塊?(修正完成)
  6. (defun AX:GETBOUNDINGBOX (ENT / LL UR)
  7.   (vla-getboundingbox (vlax-ename->vla-object ENT) 'LL 'UR)
  8.   (mapcar 'vlax-safearray->list (list LL UR))
  9. )
  10. ;; CDNC5-02.LSP
  11. ;; Bill Kramer
  12. ;; Find all intersections between objects in
  13. ;; the selection set SS.
  14. ;; Process - Create drawing with intersecting lines and lwpolylines.
  15. ;;           Load function set
  16. ;;           Run vl-cmdf function INTLINES
  17. ;;           Intersections are marked with POINT objects on current layer
  18. (defun INTLINES        (/ SSL                        ;length of SS
  19.                  PTS                        ;returning list
  20.                  AOBJ1                        ;Object 1
  21.                  AOBJ2                        ;Object 2
  22.                  N1                        ;Loop counter
  23.                  N2                        ;Loop counter
  24.                  IPTS                        ;intersects
  25.                  A N NN        HOLDOSMODE)
  26.   (vl-load-com)
  27.   (vl-cmdf "_.UNDO" "_GROUP")
  28.   (setq HOLDOSMODE (getvar "OSMODE"))
  29.   (setvar "OSMODE" 0)
  30.   (setq SS (ssget '((0 . "*LINE") (8 . "right"))))
  31.   ;;注意:選線的條件
  32.   (setq        N1  0                                ;index for outer loop
  33.         SSL (sslength SS)
  34.   )                                        ; Outer loop, first through second to last
  35.   (while (vla-object AOBJ1)
  36.           N2        (1+ N1)
  37.     )                                        ;index for inner loop
  38. ;;; Inner loop, go through remaining objects
  39.     (while (vla-object AOBJ2)
  40. ;;;Find intersections of Objects
  41.             IPTS  (vla-intersectwith
  42.                     AOBJ1
  43.                     AOBJ2
  44.                     0
  45.                   )                        ; variant result
  46.             IPTS  (vlax-variant-value IPTS)
  47.       )
  48. ;;;Variant array has values?
  49.       (if (> (vlax-safearray-get-u-bound IPTS 1) 0)
  50.         (progn                                ;array holds values, convert it
  51.           (setq        IPTS                        ;to a list.
  52.                  (vlax-safearray->list IPTS)
  53.           )
  54. ;;;Loop through list constructing points
  55.           (while (> (length IPTS) 0)
  56.             (setq PTS  (cons (list (car IPTS)
  57.                                    (cadr IPTS)
  58.                                    (caddr IPTS)
  59.                              )
  60.                              PTS
  61.                        )
  62.                   IPTS (cdddr IPTS)
  63.             )
  64.           )
  65.         )
  66.       )
  67.       (setq N2 (1+ N2))
  68.     )                                        ;inner loop end
  69.     (setq N1 (1+ N1))
  70.   )                                        ;outer loop end
  71.   (setvar "OSMODE" HOLDOSMODE)
  72.   (vl-cmdf "_.UNDO" "_END")
  73.   PTS
  74. )
  75. (defun C:TTT (/        OS CMD SS PT_LISTMAXY MAXX EN ENT1 EN1 EN2 ENT ARE)
  76.                                        
  77.   (defun SS1 (A B)
  78.     (ssget "C"
  79.            ENT1
  80.            (list (+ (car ENT1) A) (+ (cadr ENT1) B))
  81.            '((-4 . "")
  82.              (-4 . "NOT>")
  83.             )
  84.     )
  85.   )
  86.   (setq PT_LIST (INTLINES))
  87.   (setq CMD (getvar "cmdecho"))
  88.   (setvar "cmdecho" 0)
  89.   (vl-cmdf "_.undo" "be")
  90.   (setq OS (getvar "osmode"))
  91.   (setvar "osmode" 0)
  92.   (setq
  93.     PT_LIST
  94.      (vl-sort
  95.        PT_LIST
  96.        (function
  97.          (lambda (P1 P2)
  98.            (cond
  99.              ((vla-object EN1)))
  100.         (cond
  101.           ((equal ARE (* 1200.0 1200.0) 0.001)
  102.            (if (= (sslength (SS1 1200 1200)) 1)
  103.              (vl-cmdf "_.insert" "1100x1100" ENT1 "" "" "")
  104.            )
  105.           )
  106.           ((equal ARE (* 1200.0 600.0) 0.001)
  107.            (setq EN2 (AX:GETBOUNDINGBOX EN1))
  108.            (if (equal (- (cadadr EN2) (cadar EN2)) 1200 0.001)
  109.              (if (= (sslength (SS1 600 1200)) 1)
  110.                (progn
  111.                  (vl-cmdf "_.insert" "1100x500" ENT1 "" "" "90")
  112.                  (vl-cmdf "_.mirror"
  113.                           (entlast)
  114.                           ""
  115.                           ENT1
  116.                           (list (car ENT1) (+ 1 (cadr ENT1)))
  117.                           "y"
  118.                  )
  119.                )
  120.                ;;(vl-cmdf "_.move" (entlast) "" "0,0" "600,0")
  121.              )
  122.              (if (= (sslength (SS1 1200 600)) 1)
  123.                (vl-cmdf "_.insert" "1100x500" ENT1 "" "" "")
  124.              )
  125.            )
  126.           )
  127.           ((equal ARE (* 600.0 600.0) 0.001)
  128.            (if (= (sslength (SS1 600 600)) 1)
  129.              (vl-cmdf "_.insert" "500x500" ENT1 "" "" "")
  130.            )
  131.           )
  132.         )
  133.         (vl-cmdf "_.erase" EN1 "")
  134.       )
  135.     )
  136.   )
  137.   (setvar "osmode" OS)
  138.   (vl-cmdf "_.undo" "e")
  139.   (setvar "cmdecho" CMD)
  140.   (princ)
  141. )
  142. ;;-----------------------------
回复

使用道具 举报

101

主题

507

帖子

11

银币

中流砥柱

Rank: 25

铜币
910
发表于 2004-1-16 13:14:00 | 显示全部楼层
谢谢龙版主,万分感谢。
回复

使用道具 举报

29

主题

1152

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1268
发表于 2004-1-16 16:12:00 | 显示全部楼层
在程序中(setq SS (ssget '((0 . "*LINE") (8 . "right"))))这一句,
若改成(setq SS (ssget '((0 . "*LINE"))))便无法运行,不知能不能不把图层放进选择过滤器中?因为每张图的图层并不一定相同,如果只能选择right这一层上的线,程序的局限性太大。
谢谢龙版主。
回复

使用道具 举报

101

主题

507

帖子

11

银币

中流砥柱

Rank: 25

铜币
910
发表于 2004-1-19 09:14:00 | 显示全部楼层
注意,有两个地方有这个right的,是不是都改了,
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-8 09:30 , Processed in 1.057386 second(s), 75 queries .

© 2020-2025 乐筑天下

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