天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 86|回复: 0

批量分图lisp

[复制链接]
  • TA的每日心情
    开心
    2024-8-31 15:58
  • 签到天数: 89 天

    [LV.6]常住居民II

    488

    主题

    207

    回帖

    3366

    积分

    管理员

    积分
    3366
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    [code](vl-ACAD-defun
      (DEFUN C:PF (/ ODOSM I OJ_SS BLOCK_NAME DWG_LIST DWG_PATH PT1 PT2 DWGNO MIN_PT
                   MAX_PT 图框类型 多种类型
                  )
        (VL-LOAD-COM)
        (DEFUN OPENPATH (EXT / SHELL)
          (VL-LOAD-COM)
          (setq SHELL (vlax-create-object "shell.application"))
          (vlax-invoke SHELL 'OPEN EXT)
          (vlax-release-object SHELL)
        )
        (DEFUN GETBLKREC (BLK_NAME / ENTTYPE MAXX MAXY MINX MINY)
          (DEFUN ROTATE_POINT (PT ANG / DIS)
            (setq DIS (DISTANCE '(0 0) PT))
            (setq ANG (+ (ANGLE '(0 0) PT) ANG))
            (setq PT (POLAR '(0 0) ANG DIS))
          )
          (DEFUN AYGETALLENTINBLK (BLKENTNAME TX0 TY0 TXN TYN TAN / XBLKNAME XBLKDEF
                                   ENTNAME1 ENTTYPE ENTNAMELIST X0 Y0 XN YN AN
                                  )
            (setq OJ_TEMP (ENTGET BLKENTNAME))
            (setq AN (CDR (ASSOC 50 OJ_TEMP)))
            (setq XN (CDR (ASSOC 41 OJ_TEMP)))
            (setq YN (CDR (ASSOC 42 OJ_TEMP)))
            (setq BASE_POINT (CDR (ASSOC 10 OJ_TEMP)))
            (setq AN (* (+ AN TAN) (/ XN (ABS XN)) (/ YN (ABS YN))))
            (setq XN (* TXN XN))
            (setq YN (* TYN YN))
            (setq BASE_POINT (ROTATE_POINT BASE_POINT TAN))
            (setq X0 (CAR BASE_POINT))
            (setq Y0 (CADR BASE_POINT))
            (setq X0 (+ (* X0 TXN) TX0))
            (setq Y0 (+ (* Y0 TYN) TY0))
            (setq XBLKNAME (CDR (ASSOC 2 (ENTGET BLKENTNAME))))
            (setq ENTNAMELIST (CONS (LIST XBLKNAME X0 Y0 XN YN AN) ENTNAMELIST))
            (setq XBLKDEF (TBLOBJNAME "Block" XBLKNAME))
            (while (and (setq ENTNAME1 (ENTNEXT XBLKDEF)))
              (setq ENTTYPE (CDR (ASSOC 0 (ENTGET ENTNAME1))))
              (if (= ENTTYPE "INSERT")
                (PROGN
                  (setq ENTNAMELIST (CONS
                                      (AYGETALLENTINBLK ENTNAME1 X0 Y0 XN YN AN)
                                      ENTNAMELIST
                                    )
                  )
                )
                (PROGN
                  (if (= ENTTYPE "LINE")
                    (PROGN (setq LINE1 (vlax-ename->vla-object ENTNAME1))
                           (setq PT1 (vlax-get LINE1 'STARTPOINT))
                           (setq PT2 (vlax-get LINE1 'ENDPOINT))
                           (setq PT1 (ROTATE_POINT PT1 AN))
                           (setq PT2 (ROTATE_POINT PT2 AN))
                           (setq X1 (CAR PT1))
                           (setq Y1 (CADR PT1))
                           (setq X1 (+ (* X1 XN) X0))
                           (setq Y1 (+ (* Y1 YN) Y0))
                           (setq X2 (CAR PT2))
                           (setq Y2 (CADR PT2))
                           (setq X2 (+ (* X2 XN) X0))
                           (setq Y2 (+ (* Y2 YN) Y0))
                           (if (NULL MAXX)
                             (PROGN (setq MAXX X1))
                           )
                           (if (NULL MAXY)
                             (PROGN (setq MAXY Y1))
                           )
                           (if (NULL MINX)
                             (PROGN (setq MINX X1))
                           )
                           (if (NULL MINY)
                             (PROGN (setq MINY Y1))
                           )
                           (setq MAXX (MAX MAXX X1 X2))
                           (setq MAXY (MAX MAXY Y1 Y2))
                           (setq MINX (MIN MINX X1 X2))
                           (setq MINY (MIN MINY Y1 Y2))
                    )
                  )
                  (if (= ENTTYPE "LWPOLYLINE")
                    (PROGN
                      (setq PL_DATE (ENTGET ENTNAME1))
                      (FOREACH DATE1 PL_DATE
                        (if (= (CAR DATE1) 10)
                          (PROGN (setq PT1 (LIST (CADR DATE1) (CADDR DATE1)))
                                 (setq PT1 (ROTATE_POINT PT1 AN))
                                 (setq X1 (CAR PT1))
                                 (setq Y1 (CADR PT1))
                                 (setq X1 (+ (* X1 XN) X0))
                                 (setq Y1 (+ (* Y1 YN) Y0))
                                 (if (NULL MAXX)
                                   (PROGN (setq MAXX X1))
                                 )
                                 (if (NULL MAXY)
                                   (PROGN (setq MAXY Y1))
                                 )
                                 (if (NULL MINX)
                                   (PROGN (setq MINX X1))
                                 )
                                 (if (NULL MINY)
                                   (PROGN (setq MINY Y1))
                                 )
                                 (setq MAXX (MAX MAXX X1))
                                 (setq MAXY (MAX MAXY Y1))
                                 (setq MINX (MIN MINX X1))
                                 (setq MINY (MIN MINY Y1))
                          )
                        )
                      )
                    )
                  )
                )
              )
              (setq XBLKDEF ENTNAME1)
            )
            (REVERSE ENTNAMELIST)
          )
          (setq ENTTYPE (CDR (ASSOC 0 (ENTGET BLK_NAME))))
          (if (= ENTTYPE "INSERT")
            (PROGN (setq MAXX nil)
                   (setq MAXY nil)
                   (setq MINX nil)
                   (setq MINY nil)
                   (AYGETALLENTINBLK BLK_NAME 0 0 1 1 0)
            )
          )
          (LIST (LIST MAXX MAXY) (LIST MINX MINY))
        )
        (DEFUN VLEX-GETATTRIBUTES (ENT / BLKREF LST)
          (if
            (=
              (vla-get-ObjectName
                (setq BLKREF (vlax-ename->vla-object ENT))
              )
              "AcDbBlockReference"
            )
            (PROGN
              (if (vla-get-HasAttributes BLKREF)
                (PROGN
                  (MAPCAR
                    '(LAMBDA (X)
                       (SETQ LST (CONS
                                   (CONS (vla-get-TagString X)
                                         (vla-get-TextString X)
                                   )
                                   LST
                                 )
                       )
                     )
                    (vlax-safearray->list
                      (vlax-variant-value (vla-GetAttributes BLKREF))
                    )
                  )
                )
              )
            )
          )
          (REVERSE LST)
        )
        (PRINC "选择图框:")
        (SETVAR "cmdecho" 0)
        (VL-CMDF "ucs" "w")
        (setq OJ_SS (SSGET
                      '((2 . "Elivate*,Elicc*,BoRui*,Fortune*,TK-A*,TK-JG-*,TK-MT-"))
                    )
        )
        (setq ODOSM (GETVAR "osmode"))
        (setq ERROR_LIST (LIST))
        (setq I -1)
        (setq DWG_LIST (LIST))
        (setq 重复 "no")
        (setq 空白 "no")
        (if OJ_SS
          (PROGN
            (if
              (setq OJ_SY (SSGET
                            "X"
                            '((8 . "Dimension") (100 . "AcDbBlockReference"))
                          )
              )
              (PROGN (VL-CMDF "_DRAWORDER" OJ_SY "" "F"))
            )
            (setq FILE_PATH (vlax-get
                              (vlax-get (vlax-get-acad-object) 'ACTIVEDOCUMENT)
                              'FULLNAME
                            )
            )
            (setq ERROR_LIST (LIST))
            (REPEAT (SSLENGTH OJ_SS)
              (setq BLOCK_NAME (SSNAME OJ_SS (setq I (1+ I))))
              (setq BLOCK_ENAME (vla-get-EffectiveName
                                  (vlax-ename->vla-object BLOCK_NAME)
                                )
              )
              (if (NULL 图框类型)
                (PROGN (setq 图框类型 BLOCK_ENAME))
                (PROGN
                  (if (/= 图框类型 BLOCK_ENAME)
                    (PROGN (setq 多种类型 T))
                  )
                )
              )
              (setq RECPT (GETBLKREC BLOCK_NAME))
              (setq MAX_PT (CAR RECPT))
              (setq MIN_PT (CADR RECPT))
              (setq DWG_PATH (STRCAT (GETVAR "DWGPREFIX") "DWG"))
              (VL-MKDIR DWG_PATH)
              (setq ATTLIST (VLEX-GETATTRIBUTES BLOCK_NAME))
              (COND
                ((ASSOC "图纸编号" ATTLIST)
                 (setq DWGNO (CDR (ASSOC "图纸编号" ATTLIST)))
                )
                ((ASSOC "DRAWING-NO." ATTLIST)
                 (setq DWGNO (CDR (ASSOC "DRAWING-NO." ATTLIST)))
                )
                ((ASSOC "图纸编号DRAWINGNO." ATTLIST)
                 (setq DWGNO (CDR (ASSOC "图纸编号DRAWINGNO." ATTLIST)))
                )
                ((ASSOC "SHEET-NO." ATTLIST)
                 (setq DWGNO (CDR (ASSOC "SHEET-NO." ATTLIST)))
                )
              )
              (if (ASSOC "版号VERSION" ATTLIST)
                (PROGN (setq REV (CDR (ASSOC "版号VERSION" ATTLIST))))
              )
              (if (AND DWGNO (/= DWGNO ""))
                (PROGN
                  (if (ASSOC DWGNO DWG_LIST)
                    (PROGN
                      (command "CIRCLE")
                      (command "2p")
                      (command MIN_PT)
                      (command MAX_PT)
                      (PRINC (STRCAT "\n已有图纸与" DWGNO "重复,请检查!"))
                      (setq 重复 "yes")
                    )
                    (PROGN
                      (setq DWG_LIST (CONS (LIST DWGNO BLOCK_NAME MIN_PT MAX_PT)
                                           DWG_LIST
                                     )
                      )
                    )
                  )
                )
                (PROGN (setq 空白 "yes")
                       (command "CIRCLE")
                       (command "2p")
                       (command MIN_PT)
                       (command MAX_PT)
                )
              )
            )
            (if (= 重复 "yes")
              (PROGN (ALERT "有图纸编号重复,请核查!"))
            )
            (if (= 空白 "yes")
              (PROGN (ALERT "还有图纸没有填图号,请核查!"))
            )
            (if (AND (/= 空白 "yes") (/= 重复 "yes"))
              (PROGN
                (FOREACH DWG1 DWG_LIST
                  (setq DWGNO (CAR DWG1))
                  (setq BLOCK_NAME (CADR DWG1))
                  (setq MIN_PT (CADDR DWG1))
                  (setq MAX_PT (CADDDR DWG1))
                  (setq PTLIST (LIST MIN_PT
                                     (LIST (CAR MAX_PT) (CADR MIN_PT))
                                     MAX_PT
                                     (LIST (CAR MIN_PT) (CADR MAX_PT))
                               )
                  )
                  (VL-FILE-DELETE (STRCAT DWG_PATH "\\" DWGNO ".dwg"))
                  (VL-FILE-DELETE (STRCAT DWG_PATH "\\" DWGNO ".DWG"))
                  (setq DWG_NAME (STRCAT DWG_PATH "\\" DWGNO ".dwg"))
                  (SETVAR "osmode" 0)
                  (VL-CMDF "zoom" "w" MAX_PT MIN_PT)
                  (setq SSS nil)
                  (if (WCMATCH DWGNO "*-AS-*-*-*,*-FA-*-*-*,*-FD-*-*-*")
                    (PROGN
                      (setq SSS (SSGET
                                  "w"
                                  MAX_PT
                                  MIN_PT
                                  '((-4 . "<NOT")
                                    (2 . "Elivate*,Elicc*,BoRui*,Fortune*,TK-A*,TK-JG-*,TK-MT-")
                                    (-4 . "NOT>")
                                   )
                                )
                      )
                    )
                    (PROGN
                      (setq SSS (SSGET "w"
                                       MAX_PT
                                       MIN_PT
                                       '((-4 . "<AND")
                                         (-4 . "<NOT")
                                         (8 . "Defpoints")
                                         (-4 . "NOT>")
                                         (-4 . "<NOT")
                                         (2 . "Elicc_ANSI*")
                                         (-4 . "NOT>")
                                         (-4 . "AND>")
                                        )
                                )
                      )
                    )
                  )
                  (setq SSS (SSADD BLOCK_NAME SSS))
                  (command "-WBLOCK")
                  (command DWG_NAME)
                  (command "")
                  (command MIN_PT)
                  (command SSS)
                  (command "")
                  (command "oops")
                  (command "zoom")
                  (command "p")
                )
              )
            )
          )
          (PROGN (PRINC "\n 没有选择到对象!"))
        )
        (if 多种类型
          (PROGN (ALERT "分图过程中发现有多种图框,请检查!"))
        )
        (if (AND (/= 空白 "yes") (/= 重复 "yes"))
          (if DWG_PATH
            (PROGN
              (if (FINDFILE DWG_PATH)
                (PROGN (OPENPATH DWG_PATH))
              )
            )
          )
        )
        (SETVAR "cmdecho" 1)
        (SETVAR "osmode" ODOSM)
        (PRINC)
      )
    )[/code]

     

     

     

     

    批量分图lisp
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池| |网站地图

    GMT+8, 2024-9-8 10:51 , Processed in 0.061909 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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