明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7370|回复: 21

放大样LISP程序

[复制链接]
发表于 2011-5-3 18:35:48 | 显示全部楼层 |阅读模式
请高手帮忙编写放大样LISP程序
要求如下:
1.可用圆及带矩形框选择裁剪,放大,放大倍数可为1
2.要可对块进行裁剪,以及填充线的裁剪
3.放大后的标注比例仍为1:1

以上为基本的3点要求,高手还可补充,谢谢!急盼高手出手相助,不胜感激!
发表于 2015-9-20 12:41:22 | 显示全部楼层
skg123 发表于 2013-4-22 22:12

请教一下,如果要将选择范围改为矩形或多边形如何修改?
回复 支持 0 反对 1

使用道具 举报

发表于 2023-10-29 09:56:30 | 显示全部楼层
305341043 发表于 2017-9-8 14:42
献给所有制图人......

可以放长方形吗
 楼主| 发表于 2017-11-8 09:13:16 | 显示全部楼层
305341043 发表于 2017-9-8 14:42
献给所有制图人......

放大不了图块啊
发表于 2011-5-3 19:35:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2011-5-5 21:04:51 | 显示全部楼层
本帖最后由 raimo 于 2011-5-5 21:06 编辑

大样什么的还是自己来吧..这个就别偷懒啦,不实用的..除非你每个图都出得跟大样一样详细,随便截哪里都可以直接用
 楼主| 发表于 2011-5-5 23:26:47 | 显示全部楼层
因为我们先要画剖视图,所以剖视图中画得较祥细,放大样也跟剖视图一样,所以,有请高手帮忙编写LISP可截取大样,TKS!
发表于 2012-2-8 15:10:02 | 显示全部楼层
帮顶中!!!!!!!!!!!!
发表于 2013-4-22 22:12:51 | 显示全部楼层
  1. ;; http://www.mjtd.com/BBS/dispbbs.asp?boardID=3&ID=25094&page=1
  2. ;; FREEWARE Program - you are free to make copies of this and supply it
  3. ;;                    to others as is.  Author and company make no
  4. ;;                    warrenty on the fitness of this program for anything
  5. ;;                    other than using as an example when learning
  6. ;;                    AutoLISP.
  7. ;;
  8. ;; Adapted from the CADENCE January 1999 article by Bill Kramer
  9. ;;
  10. ;; Detail enlargement macro set.
  11. ;;-----------------------------------------------
  12. ;; The Main Program
  13. ;;-----------------------------------------------
  14. (defun C:DETAIL ( / P1 EN EL PTS SS1)
  15.   (cond
  16.    ;;Set up AutoCAD system variables
  17.    ((DETAIL_0)
  18.       (prompt "\nError in DETAIL_0"))
  19.    ;;
  20.    ;;Operator input of detail center
  21.    ;;and radius.
  22.    ((DETAIL_1) ;;set up EL, P1, RD
  23.       (prompt "\nError in DETAIL_1"))
  24.    ;;
  25.    ;;Operator input of detail graphic location
  26.    ;;and scale for detail display.
  27.    ;;Copy detail area, remove non-detail objects
  28.    ;;like dimensions and text, and scale as
  29.    ;;input by the operator.
  30.    ((DETAIL_2) ;;set up P2, SS1, EN, ENT, SCL
  31.       (prompt "\nError in DETAIL_2"))
  32.    ;;
  33.    ;;Do the trimming of the detail display.
  34.    ((DETAIL_3)
  35.       (prompt "\nError in DETAIL_3"))
  36.    ;;
  37.    ;;Create the text tag and draw connecting
  38.    ;;line between original area and detail
  39.    ;;area.
  40.    ((DETAIL_4) ;;Output text tag
  41.       (prompt "\nError in DETAIL_4"))
  42.    ('T (prompt "\nDetail finished okay."))
  43.   )
  44.   ;;
  45.   ;;Reset system variables
  46.   (mapcar '(lambda (X)
  47.       (setvar (car X) (cadr X))) SYSVAR_LIST)
  48.   (prompt "\nUse TRIM to complete if needed.")
  49.   (princ)
  50. )
  51. ;;-----------------------------------------------
  52. ;; Listing 2: Set up system variables
  53. ;;-----------------------------------------------
  54. (defun DETAIL_0 ()
  55.    (setq SYSVAR_LIST (mapcar '(lambda (X)
  56.      (list X (getvar X)))
  57.      '("CMDECHO"
  58.        "OSMODE"
  59.        "ORTHOMODE"
  60.        "HIGHLIGHT"
  61.       )))
  62.    (setvar "CMDECHO" 0)
  63.    (setvar "OSMODE" 0)
  64.    (setvar "ORTHOMODE" 0)
  65.    (setvar "HIGHLIGHT" 0)
  66.    (if (zerop (getvar "TILEMODE")) ;;make sure we are mspace
  67.       (if (= (getvar "CVPORT") 1) (progn ;;we are in paper space!
  68.          (alert "You must be in Model Space for this routine to function!")
  69.          (exit) ;;hard abort!
  70.       ))
  71.    )
  72.    (if (zerop (getvar "WORLDUCS"))
  73.      (command "_UCS" "_W"))
  74.    nil
  75. )
  76. ;;-----------------------------------------------
  77. ;; Listing 3: Establish area to detail
  78. ;;-----------------------------------------------
  79. (defun DETAIL_1 ()
  80.    (setq P1 (getpoint "\n指定中心: "))
  81.    (if P1 (progn
  82.       (prompt "\n指定范围: ")
  83.       (command "_CIRCLE" P1 pause)
  84.       (setq EN (entlast)
  85.             EL (entget EN)
  86.             RD (if (= (cdr (assoc 0 EL)) "CIRCLE")
  87.                   (cdr (assoc 40 (entget EN)))
  88.                   nil)
  89.       )
  90.       (if RD (progn
  91.          (entdel EN)
  92.          (command "_POLYGON" 15 P1 "I" RD)
  93.          (setq EN (entlast)
  94.                EL (entget EN)
  95.          )
  96.          nil  ;return nil
  97.        )
  98.        1 ;return error level 1.
  99.       ) ;;level 1 is RD not set
  100.     )
  101.     2 ;;return error level 2.
  102.    ) ;level 2 is P1 not set
  103. )
  104. ;;-----------------------------------------------
  105. ;; Listing 4: Copy objects to new location
  106. ;;-----------------------------------------------
  107. (defun DETAIL_2 ()
  108.    (while (setq TMP (assoc 10 EL))
  109.       (setq EL (cdr (member TMP EL))
  110.             PTS (cons (cdr TMP) PTS)
  111.       )
  112.    )
  113.    (entdel EN)
  114.    (setq SS1 (ssget "CP" PTS)
  115.          P2 (getpoint P1 "\n 选择局部图插入点: ")
  116.          CNT (if SS1 (sslength SS1) 0)
  117.    )
  118.    (if P2 (progn
  119.      (repeat CNT
  120.         (if (member
  121.            (cdr (assoc 0
  122.              (entget
  123.                 (ssname
  124.                    SS1
  125.                    (setq CNT (1- CNT))))))
  126.            '("TEXT" "DIMENSION"
  127.              "MTEXT" "INSERT"
  128.             )
  129.           )
  130.          (ssdel (ssname SS1 CNT) SS1)
  131.         )
  132.      )
  133.      (command "_CIRCLE" P1 RD
  134.               "_CIRCLE" P2 RD)
  135.      (setq EN (entlast)
  136.            ENT EN)
  137.      (command "_COPY" SS1 "" P1 P2)
  138.      (setq SS1 (ssadd EN))
  139.      (while (setq ENT (entnext ENT))
  140.         (ssadd ENT SS1)
  141.      )
  142.      (setq SCL (getreal "\n请输入放大倍数 (2): "))
  143.      (if (null SCL) (setq SCL 2.0))
  144.      (if (/= SCL 1.0)
  145.         (command "_SCALE" SS1 "" P2 SCL)
  146.      )
  147.      nil ;;return nil result, all okay.
  148.     )
  149.     1 ;;return error code 1
  150.    ) ;;error code, P2 not input.
  151. )
  152. ;;-----------------------------------------------
  153. ;; Listing 5: Trim the objects copied
  154. ;;-----------------------------------------------
  155. (defun DETAIL_3 ()
  156.    (setq TTT 0) ;;change counter
  157.    (while (setq ENT (ssname SS1 0))
  158.      (ssdel ENT SS1)
  159.      (if (not (equal ENT EN)) (progn
  160.         (setq EL (entget ENT)
  161.               PT (DETAIL_3A EL)
  162.         )
  163.         (if (and PT
  164.               (> (distance P2 PT)
  165.                  (+ 0.2 (* RD SCL))))
  166.          (progn
  167.           (setq TTT (1+ TTT))
  168.           (command "_TRIM" EN ""
  169.                    (list ENT PT) "")
  170.         ))
  171.      ))
  172.      (DETAIL_3B) ;;loop again check
  173.    )
  174.    nil
  175. )
  176. ;;-----------------------------------------------
  177. ;; Listing 6: Find point on object for trim
  178. ;;-----------------------------------------------
  179. (defun DETAIL_3A (EL / TY)
  180.    (setq TY (cdr (assoc 0 EL)))
  181.    (cond
  182.      ((= TY "LINE")
  183.        (if (> (distance (cdr (assoc 10 EL)) P2)
  184.            (distance (cdr (assoc 11 EL)) P2))
  185.          (cdr (assoc 10 EL))
  186.          (cdr (assoc 11 EL))
  187.        )
  188.      )
  189.      ((= TY "ARC")
  190.        (setq PC (cdr (assoc 10 EL))
  191.              PR (cdr (assoc 40 EL))
  192.              PA (cdr (assoc 50 EL))
  193.              PB (cdr (assoc 51 EL))
  194.        )
  195.        (if (> (distance (polar PC PA PR) P2)
  196.               (distance (polar PC PB PR) P2))
  197.           (polar PC PA PR)
  198.           (polar PC PB PR)
  199.        )
  200.      )
  201.      ((= TY "CIRCLE")
  202.        (setq PC (cdr (assoc 10 EL))
  203.              PR (cdr (assoc 40 EL))
  204.        )
  205.        (cond
  206.          ((> (distance P2
  207.                       (polar PC 0.0 PR))
  208.              (* RD SCL))
  209.             (polar PC 0.0 PR))
  210.          ((> (distance P2
  211.                       (polar PC PI PR))
  212.              (* RD SCL))
  213.             (polar PC PI PR))
  214.          ((> (distance P2
  215.                       (polar PC (* 0.5 PI) PR))
  216.              (* RD SCL))
  217.             (polar PC (* 0.5 PI) PR))
  218.          (t (polar PC (* 1.5 PI) PR))
  219.        )
  220.      )
  221.      ((= TY "LWPOLYLINE")
  222.        (setq PR nil)
  223.        (while (and (null PR)
  224.                    (setq PA (assoc 10 EL)))
  225.           (setq EL (cdr (member PA EL))
  226.                 PA (cdr PA)
  227.           )
  228.           (if (> (distance P2 PA) (* RD SCL))
  229.              (setq PR PA)))
  230.      )
  231.      ((= TY "SPLINE")
  232.        (setq PR nil)
  233.        (while (and (null PR)
  234.           (setq PA (assoc 11 EL))
  235.                 EL (cdr (member PA EL))
  236.                 PA (cdr PA))
  237.           (if (> (distance P2 PA) (* RD SCL))
  238.              (setq PR PA)))
  239.      )
  240.      ((= TY "POLYLINE")
  241.        (setq EL (entget
  242.                   (entnext
  243.                      (cdr (assoc -1 EL))))
  244.              PR nil)
  245.        (while (and (null PR)
  246.                    (= (cdr (assoc 0 EL))
  247.                       "VERTEX"))
  248.           (setq PA (cdr (assoc 10 EL))
  249.                 EL (entget
  250.                      (entnext
  251.                         (cdr (assoc -1 EL))))
  252.           )
  253.           (if (> (distance P2 PA)
  254.                  (* RD SCL))
  255.              (setq PR PA)
  256.           )
  257.        )
  258.      )
  259.      ;;add more objects here
  260.    ) ;;end COND for PT assignment
  261. )
  262. ;;-----------------------------------------------
  263. ;; Listing 7: Loop control options for user
  264. ;;-----------------------------------------------
  265. (defun DETAIL_3B ()
  266.    (if (= (sslength SS1) 0)
  267.       (if (> TTT 0) (progn
  268.          (initget 0 "Yes No")
  269.          (setq TTT (getkword (strcat
  270.               "\nChange"
  271.               (itoa TTT)
  272.               " 修剪范围外的对象吗? Yes/No<Yes>")))
  273.          (if (or (null TTT) (= TTT "Yes"))
  274.             (progn
  275.               (setq SS1 (ssadd EN)
  276.                     ENT EN)
  277.               (while (setq ENT (entnext ENT))
  278.                 (ssadd ENT SS1)
  279.               )
  280.               (setq TTT 0)
  281.          ))
  282.       ))
  283.    )
  284. )
  285. ;;-----------------------------------------------
  286. ;; Listing 8: Finishing touches
  287. ;;-----------------------------------------------
  288. (defun DETAIL_4 ()
  289.    (command "_TEXT"
  290.             "_Justify" "_Center"
  291.              (polar P2
  292.                    (* PI 1.5)
  293.                    (+ (* SCL RD)
  294.                       (* 2.5
  295.                          (getvar "TEXTSIZE"))))
  296.    )
  297.    (if (zerop (cdr (assoc 40
  298.               (tblsearch
  299.                  "STYLE"
  300.                  (getvar "TEXTSTYLE")))))
  301.       (command "") ;;text height output option
  302.    )
  303.    (command 0 ;;finish the TEXT command sequence.
  304.             (strcat "Enlarged "
  305.                     (rtos SCL 2
  306.                       (Best_Prec SCL 0 4))
  307.                     "x")
  308.    )
  309.    ;;
  310.    ;; Construct line between detail circles.
  311.    ;;
  312.    (command "_LINE" (polar P1 (angle P1 P2) RD)
  313.             (polar P2 (angle P2 P1) (* RD SCL))
  314.             "")
  315.    nil
  316. )
  317. ;;-----------------------------------------------
  318. ;; Listing 9: Utility Routine from toolbox
  319. ;;-----------------------------------------------
  320. ;; Best_Prec - Given a number (NUM) and the
  321. ;; minimum and maximum precision, this function
  322. ;; returns the precision in the range that will
  323. ;; best fit the number.
  324. ;;
  325. (defun Best_Prec (Num Mn Mx)
  326.    (while (and (<= Mn Mx)
  327.                (/= Num (atof (rtos Num 2 Mn))))
  328.       (setq Mn (1+ Mn))
  329.    )
  330.    Mn
  331. )
发表于 2013-4-23 13:46:09 | 显示全部楼层
太复杂了。
 楼主| 发表于 2013-4-23 18:29:15 | 显示全部楼层
skg123 发表于 2013-4-22 22:12

无法对图块操作
发表于 2015-9-20 13:15:45 | 显示全部楼层
转载
黄明儒

;;*************************************************************************放大主程序
;;全局JBFD_GetScalStri放大倍数(字符),JBFD_BaseNumber标识(数字),JBFD_ZoomStri视口
(defun C:FD (/              BASESYMBOL        BLI1         CLA1          CMD1           CP
             DCLID    DIM1     ENT        ENTCICL         ENTTEXT  FN           FNAME
             GETZOOM  LAY      LIN        NEWBLOCK NEWP          NEWSS           OSM1
             P1              P2       PL        RETURN#         SCALREAL SS           TEXTHEIGH
             X
            )
  ;;1 错误处理
  (defun *error* (s)
    (while (not (equal (getvar "cmdnames") "")) (command nil))
    (if        entText
      (command "_.erase" entText "")
    )
    (if        lay
      (setvar "clayer" lay)
    )
    (setvar "blipmode" bli1)
    (setvar "cmdecho" cmd1)
    (setvar "DIMASSOC" DIM1)
    (setvar "osmode" osm1)
    (princ s)
    (princ "出错啦!")
    (princ)
  )
  ;;2 对象是否在锁定层上
  (defun onlocked (ename / entlst)
    (setq entlst (tblsearch "LAYER" (cdr (assoc 8 (entget ename)))))
    (= 4 (logand 4 (cdr (assoc 70 entlst))))
  )
  ;;3  构成新的选择集,EntCicl不加入
  (defun ss=>NewSS (SS EntCicl / E N NEWSS)
    (setq NewSS (ssadd))
    (repeat (setq n (sslength ss))
      (setq e (ssname ss (setq n (1- n))))
      (if (or (equal e EntCicl) (onlocked e))
        nil
        (progn
          (command "_.copy" e "" (list 0 0 0) (list 0 0 0))
          (setq NewSS (ssadd (entlast) NewSS))
        )
      )
    )
    NewSS
  )
  ;;4 0层上生成块
  (defun NONAME_BLK (SS PCircl / A lay)
    (setq lay (getvar "clayer"))
    (setvar "clayer" "0")
    (setq A (rtos (* (getvar "CDATE") 1E8)))
    (if        (and SS PCircl)
      (progn
        (command "_.BLOCK" A PCircl SS "")
        (command "_.INSERT" A "@" "" "" "")
      )
    )
    (setvar "clayer" lay)
    (entlast)
  )
  ;;5 画引线
  (defun HdrawLeader (EntCicl BaseSymbol      Textheigh              CP      /
                      A              AA      B              BB      C              CC      D
                      DD      EE      ENTTEXT FF      I              TEXTLIS
                     )
    (command "_.text" CP Textheigh "" BaseSymbol)
    (setq entText (entlast))

    (setq TextLis (entget entText))
    (setq i T)
    (while i
      (setq a (grread T 4 0)
            b (car a)
            c (cadr a)
      )
      ;;b=5移动,b=3左键,c=0右键,;;c=13回车,c=32空格
      (cond ((= b 5)
             (redraw)
             (setq a (trans (cadr a) 1 0))
             (setq d (vlax-curve-getclosestpointto EntCicl a))
             (setq aa (car a)
                   bb (cadr a)
                   cc (caddr a)
             )
             (setq dd (car d)
                   ee (cadr d)
                   ff (caddr d)
             )
             (if (<= aa dd)
               (progn (setq TextLis (subst (cons 72 2) (assoc 72 TextLis) TextLis))
                      (setq TextLis (subst (cons 11 a) (assoc 11 TextLis) TextLis))
               )
               (progn (setq TextLis (subst (cons 72 0) (assoc 72 TextLis) TextLis))
                      (setq TextLis (subst (cons 10 a) (assoc 10 TextLis) TextLis))
               )
             )
             (entmod TextLis)
             (grdraw a d 1)
            )
            ((= b 3) (setq i nil))
      )
    )

    (redraw)
    (entdel entText)
    (if        (VL-CATCH-ALL-ERROR-P
          (VL-CATCH-ALL-APPLY 'setvar (list "DIMLDRBLK" "DotSmall"))
        )
      (VL-CATCH-ALL-APPLY 'setvar (list "DIMLDRBLK" "小点"))
    )
    (vl-cmdf "_.layer" "make" "DIM" "Color" 3 "" "")
    (command "_.leader" d (cadr a) "" BaseSymbol "")
  )

  ;;6 返回多义线顶点点列表,有圆弧则用一定角度分割圆弧,闭合多义线点表不含闭合点坐标
  ;;(setq pl (gxl-pL ent 0.017))
  (defun gxl-pL        (en        fgx    /      BJ     BUGLE  D           D0          D1         D2
                 ENT        K      N      OBJ    OBJNAME           PARAM  PLIST         PT
                 SECDEV        VERTEXSNUM
                )
    ;;gxl-get_poly_ptList 返回多义线顶点点列表不含圆弧段内容,闭合多义线点表不含闭合点坐标
    ;;(gxl-get_poly_ptList (car (entsel)))
    (defun gxl-get_poly_ptList (e / _pl n k)
      (if (= 'ename (type e))
        (setq e (vlax-ename->vla-object e))
      )
      (cond ((= "AcDbCircle" (vla-get-ObjectName e))
             (list (vlax-curve-getPointAtParam e 0)
                   (vlax-curve-getPointAtParam e (* pi 0.5))
                   (vlax-curve-getPointAtParam e pi)
                   (vlax-curve-getPointAtParam e (* 1.5 pi))
             )
            )
            ((= "AcDbArc" (vla-get-ObjectName e))
             (list (vlax-curve-getStartPoint e)
                   (vlax-curve-getendPoint e)
             )
            )
            (t
             (setq n (1+ (fix (vlax-curve-getEndParam e)))
                   k -1
             )
             (if (vlax-curve-isClosed e)
               (setq n (1- n))
             )
             (repeat n
               (setq k (1+ k))
               (if (vlax-curve-getSecondDeriv e k)
                 (setq
                   _pl (append _pl (list (vlax-curve-getPointAtParam e k)))
                 )
               )
             )
            )
      )
      _pl
    )

    (if        (= 'ENAME (type en))
      (setq obj        (vlax-ename->vla-object en)
            ent        en
      )
      (setq obj        en
            ent        (vlax-vla-object->ename en)
      )
    )
    (setq vertexsNum
           (fix (vlax-curve-getEndParam ent))
          n 0
    )
    (setq objName (vla-get-ObjectName obj))
    (cond ((= "AcDbCircle" objName)
           (if (equal fgx 0 1e-6)
             (setq fgx (* pi 0.5))
           )
           (setq vertexsNum
                  (fix (/ (* pi 2) fgx))
                 n 0
           )
           (repeat vertexsNum
             (setq pt (vlax-curve-getPointAtParam obj (* n fgx)))
             (setq plist (cons pt plist)
                   n         (1+ n)
             )
           )
           (reverse plist)
          )
          (t
           (if (= "AcDb2dPolyline" objName)
             (progn
               (repeat vertexsNum
                 (setq pt (vlax-curve-getPointAtParam ent n))
                 (setq plist (cons pt plist))
                 (setq pt (vlax-curve-getPointAtParam ent (+ 0.25 n)))
                 (setq plist (cons pt plist))
                 (setq pt (vlax-curve-getPointAtParam ent (+ 0.5 n)))
                 (setq plist (cons pt plist))
                 (setq pt (vlax-curve-getPointAtParam ent (+ 0.75 n)))
                 (setq plist (cons pt plist))
                 (setq n (1+ n))
               )
               (if (not (vlax-curve-isClosed ent))
                 (setq plist (cons (vlax-curve-getEndPoint ent) plist))
               )
               (reverse plist)
             )
             (if (equal fgx 0 1e-6)
               (setq plist (GXL-GET_POLY_PTLIST en))
               (progn
                 (repeat vertexsNum
                   (if (setq secdev (vlax-curve-getSecondDeriv ent n))
                     (progn
                       (setq pt           (vlax-curve-getPointAtParam ent n)
                             bugle (vla-GetBulge obj n)
                       )
                       (setq plist (cons pt plist))
                       (if (/= bugle 0.0)
                         (progn
                           (setq bj (* (atan (abs bugle)) 4))
                           (setq d1    (vlax-curve-getdistAtParam ent n)
                                 d2    (vlax-curve-getdistAtParam ent (1+ n))
                                 d     (- d2 d1)
                                 k     (fix (/ bj fgx))
                                 d0    (/ 1.0 (1+ k))
                                 param n
                           )
                           (if (equal d0 1.0 0.001)
                             (setq plist (cons (vlax-curve-getPointAtParam
                                                 ent
                                                 (+ 0.5 param)
                                               )
                                               plist
                                         )
                             )
                             (repeat k
                               (setq
                                 plist (cons (vlax-curve-getPointAtParam
                                               ent
                                               (setq param (+ param d0))
                                             )
                                             plist
                                       )
                               )
                             )
                           )
                         )
                       )
                     )
                   )
                   (setq n (1+ n))
                 )
                 (if (not (vlax-curve-isClosed ent))
                   (setq plist (cons (vlax-curve-getEndPoint ent) plist))
                 )
                 (reverse plist)
               )
             )
           )
          )
    )
    plist
  )
  ;;7 对话框上用户选择
  (defun getdata ()
    (setq BaseSymbol (get_tile "Fuhao"))
    (setq JBFD_GetScalStri (get_tile "Scal"))
    (setq JBFD_ZoomStri (get_tile "Zoom1"))
  )
  ;;8 对话框
  (defun FDdcl ()
    (setq fname (vl-filename-mktemp nil nil ".dcl"))
    (setq fn (open fname "w"))
    (write-line "Fddcl : dialog{" fn)
    (write-line "label=\"*黄明儒*局部放大 命令:FD\";" fn)
    (write-line ":column{        " fn)
    (write-line
      "        :edit_box{label=\"放大标识(F)\";key=\"Fuhao\";value=\"B\";mnemonic=\"F\";}"
      fn
    )
    (write-line
      "        :edit_box{label=\"放大倍数(S)\";key=\"Scal\";value=\"2.0\";mnemonic=\"S\";} "
      fn
    )
    (write-line
      "        :edit_box{label=\"视口选择(Z)\";key=\"Zoom1\";value=\"0\";mnemonic=\"Z\";} "
      fn
    )
    (write-line
      "        :text{key=\"Scaltext\";value=\"圆0,已知封闭曲线1,椭圆2,其余多边形\";}"
      fn
    )
    (write-line "       }" fn)
    (write-line "       ok_only;" fn)
    (write-line "}" fn)

    (close fn)
    (setq fn (open fname "r"))
    (setq dclid (load_dialog fname))
    (while
      (or (eq (substr (setq lin        (vl-string-right-trim
                                  "\" fn)"
                                  (vl-string-left-trim "(write-line \"" (read-line fn))
                                )
                      )
                      1
                      2
              )
              "//"
          )
          (eq (substr lin 1 (vl-string-search " " lin)) "")
          (not (eq (substr lin (+ (vl-string-search " " lin) 1) 9)
                   " : dialog"
               )
          )
      )
    )
    (new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
    (set_tile "Fuhao" BaseSymbol)
    (set_tile "Scal" JBFD_GetScalStri)
    (set_tile "Zoom1" JBFD_ZoomStri)
    (mode_tile "Scal" 2)
    (Action_Tile "Fuhao" "(Setq BaseSymbol $Value)")
    (Action_Tile "Scal" "(Setq JBFD_GetScalStri $Value)")
    (Action_Tile "Zoom1" "(Setq JBFD_ZoomStri $Value)")
    (action_tile "accept" "(getdata)(done_dialog)")
    (setq return# (start_dialog))
    (unload_dialog dclid)
    (close fn)
    (vl-file-delete fname)
  )

  ;;9 本程序主程序
  (VL-LOAD-COM)
  (setq bli1 (getvar "blipmode"))
  (setq cmd1 (getvar "cmdecho"))
  (setq DIM1 (getvar "DIMASSOC"))
  (setq CLA1 (getvar "CLAYER"))
  (setq osm1 (getvar "osmode"))
  (setvar "blipmode" 0)
  (setvar "cmdecho" 0)
  (setvar "DIMASSOC" 1)
  (setvar "osmode" 0)
  (vl-cmdf "layer" "make" "DIM" "Color" 3 "" "")
  (if (= JBFD_BaseNumber nil)
    (setq JBFD_BaseNumber 65)
    (setq JBFD_BaseNumber (1+ JBFD_BaseNumber))
  )
  (SETQ BaseSymbol (chr JBFD_BaseNumber))
  (if (= JBFD_GetScalStri nil)
    (setq JBFD_GetScalStri "2.5")
  )
  (if (= JBFD_ZoomStri nil)
    (setq JBFD_ZoomStri "0")
  )
  (FDdcl)
  (setq JBFD_BaseNumber (ascii BaseSymbol))
  (SETQ Scalreal (atof JBFD_GetScalStri))
  (SETQ getZoom (abs (atoi JBFD_ZoomStri)))

  (if (/= 1 getZoom)
    (SETQ CP (GETPOINT "\n 局部放大中心点: "))
  )
  (cond        ((= 0 getZoom) (command "_.CIRCLE" CP pause))
        ((= 1 getZoom)
         (while
           (not
             (and
               (setq ent (car (entsel "\n 拾取封闭曲线:")))
               (setq p1 (cdr (assoc 0 (entget ent))))
               (member p1
                       '("SPLINE" "LWPOLYLINE" "POLYLINE" "CIRCLE" "ELLIPSE")
               )
               (if (member p1 '("SPLINE" "LWPOLYLINE" "POLYLINE"))
                 (= (vlax-get-property (vlax-ename->vla-object ent) 'Closed)
                    :vlax-true
                 )
                 T
               )
             )
           )
         )
        )
        ((= 2 getZoom) (command "_.ellipse" CP pause pause))
        (T (command "_.polygon" getZoom CP "_I" pause))
  )
  (SETQ EntCicl (entlast))
  ;;(ayEntSSHighLight EntCicl)
  (if (= 1 getZoom)
    (SETQ EntCicl ent)
  )

  (vla-getboundingbox
    (vlax-ename->vla-object EntCicl)
    'p1
    'p2
  )
  (setq p1 (vlax-safearray->list p1))
  (setq p2 (vlax-safearray->list p2))
  (setq CP (mapcar '(lambda (X) (/ x 2.0)) (mapcar '+ p1 p2))) ;中心点  
  (setq pl (gxl-pL EntCicl 0.017))                  ;取点
  (setq ss (ssget "cp" pl))                          ;选择对象
  (setq newSS (ss=>NewSS SS EntCicl))                  ;原地拷贝
  (setq Newblock (NONAME_BLK newSS CP))                  ;制作成块  
  ;;遮盖
  (command "_.xclip" Newblock "" "n" "p")
  (foreach a pl (command a))
  (command "")
  (while (not (equal (getvar "cmdnames") "")) (command nil))

  (command "_.copy" EntCicl "" (list 0 0 0) (list 0 0 0))
  (setq EntCicl (entlast))

  (SETQ Textheigh (* (GETVAR "DIMTXT") (GETVAR "DIMSCALE"))) ;字度Textheigh
  (HdrawLeader EntCicl BaseSymbol Textheigh CP)          ;画引线
  (setq        NewP (mapcar '+
                     (list 0 (+ (* Scalreal (- (cadr p2) (cadr CP))) Textheigh))
                     CP
             )
  )
  (command "_.text"
           "J"
           "C"
           NewP
           Textheigh
           ""
           (strcat BaseSymbol " 放大 " JBFD_GetScalStri "X")
  )

  (command "_.scale" Newblock EntCicl "" CP Scalreal)
  (command "_.move" Newblock (entlast) EntCicl "" CP pause)

  (setvar "blipmode" bli1)
  (setvar "cmdecho" cmd1)
  (setvar "DIMASSOC" DIM1)
  (setvar "osmode" osm1)
  (gc)
  (princ)
)
;;*************************************************************************放大主程序
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:24 , Processed in 0.200469 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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