_

[Lisp] skrót klawiaturowy a rodzaj linii i warstwa

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

[Lisp] skrót klawiaturowy a rodzaj linii i warstwa

Postprzez ConradCad » kwi 26, 2019 18:09

Czy jest taka możliwość, żeby do konkretnego skrótu klawiaturowego przypisać automatyczne dobranie warstwy i rodzaju linii?
W praktyce: Chcę narysować oś budynku. Wpisuje w klawiaturę np "oś" i rysuje mi linię przerywaną i od razu przyporządkowuje ją do warstwy o nazwie np. "osie".
ConradCad
 
Posty: 4
Dołączył(a): kwi 21, 2018 20:11

Re: [Lisp] skrót klawiaturowy a rodzaj linii i warstwa

Postprzez ziele_o2k » kwi 27, 2019 09:08

Jak najbardziej można.
Tutaj masz przykład na podstawie funkcji z mojej biblioteki:
Kod: Zaznacz cały
(defun c:gtos ( / lst lay_name)
    (setq lst '("Nazwa_warstwy" "Opis warstwy" 5 "Continuous" -3 1 nil 0))
    (setq lay_name (gtc:MakeLayer lst))
    (if (tblsearch "layer" lay_name)
        (progn
            (setvar 'clayer lay_name)
            (princ (strcat "\nAktualna warstwa: " lay_name))
        )
        (princ (strcat "\nWarstwy o nazwie " lay_name " nie utworzono. "))
    )
    (princ)
)

;---------------------------------------------------------------------------------------;
; function to make or redefine layer                                                    ;
; basd on LM:layerdirector:createlayer from LayerDirector                               ;
; always return layer name even if layer name                                           ;
; is not a valid symbol table name                                                      ;
; Arguments:                                                                            ;
; @lst [List]  - list of layer properties in following order                            ;
;                lay [STR]     - layer name                                             ;
;                def [STR]     - Layer description                                      ;
;                                use "" for none                                        ;
;                col [INT]     - Layer ACI colour                                       ;
;                                0 < c <256                                             ;
;                ltp [STR]     - Linetype name - if linetype can't be loaded            ;
;                                "Continuous" is set as default                         ;
;                lwt [INT]     - Lineweight                                             ;
;                                -3 = Default                                           ;
;                                0 <= e <= 211                                          ;
;                plt [INT]     - Plotable layer                                         ;
;                                1 = Will Plot                                          ;
;                                0 = Won't Plot                                         ;
;                pst [STR/nil] - Plot style, use nil for CTB                            ;
;                rgb [INT]     - Set color to rgb (truecolor)                           ;
;                                1 = True Color                                         ;
;                                0 = ACI Color                                          ;
;---------------------------------------------------------------------------------------;
; Example                                                                               ;
; (gtc:MakeLayer (list "TestLayer" "Test Layer Description" 60 "Continuous" -3 1 nil 1));
;---------------------------------------------------------------------------------------;

(defun gtc:MakeLayer ( @lst / def )
    (if (and
            (snvalid (car @lst) 0)
            (or
                *gtc:ForceLayProps*
                (not (setq def (tblsearch "layer" (car @lst))))
            )
        )
        (apply
           '(lambda ( lay des col ltp lwt plt pst rgb / dic )
                (   (lambda ( def / ent )
                        (if (setq ent (tblobjname "layer" (car @lst)))
                            (entmod (cons (cons -1 ent) def))
                            (entmake def)
                        )
                    )
                    (vl-list*
                       '(000 . "LAYER")
                       '(100 . "AcDbSymbolTableRecord")
                       '(100 . "AcDbLayerTableRecord")
                       '(070 . 0)
                        (cons 002 lay)
                        (cons 062 (if (< 0 col 256) col 7))
                        (cons 006 (if (gtc:loadlinetype ltp nil) ltp "Continuous"))
                        (cons 370 (if (or (= -3 lwt) (<= 0 lwt 211)) lwt -3))
                        (cons 290 plt)
                        (append
                            (if (= rgb 1)
                                (list(cons 420 (gtc:ACI->True (if (< 0 col 256) col 7))))
                            )
                            (if (and (= 'str (type pst))
                                     (zerop (getvar 'pstylemode))
                                     (setq dic (dictsearch (namedobjdict) "acad_plotstylename"))
                                     (setq dic (dictsearch (cdr (assoc -1 dic)) pst))
                                )
                                (list (cons 390 (cdr (assoc -1 dic))))
                            )
                            (if (and des (/= "" des))
                                (progn (regapp "AcAecLayerStandard")
                                    (list
                                        (list -3
                                            (list
                                                "AcAecLayerStandard"
                                               '(1000 . "")
                                                (cons 1000 des)
                                            )
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
            @lst
        )
    )
    (car @lst)
)
;; Load Linetypes  -  Lee Mac - Chenges by ziele_o2k to fit my needs
;; Attempts to load linetype from any .lin files found in the support path.
;; Excludes known metric & imperial definition files based on the value of MEASUREMENT
;; lts - [str] Name of linetype to load
;; fln - [str/nil] If str, linetypes will be loaded from given file (if found), if nil, program will
;;                 try to load from any known lin file
;; Returns: [bol] T if linetype is loaded successfully, else nil

(defun gtc:loadlinetype ( ltn fln / lst )
    (setq
        lst
        (if fln
            (list fln)
            (vl-remove-if
                '(lambda ( x )
                    (member (strcase x)
                        (if (zerop (getvar 'measurement))
                            (mapcar 'strcase '("gcadiso.lin" "ZWCADiso.lin" "acdbiso.lin" "acadiso.lin" "iso.lin"    )) ;; Known metric   .lin files
                            (mapcar 'strcase '("gcad.lin"    "zwcad.lin"    "acdb.lin"    "acad.lin"    "default.lin")) ;; Known imperial .lin files
                        )
                    )
                )
                (apply 'append
                    (mapcar
                        '(lambda ( dir ) (vl-directory-files dir "*.lin" 1))
                        (cd:STR_Parse (getenv "ACAD") ";" T)
                    )
                )
            )
        )
    )
    (cond
        (   (not (tblsearch "ltype" ltn))
            (vl-some
               '(lambda ( lin )
                    (cd:ACX_LoadLineType ltn lin)
                    (tblsearch "ltype" ltn)
                )
                lst
            )
        )
        (   t   )
    )
)

Jak będziesz mieć pytania to pisz.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 806
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [Lisp] skrót klawiaturowy a rodzaj linii i warstwa

Postprzez ConradCad » kwi 27, 2019 22:10

Dziękuje bardzo. To mój pierwszy kontakt z plikami *.lsp więc pewnie sporo czasu minie zanim przystosuje go pod swoje potrzeby. Informacja, że się da to już dla mnie cenna wskazówka.
ConradCad
 
Posty: 4
Dołączył(a): kwi 21, 2018 20:11


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników