gmmdinesh 发表于 2022-7-5 16:59:42

lisp用于自动设置vie

大家好。。我需要一些帮助。
在我的项目中要创建许多布局(超过80个布局)。
调整每个布局需要很多时间。
我希望lisp或cuix文件放置一个带有参考号的矩形块(该块未显示在绘图中)。在模型空间中放置带编号的矩形块时,(块和覆盖区域),该块将自动与各自的布局相匹配(如示例.dwg所示)
如果可能的话,请有人帮帮我。
我附上了样品。此处为dwg文件。
样品图纸
 
提前谢谢。
 
当做
Dinesh P

mostafa badran 发表于 2022-7-5 17:08:08

试试这个。
这是作者链接
(defun c:NV (/ *error* _RestoreView p1 p2 doc ct vs vc tmp mp sc ll sl res vpdoc vpp vp ans)
(defun *error* (Msg)
   (princ "Error: ")
   (princ Msg)
   (if ct (_RestoreView))
   (princ)
)
(defun _RestoreView ()
   (setvar "ctab" ct)
   (vla-ZoomCenter (vlax-Get-Acad-Object) (vlax-3d-Point (trans vc 1 0)) vs)
)
(vl-load-com)
(if (/= (getvar "cvport") 1)
   (if
   (and
       (setq p1 (getpoint "\nSelect first point of view: "))
       (setq p2 (getcorner p1 "\nSelect second point of view: "))
   )
   (progn
       (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
             ct (getvar "ctab")
             vs (getvar "viewsize")
             vc (getvar "viewctr")
             sc (cond
                  ( (getint
                      (strcat
                        "\nWhat is Viewport Scale 1: <"
                        (itoa (setq sc (cond (sc) (50))))
                        ">: "
                      )
                  )
                  )
                  ( sc )
                )
       )
       (setq ll
         (vlax-for % (vla-get-layouts doc)
         (setq res
             (cons
               (list
               (vla-get-name %)
               %
               (vla-get-TabOrder %)
               )
               res
             )
         )
         )
       )
       (setq ll
         (cdr
         (vl-sort ll
            '(lambda (a b)
               (< (last a) (last b))
             )
         )
         )
       )
       (if (setq sl (cd:DCL_StdListDialog (mapcar ' car ll) 0 "NewViewport" "Select layout:" 40 15 2 nil T T))
         (progn
         (setvar "ctab" (car (nth sl ll)))
         (vla-put-MSpace doc :vlax-false)
         (if (setq vpp (getpoint "\nSelect Point for Viewport: "))
             (progn
               (if
               (<
                   (car (trans p2 1 0))
                   (car (trans p1 1 0))
               )
               (setq tmp p1 p1 p2 p2 tmp)
               )
               (setq mp
               (list
                  (/ (+ (car p1) (car p2)) 2)
                  (/ (+ (cadr p1) (cadr p2)) 2)
                  0.0
               )
               )
               (setq vpdoc (vla-get-PaperSpace doc)
                     vp (vla-AddPViewport
                        vpdoc
                        (vlax-3d-point vpp)
                        (/ (- (car p2) (car p1)) sc)
                        (/ (- (cadr p2) (cadr p1)) sc)
                        )
               )
               (vla-display vp :vlax-true)
               (vla-put-MSpace doc :vlax-true)
               (vla-put-ActivePViewport doc vp)
               (vla-ZoomCenter
               (vlax-get-acad-object)
               (vlax-3d-point mp)
               1.0
               )
               (vla-put-CustomScale vp (/ 1. sc))
               (vla-put-MSpace doc :vlax-false)
               (vla-put-DisplayLocked vp :vlax-true)
               (initget "Yes No")
               (setq ans
               (cond
                   ( (getkword "\nBack to model space <No>: ") )
                   ( "No" )
               )
               )
               (if (= ans "Yes") (_RestoreView))
             )
             (progn
               (princ "\n** Invalid Point ** ")
               (if ct (_RestoreView))
             )
         )
         )
         (princ "\n** Layout not selected ** ")
       )
   )
   (princ "\n** Invalid Point ** ")
   )
   (princ "\nStart Program in Model Space ")
)
(princ)
)
; =========================================================================================== ;
; Okno dialogowe z lista (list_box) / Dialog control with list (list_box)                     ;
;Data      
    - lista do wyswietlenia / list to display                              ;
;Pos          - pozycja poczatkowa na liscie / select list position                  ;
;Title    - tytul okna / window title                                          ;
;ListTitle - tytul list_box / list_box title                                    ;
;Width      - szerokosc / width                                                    ;
;Height       - wysokosc / height                                                    ;
;Btns         - przyciski / buttons                            ;
;MSelect      - dopuszczenie multiple_select / allow multiple select               ;
;DPos         - zapamietanie pozycji okna / save window position                     ;
;DblClick   - podwojny klik (wykluczone Cancel) / double click (not for Cancel)    ;
; ------------------------------------------------------------------------------------------- ;
; Zwraca / Return:                                                                            ;
;nil= nic nie wybrano (anulowano) / nothing was selected (canceled)                     ;
;INT= wybrano jedna pozycje / one position selected| MSelect = nil                      ;
;LIST = wybrano kilka pozycji / few positions selected | MSelect = T                        ;
; ------------------------------------------------------------------------------------------- ;
; (cd:DCL_StdListDialog '("A" "B" "C") 0 "Title" "ListTitle:" 40 15 2 nil T nil)            ;
; =========================================================================================== ;
(defun cd:DCL_StdListDialog (Data Pos Title ListTitle Width Height Btns MSelect DPos DblClk
                            / f tmp dc res)
(if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
(cond
   ( (not
       (and
         (setq f
         (open
             (setq tmp (vl-FileName-MkTemp nil nil ".dcl"))
             "w"
         )
         )
         (foreach %
         (list
             "StdListDialog:dialog{"
             (strcat "label=\""
               (if Title (strcat Title "\";") "\"\";")
             )
             ":list_box{key=\"list\";"
             (if ListTitle
               (strcat "label=\"" ListTitle "\";")""
             )
             "fixed_width=true;fixed_height=true;"
             (strcat "20" (itoa Width))";"
             )
             (strcat "20" (itoa Height))";"
             )
             (if (not DblClck)
               (strcat "multiple_select="
               (if MSelect "true;" "false;")
               )
               "multiple_select=false;"
             )
             "}"
             (cond
               ( (zerop Btns) "cancel_button;")
               ( (= 1 Btns) "ok_only;")
               (T "ok_cancel;")
             )
             "}"
         )
         (write-line % f)
         )
         (not (close f))
         (< 0 (setq dc (load_dialog tmp)))
         (new_dialog "StdListDialog" dc ""
         (cond
             ( *cd-TempDlgPosition* )
             ( (quote (-1 -1)) )
         )
         )
       )
   )
   )
   ( T   
   (start_list "list")
   (mapcar (quote add_list) Data)
   (end_list)
   (if (not Pos)
       (setq Pos 0)
       (if (> Pos (length Data)) (setq Pos 0))
   )
   (setq res (set_tile "list" (itoa Pos)))
   (action_tile "list"
       (strcat
         "(setq res $value)(if DblClk (if(or(not MSelect)"
         "(not (zerop Btns)))"
         "(if (= $reason 4)(setq "
         "*cd-TempDlgPosition* (done_dialog 1)))))"
       )
   )
   (action_tile "accept" "(setq *cd-TempDlgPosition* (done_dialog 1))")
   (action_tile "cancel" "(setq res nil) (done_dialog 0)")
   (setq res
       (if (= 1 (start_dialog))
         (read (strcat "(" res ")"))
         nil
       )
   )         
   )
)
(if (< 0 dc) (unload_dialog dc))
(if (setq tmp (findfile tmp)) (vl-File-Delete tmp))
(if (not DPos) (setq *cd-TempDlgPosition* (list -1 -1)))
(if res (if (= 1 (length res)) (car res) res))
)
(princ "\n Type NV to Invoke ")
(princ)

gmmdinesh 发表于 2022-7-5 17:18:44

你好莫斯塔法·巴德兰。。
谢谢你的回复。。
这个Lisp程序很好。。但我没想到。。我只想在模型空间中放置一个矩形,自动为各个编号的块创建布局。(例如-001矩形-->布局1002矩形-->布局2)。
你理解我的期望吗?
 
当做
Dinesh P

maratovich 发表于 2022-7-5 17:20:45

看看本主题的选项,有一个解决方案。
http://forum.dwg.ru/showthread.php?t=104517
 
http://forum.dwg.ru/showthread.php?t=83750

mostafa badran 发表于 2022-7-5 17:30:22

我不这么认为,也许另一个人能找到解决办法。

gmmdinesh 发表于 2022-7-5 17:36:28

大家好。。
有人帮我。。。。。。。。。请

maratovich 发表于 2022-7-5 17:43:36

http://www.cadtutor.net/forum/showthread.php?98800-打印用户图纸尺寸&p=673337&viewfull=1#post673337
 
职位#24
 
见视频结尾

gmmdinesh 发表于 2022-7-5 17:48:57

非常感谢马拉托维奇。。
正如我所想,这个节目很好。
我需要那个节目。。我能拿到吗?

maratovich 发表于 2022-7-5 17:54:59

您可以在该计划的官方网站上下载:
https://www.kdmsoft.net/revers.html
有联系人-写信给开发人员。

gmmdinesh 发表于 2022-7-5 18:03:10

非常感谢马拉托维奇。
页: [1]
查看完整版本: lisp用于自动设置vie