zwonko

Użytkownik forum
  • Postów

    59
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    4

Odpowiedzi opublikowane przez zwonko

  1. Być może były w ZWCAD 2023. Może nie wszędzie bo jako tako warstwa była usuwana. Ale obiekty wewnątrz bloku na tej warstwie już nie. MOże samo -LAYDEL które jest chyba poleceniem dodatkowym, było źle napisane. Ewidentnie teraz kod z pierwszego postu wyświetla 06 pomoc 01 (małe litery) i daje informacje ze są obiekty w blokach które usunie. Wcześniej wyświetlał 6 POMOC 01 i brak informacji o obiektach w blokach.

    tak samo jak gdy wywołam ręcznie -LAYDEL i wpisze 6 POMOC 01, to program nie wyświetla komunikatu o blokach i efekt jest ten sam co po pierwszym kodzie bez poprawki. Czyli warstwa ginie ale obiekty z bloku nie.

  2. @RobS faktycznie uproszczony kod działa prawidłowo w 2023.


    Co ciekawe gdy używamy wersji uproszczonej otrzymujemy komunikat:
    _.-laydel
    Selected layer(s): 6 pomoc 01
    ******** WARNING ********
    There are 1 block definition(s) referencing the layer(s) that you are deleting.
    The block(s) will be redefined and the entities that reference the layer(s) will be removed from the block definition(s).
    You are about to permanently delete the following layer(s) from this drawing: 

    gdy używamy pierwszego kodu, który sam szuka warstw otrzymuje kominikat:
    Deleting layer: 6 POMOC 01_.-laydel
    Selected layer(s): 6 POMOC 01
    ******** WARNING ********
    You are about to permanently delete the following layer(s) from this drawing: 
    6 POMOC 01
    Deleting the layer "6 POMOC 01".

    Czyli w wersji uproszocznej dostaje komunikat o blokach. W pierwszym kodzie nie ma tego komunikatu. Nazwa warstwy jest tutaj z dużej litery... moze tu jest problem?

  3. Mam taki kod w języku autolisp:

     

    (defun c:dellayers76_only6 ( / hms:LayerList* cla ech lay* laylst LayList cnt)
    
    
      (defun hms:LayerList* (path / LayName TblName TblNameList)
        (while (setq TblName (tblnext "Layer" (null TblName)))
          (if (wcmatch (setq LayName (strcase (cdr (assoc 2 TblName)))) (strcase path))
            (setq TblNameList (cons LayName TblNameList))
          )
        )
        (acad_strlsort TblNameList)
      );; hmsLayerList*
      
      (if (and (setq lay* "6 *,6_*")
               
              
               (setq LayList (hms:LayerList* lay*)))
        (progn
          ;; Filter LayList, to exclude "7 view" i "7_view"
          (setq LayList (vl-remove-if
                         '(lambda (layer) (member (strcase layer) '("7 VIEW" "7_VIEW")))
                         LayList))
          ;; Add operation on matched layers
       ;   (command "_.-layer" "_U" lay* "_T" lay* "")
          (command "_.-layer" "_U" lay* "")
     
          (setq ech (getvar 'CMDECHO))
          ;(setvar 'CMDECHO 0)
     ;     (command "_.undo" "G")
          (command "_.undo" "M")
    
          (setq cla (strcase (getvar 'CLAYER)))
          (if (member cla LayList)
            (command "_.-layer" "_U" "0" "_T" "0" "_S" "0" "")
          )
    
    
    
          (foreach l LayList
            (command "_.-laydel" "_N" l "" "_Y" "")
          )
    
    
    
    
          (command "_.undo" "E")
          (setvar 'CMDECHO ech)
        )
        (prompt "\n Layer Name not valid, or no matching layers... ")
      )
      (princ)
    )


    kod służy do usuwania warstw pomocniczych (są na niej elementy które niekoniecznie ma dostać końcowy odbiorca pliku). Problem jest taki, że:
    -gdy używam polecenia LAYDEL ręcznie, czyli wpisuje komendę laydel, 6 pomoc 01, wszystko jest okej
    -gdy polecenie jest wywoływane pośrednio przez lisp, elementy które były wewnątrz bloku, na warstwie 6 pomoc 01 nie są usuwane. Załączam przykładowy plik *.dwg. Po użyciu LISP należy użyć polecenia _regen i wtedy w chmurce rewizji pokażą się nieusunięte elementy, które były wewnątrz bloku, i program z jakiegoś powodu przeniósł na warstwę 0.

    dodatkowo nie bardzo mogę znaleźć obejście gdyż w AUTOLISP ZWCADa brakuje funkcji vla-delete. Miałem pomysł żeby dopisać troche kodu, który przeszukuje wszystkie bloki w rysunku pod kątem elementów na danych warstwach i usuwa je za pomocą entdel, ale niestety mi to nie wyszło.

    proszę o pomoc. Proponuje zgłosić do ZWSOFT brak funcji vla-delete w autolisp. 

    W razie czego:
    vernum = "23.20_2023.12.28(#8735-3893c168c16)_x64" (read only)

    drawing_test2.dwg

  4. Chciałem zrobić w wymiarze liniowy - field/pole które bedzie przeliczało ilość rozstawów na zasadzie nxm=L

    Niestety gdy jest to dimension override jest problem że ZWCAD po regeneracji/zaspisie zmienia jest na ####. Po przeklikaniu wyświetla dobra, wyliczoną wartość. problemu nie ma w przypadku obiektów MTEXT - problem jest przy fieldzie w dimension override.
    Przykład pliku w załaczniku.

    Identyczny problem był już przezemnie poruszany w temacie -> 

    Działam na zwcad 2023 pro - VERNUM = "23.20_2023.05.30(#5431-bf7553c10ce)_x64_S"

    Sprawdzione w AutoCAD 2020 nie ma problemu. W bricscad 22 problem wystepuje. W zwcad 2024 problem wystepuje.
     

    dimension field formul.dwg

  5. Obiekty powstały w zwcad. Po prześledzeniu żeby wywołać problem trzeba zrobić tak:

    -tworzymy rzeczywisty dimordinate (nazwijmy to dim1)

    -tworzywy drugi dimordinate/albo jakikolwiek dimension (nazwijmy to dim2)

    -w dim2 w text_override ustawiamy filed z odwołaniem do dim1 (field/object/dim1/measurement)

    -zaznaczamy dim1 i przestawiamy mu punkt bazowy z 0,0 na inny (coś jak zmiana ucs dla tego dim1)

    i wtedy po przeplikaniu dim2 gubi odwołanie.

    Problem troche złożony; fakt nie sprawdzałem w acad, ale w bricscad tak sie nie dzieje.

  6. Przypadkiem znalazłem pewnego chyba BUGa w ZWCAD 2023 professional (vernum = "23.20_2022.12.03(#4996-a5f007e30b8)_x64" (read only)).

    Problem zaznaczyłem mleader’em w załączonym pliku DWG. Sprowadza się on do tego, że w momencie gdy jako text_override w obiekcie jakim jest ordinate_dimennsion użyjemy filed'a, po "przeklikaniu" takiego ordinate_dimension gubi odwołanie do field'u i do tego zmienia wartość. Taki sam oridnate_dimension po skopiowaniu gdzieś na bok, i rozbiciu, czyli zrobieniu mtext, działa prawidłowo (nic nie gubi i nie zmienia po przeklikaniu).

    Czy można to zgłosić do ZWSOFT?

     

    EDIT: problem zauważylem w pliku od kolegi i próbowałem go teraz odtworzyć. Żeby wywołać problem trzeba jeszcze przesunąć punkt bazowy ordinate_dimennsion, którego użylismy jako odwołania. Wtedy ten problem się pojawia.

     

    dim_ordinate_problem.dwg

  7. moze taki lisp 

    (defun c:InsertAll ( / cmd dir extn pt vec )
    
       (setq extn "dwg") ;; Extension of files to Insert e.g "dwg"
    
       (if
           (and
               (setq dir (LM:DirectoryDialog (strcat "Select Directory of " (strcase extn) " Files to Insert") nil 512))
               (setq vec (getpoint "\nPick Spacing Vector: " '(0 0 0)))
           )
           (progn
               (setq cmd (getvar 'CMDECHO))
               (setvar 'CMDECHO 0)
               (setq pt '(0 0 0))
               (foreach file (vl-directory-files dir (strcat "*." extn) 1)
                   (vl-cmdf "_.-insert" (strcat dir "\\" file) "_S" 1.0 "_R" 0.0 "_non" pt)
                   (setq pt (mapcar '+ pt vec))
               )
               (setvar 'CMDECHO cmd)
           )
           (princ "\n*Cancel*")
       )
       (princ)
    )
    
    ;;-------------------=={ Directory Dialog }==-----------------;;
    ;;                                                            ;;
    ;;  Displays a dialog prompting the user to select a folder   ;;
    ;;------------------------------------------------------------;;
    ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
    ;;------------------------------------------------------------;;
    ;;  Arguments:                                                ;;
    ;;  msg  - message to display at top of dialog                ;;
    ;;  dir  - root directory (or nil)                            ;;
    ;;  flag - bit coded flag specifying dialog display settings  ;;
    ;;------------------------------------------------------------;;
    ;;  Returns:  Selected folder filepath, else nil              ;;
    ;;------------------------------------------------------------;;
    
    (defun LM:DirectoryDialog ( msg dir flag / Shell Fold Self Path )
       (vl-catch-all-apply
           (function
               (lambda ( / ac HWND )
                   (if
                       (setq Shell (vla-getInterfaceObject (setq ac (vlax-get-acad-object)) "Shell.Application")
                             HWND  (vl-catch-all-apply 'vla-get-HWND (list ac))
                             Fold  (vlax-invoke-method Shell 'BrowseForFolder (if (vl-catch-all-error-p HWND) 0 HWND) msg flag dir)
                       )
                       (setq Self (vlax-get-property Fold 'Self)
                             Path (vlax-get-property Self 'Path)
                             Path (vl-string-right-trim "\\" (vl-string-translate "/" "\\" Path))
                       )
                   )
               )
           )
       )
       (if Self  (vlax-release-object  Self))
       (if Fold  (vlax-release-object  Fold))
       (if Shell (vlax-release-object Shell))
       Path
    )
    
    (vl-load-com) (princ)

     

  8. W dniu 14.03.2022 o 09:36, kruszynski napisał:

    Czy dobrze rozumiem, że chodzi o to, żeby po otwarciu rysunku, filtr warstw wyświetlał w managerze warstw tylko te, które nie są z XRefa?
    Nie ruszamy tego co ma być wyświetlone w modelu, tylko w oknie managera?

    Tak. W uproszczeniu chodzi żeby rozwijalna lista warstw była krótsza, tj. zgodna z filtrem.

    @kojacek przeglądne dokłądniej w wolnej chwili, ale wychodzi że coś jest niedopracowane w ZWCAD. Same filtry są, ale wychodzi że nie można ich wywołać z poleceń testowych.

     

  9. Czesto pracuje z rysunkami na xrefach i przydaje sie LayerFIlters, predefiniowany FIlter All Non Xref Layers.

    Pytanie czy da się właczyć żeby każdy rysunek otwierał się z tak włączonym filtrem. Szukałem do tego lispa (np. https://www.cadtutor.net/forum/topic/59411-list-layer-filters-autolisp/) ale działają one w oparciu o polecenie "-Layer, Filter" a niestety opcji filter przy komendzie "-Layer" nie ma w ZWCAD 2021.

  10. Znalazłem jeszcze reaktor od LeeMac (http://www.lee-mac.com/layerdirector.html), oczywiście to też nie do końca to o co mi chodzi i nie potrafię, go przerobić. Ale z ciekawych rzeczy ma on coś takiego:

    ;;----------------------------------------------------------------------;;
    ;;  Layer Change on AutoLISP Command Calls  [ t / nil ]                 ;;
    ;;  ==================================================================  ;;
    ;;                                                                      ;;
    ;;  If set to T, a layer change may be triggered by command calls used  ;;
    ;;  in AutoLISP programs. If set to nil, a layer change will only be    ;;
    ;;  triggered by the AutoLISP command itself, and not by commands       ;;
    ;;  invoked during evaluation of the AutoLISP program.                  ;;
    ;;----------------------------------------------------------------------;;
    
    layerdirector:lspcommand nil

    Czyli pozwala na to, że reaktor nie działa wewnątrz lispów. Myślę, że to mogłoby pomóc. Przy czym nie wiem czy w tym wypadku reaktor zadziała, bo jak wykryje zmianę zmiennej "DIMSTYLE", jeśli nastąpi ona w lispie.

     

    Mimo wszystko, jeśli to możliwe, to prosiłbym @kojacek o modyfikację jego reaktora, żeby ze stylu wymiarowania "A" zmieniał na "B", z "C" na D". Chciałbym zobaczyć czy coś z tego wyjdzie...