perlon

Użytkownik forum
  • Postów

    425
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    33

Aktywność reputacji

  1. Like
    perlon otrzymał(a) reputację od kruszynski w [VBA] Grupuj   
    Uwaga ogólna:
    Oddzielaj kod obsługi zdarzeń od kodu wykonawczego. Kod wykonawczy dziel na mniejsze funkcje. Spagetti code jest trudny do analizy i testowania. Jeżeli kod wykonawczy tworzy encje to te encje twórz w podfunkcjach które będą je zwracały do kodu wykonawczego. Zgromadzone encje do zgrupowania przekaż do osobnej funkcji jako argument. Funkcja ta powinna zwrócić identyfikator grupy.
    Co do grupowania to może taki krótki przykład pomoże
    Function Rysuj() Dim Points(3) As Double Dim PIERWSZY, DRUGI, TRZECI, CZWARTY As Variant Dim ObjectsToGroup(1) As ZcadEntity Dim Group As ZcadGroup PIERWSZY = ThisDrawing.Utility.GetPoint(, "Podaj punkt P1 (początek pręta):") DRUGI = ThisDrawing.Utility.GetPoint(PIERWSZY, "Podaj punkt P2 (koniec pręta):") Points(0) = PIERWSZY(0) Points(1) = PIERWSZY(1) Points(2) = DRUGI(0) Points(3) = DRUGI(1) Set ObjectsToGroup(0) = ThisDrawing.ModelSpace.AddLightWeightPolyline(Points) PIERWSZY = ThisDrawing.Utility.GetPoint(, "Podaj punkt P1 (początek pręta):") DRUGI = ThisDrawing.Utility.GetPoint(PIERWSZY, "Podaj punkt P2 (koniec pręta):") Points(0) = PIERWSZY(0) Points(1) = PIERWSZY(1) Points(2) = DRUGI(0) Points(3) = DRUGI(1) Set ObjectsToGroup(1) = ThisDrawing.ModelSpace.AddLightWeightPolyline(Points) Set Group = ToGroup(ObjectsToGroup) End Function Function ToGroup(Objects() As ZcadEntity) As ZcadGroup Dim GroupObject As ZcadGroup Set GroupObject = ThisDrawing.Groups.Add("*") GroupObject.AppendItems Objects Set ToGroup = GroupObject End Function  
  2. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w [C#] Komunikacja z aplikacją Zwcad   
    Na podstawie Kean Walmsley blog
    using System; using System.Windows.Forms; using System.Runtime.InteropServices; using ZWCAD; namespace CadExecute { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { const string progID = "ZWCAD.application"; IZcadApplication zcApp = null; try { zcApp = (IZcadApplication)Marshal.GetActiveObject(progID); } catch { try { Type acType = Type.GetTypeFromProgID(progID); zcApp = (IZcadApplication)Activator.CreateInstance(acType, true); } catch { MessageBox.Show("Cannot create object of type \"" + progID + "\""); } } if (zcApp != null) { zcApp.Visible = true; zcApp.ActiveDocument.SendCommand("_CIRCLE 0,0 10 "); } } } } Przestrzeń nazw ZWCAD trzeba dodać przez referencję COM -> OLE Automation i ZWCAD 2020 Type Library

     
  3. Upvote
    perlon otrzymał(a) reputację od kruszynski w [C#] Komunikacja z aplikacją Zwcad   
    Na podstawie Kean Walmsley blog
    using System; using System.Windows.Forms; using System.Runtime.InteropServices; using ZWCAD; namespace CadExecute { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { const string progID = "ZWCAD.application"; IZcadApplication zcApp = null; try { zcApp = (IZcadApplication)Marshal.GetActiveObject(progID); } catch { try { Type acType = Type.GetTypeFromProgID(progID); zcApp = (IZcadApplication)Activator.CreateInstance(acType, true); } catch { MessageBox.Show("Cannot create object of type \"" + progID + "\""); } } if (zcApp != null) { zcApp.Visible = true; zcApp.ActiveDocument.SendCommand("_CIRCLE 0,0 10 "); } } } } Przestrzeń nazw ZWCAD trzeba dodać przez referencję COM -> OLE Automation i ZWCAD 2020 Type Library

     
  4. Upvote
    perlon otrzymał(a) reputację od alf w Docinanie PDF do rozmiaru zadruku   
    Myślę Martin, że tu chodzi o coś innego a mianowicie, żeby drukarka pdf pomimo ustawienia bardzo dużego formatu ostatecznie "wyprodukowała" arkusz dopasowany wymiarami do faktycznie umieszczonych na nim obiektów. Faktycznie plotery mają taką opcję która odcina z rolki arkusz zaraz za ostatnim wydrukowanym elementem nie zważając że format arkusza był ustawiony np na 2,3 czy 10m. Jest to cecha sterownika drukarki. 
  5. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w [C#] Zdarzenie zmiana schematu kolorów interfejsu   
    Znalazłem sposób na monitorowanie zmiany interfejsu więc się dzielę moim rozwiązaniem dla potomności co pozwoli zamknąć ten wątek:
    1. Trzeba zasubskrybować się do handlera ApplicationServices.SystemVariableChangedEventHandler
    2. W obsłudze zdarzenia trzeba sprawdzić, zmiana której zmiennej systemowej wywołała to zdarzenie. Jeżeli zdarzenie wywołała zmienna COLORSCHEME należy odczytać z rejestru systemowego wartość COLORSCHEME klucza Software\ZWSOFT\ZWCAD\2020\en-US\Profiles\Default\Config (dla wersji EN, dla PL trzeba odczytać z gałęzi pl-PL) Dzięki Adam Klaczek. Twoja podpowiedź była bardzo pomocna.
    podpięcie do handlera i metoda podpinana do handlera
    Application.SystemVariableChanged += OnSystemVariableChanged private void OnSystemVariableChanged(object _sender, SystemVariableChangedEventArgs _arg) { if (_arg.Name == "COLORSCHEME") { // tu pobieram z kontenera dependece injection instancję serwisu obsługującego schemat kolorów interfejsu ZwCAD'a // i odpalam własne zdarzenie rozgłaszające, że została dokonana zmiana kolorów using(var scope = DI.Container.BeginLifetimeScope()) { var service = DI.Container.Resolve<IInterfaceSchemeService>(); ChangeInterfaceScheme?.Invoke(_sender, new ChangeInterfaceSchemeEventArgs(service)); } } } w której odpalam już własne zdarzenie ChangeInterfaceScheme (skoro nie dokopałem się do takiego zdarzenia dostarczanego przez ZwSOFT to sobie zrobiłem własne 😁 )
    public event EventHandler<ChangeInterfaceSchemeEventArgs> ChangeInterfaceScheme; public class ChangeInterfaceSchemeEventArgs : EventArgs { public IInterfaceSchemeService Service { private set; get; } public ChangeInterfaceSchemeEventArgs(IInterfaceSchemeService _service) { Service = _service; } } W mojej konkretnej implementacji do zdarzenia mogą być podpinane metody przyjmujące w argumencie serwis IInterfaceSchemeService który zajmuje się dostarczaniem kolorów do kontrolek interfejsu użytkownika. Jest to instancja mojej własnej klasy którą pozyskuję z kontenera zależności Autofac. Handler ChangeInterfaceScheme jest właściwością mojej klasy statycznej AppSettings która jest dostępna w całej aplikacji i trzyma róże globalne ustawienia. Klasyczny singleton. Dlatego do tego handlera mogę podpiąć w dowolnym miejscu aplikacji dowolną obsługę zdarzenia zmiany interfejsu uzyskując dostęp do serwisu podającego na tacy jakie kolory mają mieć aktualnie kontrolki. Wystarczy zmienić właściwości kontrolek WindowsForms, HTML, WPF czy czego tam się nie używa. Jeszcze tylko specyfikacja IInterfaceSchemeService
    public interface IInterfaceSchemeService { InterfaceScheme GetScheme(); Color GetBackColor(); Color GetForeColor(); } Na koniec należy dodać, że mój serwis InterfaceSchemeService posiada statyczną właściwość ColorScheme którą mogę odczytać w dowolnym miejscu aplikacji w szczególności przy starcie aplikacji i dzięki temu moja nakładka od razu może startować ze zgodnymi kolorami. 
    Pełna implementacja z zastosowaniem jest dostępna w moim szarpowaniu opisanym w tym wątku gdzie znajduje się link do GITHub'a z kompletnymi źródłami.
  6. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w [C#] Niezgodność wersji PL i EN   
    Jeszcze uwaga dotycząca procesu kompilacji. Ponieważ projekt CADKit jest niezależny od CADKitBasic i CADKitElevationMarks choć jest główną biblioteką która ma wczytywać pozostałe nie może być projektem głównym. Tzn może być ale jego kompilacja nie spowoduje kompilacji dwóch pozostały bibliotek. Więc ich nie będzie i przy starcie nie zostaną załadowane. Żeby to obejść dopisałem w post-buildzie pozostałych projektów : copy $(TargetPath) $(SolutionDir)\CADKit\bin\$(ConfigurationName) co każdorazowo po kompilacji projektu skopiuje dll'kę do katalogu CADKit/bin/$(ConfigurationName). No ale F5 wywołuje kompilację głównego projektu i tylko jego zależności. Tak więc wymagany jest F6 (Build solution) a potem F5 (Start debugging). Obejściem problemu może być uczynienie głównym projektem testów jednostkowych. Jest to projekt do którego są podpięte jako zależności wszystkie pozostałe projekty i jego kompilacja wywoła kompilację wszystkich pozostałych a więc skopiowanie gotowych dll do katalogu CADKit/bin/$(ConfigurationName). Pozostaje tylko odpalić F5 ustawić Start external program. (Chyba to powinienem opisać w Readme na GITHubie ). Tak na marginesie testy jednostkowe też leżą i kwiczą.
    Jak widać projekt ma jeszcze mnóstwo mankamentów, niedoróbek i wymaga licznych refaktoryzacji. Jeżeli dojrzeje być może znajdzie swoje miejsce w dziale" Nakładki na ZWCAD i ZWCAD+". Dlatego wszelka pomoc jest bardzo mile widziana z zastrzeżeniem że zawsze to będzie Open Source.
  7. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w ZWCAD2020 SP2   
    Eksport layout jest fajny. Docina polilinie na krawędzi rzutni, koło zamienia na łuk itp ale ma również drobne mankamenty np.nie docina hatchy, text multiline jest w nowym rysunku w całości a nie tylko  w widocznej części, podobnie teksty jednowierszowe. Mam świadomość, że z tekstami to może być decyzja strategiczna ale hatche powinien docinać. Generalnie dobra robota i nie trzeba korzystać z zewnętrznych narzędzi.
    Co do eksportu do dgn to wydaje się, zamiast osobnego polecenia exptort coś tam powinien format zapisu rysunku być dostępny bezpośrednio w oknie SaveAs i Open. Nie widzę powodu dla którego mnoży się komendy zamiast zaszyć to w listę dostępnych formatów. Podobnie STL nie można by zrobić typu w oknie SaveAs zamiast komendy STLOUT?
     
  8. Upvote
    perlon otrzymał(a) reputację od alf w ZWCAD2020 SP2   
    Eksport layout jest fajny. Docina polilinie na krawędzi rzutni, koło zamienia na łuk itp ale ma również drobne mankamenty np.nie docina hatchy, text multiline jest w nowym rysunku w całości a nie tylko  w widocznej części, podobnie teksty jednowierszowe. Mam świadomość, że z tekstami to może być decyzja strategiczna ale hatche powinien docinać. Generalnie dobra robota i nie trzeba korzystać z zewnętrznych narzędzi.
    Co do eksportu do dgn to wydaje się, zamiast osobnego polecenia exptort coś tam powinien format zapisu rysunku być dostępny bezpośrednio w oknie SaveAs i Open. Nie widzę powodu dla którego mnoży się komendy zamiast zaszyć to w listę dostępnych formatów. Podobnie STL nie można by zrobić typu w oknie SaveAs zamiast komendy STLOUT?
     
  9. Like
    perlon przyznał(a) reputację dla Adam Klaczek w [C#] Zdarzenie zmiana schematu kolorów interfejsu   
    Nie wiem, czy to pomoże - ale w rejestrze trzymane to jest tutaj:
     

  10. Like
    perlon otrzymał(a) reputację od vonski w [ZWCad 2019] Zamrożenie wszystkich warstw oprócz aktywnej   
    Jeżeli używasz polskiej wersji to potrzebujesz jeszcze podkreślenia przed -layer
    U mnie wprawdzie na wersji EN ale zadziałało takie coś:
    (defun c:f() (command "_-layer" "f" "*" ""))  
  11. Like
    perlon otrzymał(a) reputację od alf w Wymiar z podziałem na "n" cześci   
    Trzeba jeszcze było uodpornić lispa na DIMRND=0 bo wywalał dzielenie przez 0. I jeszcze zamiana kropki na znak  oddzielenia części dziesiętnej wg stylu wymiarowego. Wersja po poprawkach:
    (vl-load-com) (defun c:dimagregatemod ( / ent) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (pr:multipledimsection (entget ent)) (princ "\nBlad: Wskazany obiekt nie jest wymiarem liniowym") ) (princ) ) (defun c:dimagregate ( / ) (command "_dimlinear" pause pause pause) (pr:multipledimsection (entget (entlast))) (princ) ) (defun pr:multipledimsection ( entlist / n section newtext rnd) (setq n (getint "\nPodaj liczbe odcinkow: ") section (/ (float (cdr (assoc 42 entlist))) (float n)) rnd (getvar "DIMRND") ) (if (not (= rnd 0)) (setq section (* rnd (atoi (rtos (/ section rnd) 2 0)))) ) (setq newtext (strcat "<>\\X(" (itoa n) "x" (vl-string-translate "." (getvar "DIMDSEP") (rtos section 2 (getvar "DIMDEC"))) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) ) (princ)  
  12. Upvote
    perlon otrzymał(a) reputację od alf w Wymiar z podziałem na "n" cześci   
    A co mi tam. Napisałem rybę. Mi się też przyda
    (defun c:ww1 ( / ent) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (multipledimsection (entget ent)) ) ) (defun c:ww2 ( / ) (command "_dimlinear" pause pause pause) (multipledimsection (entget (entlast))) ) (defun multipledimsection ( entlist / n section newtext) (setq n (getint "\nPodaj liczbe odcinkow: ") section (/ (cdr (assoc 42 entlist)) n) newtext (strcat "<>\\X(" (itoa n) "x" (rtos section 2 2) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) (princ) ) (princ)  
  13. Upvote
    perlon otrzymał(a) reputację od Adam Klaczek w Wymiar z podziałem na "n" cześci   
    Trzeba jeszcze było uodpornić lispa na DIMRND=0 bo wywalał dzielenie przez 0. I jeszcze zamiana kropki na znak  oddzielenia części dziesiętnej wg stylu wymiarowego. Wersja po poprawkach:
    (vl-load-com) (defun c:dimagregatemod ( / ent) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (pr:multipledimsection (entget ent)) (princ "\nBlad: Wskazany obiekt nie jest wymiarem liniowym") ) (princ) ) (defun c:dimagregate ( / ) (command "_dimlinear" pause pause pause) (pr:multipledimsection (entget (entlast))) (princ) ) (defun pr:multipledimsection ( entlist / n section newtext rnd) (setq n (getint "\nPodaj liczbe odcinkow: ") section (/ (float (cdr (assoc 42 entlist))) (float n)) rnd (getvar "DIMRND") ) (if (not (= rnd 0)) (setq section (* rnd (atoi (rtos (/ section rnd) 2 0)))) ) (setq newtext (strcat "<>\\X(" (itoa n) "x" (vl-string-translate "." (getvar "DIMDSEP") (rtos section 2 (getvar "DIMDEC"))) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) ) (princ)  
  14. Upvote
    perlon otrzymał(a) reputację od Martin_S w Wymiar z podziałem na "n" cześci   
    Trzeba jeszcze było uodpornić lispa na DIMRND=0 bo wywalał dzielenie przez 0. I jeszcze zamiana kropki na znak  oddzielenia części dziesiętnej wg stylu wymiarowego. Wersja po poprawkach:
    (vl-load-com) (defun c:dimagregatemod ( / ent) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (pr:multipledimsection (entget ent)) (princ "\nBlad: Wskazany obiekt nie jest wymiarem liniowym") ) (princ) ) (defun c:dimagregate ( / ) (command "_dimlinear" pause pause pause) (pr:multipledimsection (entget (entlast))) (princ) ) (defun pr:multipledimsection ( entlist / n section newtext rnd) (setq n (getint "\nPodaj liczbe odcinkow: ") section (/ (float (cdr (assoc 42 entlist))) (float n)) rnd (getvar "DIMRND") ) (if (not (= rnd 0)) (setq section (* rnd (atoi (rtos (/ section rnd) 2 0)))) ) (setq newtext (strcat "<>\\X(" (itoa n) "x" (vl-string-translate "." (getvar "DIMDSEP") (rtos section 2 (getvar "DIMDEC"))) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) ) (princ)  
  15. Upvote
    perlon otrzymał(a) reputację od Martin_S w Wymiar z podziałem na "n" cześci   
    voila
    (defun c:dimagregatemod ( / ent entlist) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (pr:multipledimsection (entget ent)) (princ "\nBlad: Wskazany obiekt nie jest wymiarem liniowym") ) (princ) ) (defun c:dimagregate ( / ) (command "_dimlinear" pause pause pause) (pr:multipledimsection (entget (entlast))) (princ) ) (defun pr:multipledimsection ( entlist / n section newtext) (setq n (getint "\nPodaj liczbe odcinkow: ") section (* (getvar "DIMRND") (atoi (rtos (/ (/ (float (cdr (assoc 42 entlist))) (float n)) (getvar "DIMRND")) 2 0))) newtext (strcat "<>\\X(" (itoa n) "x" (rtos section 2 (getvar "DIMDEC")) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) ) (princ)  
  16. Upvote
    perlon otrzymał(a) reputację od bobik_123 w Wymiar z podziałem na "n" cześci   
    A co mi tam. Napisałem rybę. Mi się też przyda
    (defun c:ww1 ( / ent) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (multipledimsection (entget ent)) ) ) (defun c:ww2 ( / ) (command "_dimlinear" pause pause pause) (multipledimsection (entget (entlast))) ) (defun multipledimsection ( entlist / n section newtext) (setq n (getint "\nPodaj liczbe odcinkow: ") section (/ (cdr (assoc 42 entlist)) n) newtext (strcat "<>\\X(" (itoa n) "x" (rtos section 2 2) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) (princ) ) (princ)  
  17. Upvote
    perlon otrzymał(a) reputację od kruszynski w Wymiar z podziałem na "n" cześci   
    A co mi tam. Napisałem rybę. Mi się też przyda
    (defun c:ww1 ( / ent) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (multipledimsection (entget ent)) ) ) (defun c:ww2 ( / ) (command "_dimlinear" pause pause pause) (multipledimsection (entget (entlast))) ) (defun multipledimsection ( entlist / n section newtext) (setq n (getint "\nPodaj liczbe odcinkow: ") section (/ (cdr (assoc 42 entlist)) n) newtext (strcat "<>\\X(" (itoa n) "x" (rtos section 2 2) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) (princ) ) (princ)  
  18. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Wymiar z podziałem na "n" cześci   
    A co mi tam. Napisałem rybę. Mi się też przyda
    (defun c:ww1 ( / ent) (while (= nil ent) (progn (prompt "\nWskaz wymiar do zmiany: ") (setq ent (car (entsel))) ) ) (if (= (cdr (assoc 0 (entget ent))) "DIMENSION") (multipledimsection (entget ent)) ) ) (defun c:ww2 ( / ) (command "_dimlinear" pause pause pause) (multipledimsection (entget (entlast))) ) (defun multipledimsection ( entlist / n section newtext) (setq n (getint "\nPodaj liczbe odcinkow: ") section (/ (cdr (assoc 42 entlist)) n) newtext (strcat "<>\\X(" (itoa n) "x" (rtos section 2 2) ")") entlist (subst (cons 1 newtext) (assoc 42 entlist) entlist) ) (entmod entlist) (princ) ) (princ)  
  19. Like
    perlon otrzymał(a) reputację od kruszynski w LISP - rysowanie części/kontury.   
    Pisanie lispa bezpośrednio do okna komend to raczej słabe jest. Żadnych szans na poprawki. Zrób kolego tak:
    1. Otwórz jakiś edytor tekstowy (notatnik, notepad++, cokolwiek)
    2, Wpisz coś takiego
    (command "Line" (getpoint) (getpoint) (getpoint) (getpoint) "c") 3. Zapisz jako : d:\moj_lisp.lsp
    d:\   jest przykładową lokalizacją ty wybierz sobie jaką tam chcesz, moj_lisp.lsp jest nazwą pliku LSP który należy wczytać do zwcad'a. Też możesz wybrać cokolwiek byle miało rozszerzenie .LSP
    4. W linii komend w zwcad'zie wpisz 
    (load "d:\moj_lisp.lsp") 5. Wskaż cztery punkty zgodnie z podpowiedzią w linii komend
    6. Masz swój pierwszy program w LISP'ie rysujący czworokąt z obiektów typu linia o wskazanych wierzchołkach 
    7. Wpisz do powyższego pliku taką sekwencję
    (setq p1 (getpoint "Wskaz punkt:")) (setq p2 (polar p1 0 100)) (setq p3 (polar p2 (/ PI 2) 100)) (setq p4 (polar p3 PI 100)) (command "Line" p1 p2 p3 p4 "c") 8. Zapisz i załaduj ponownie do zwcad'a
    Masz lispa który rysuje kwadrat.
    W pliku moj_lisp.lsp możesz dopisywać kolejne komendy, polecenia, funkcje które złożą się na jakąś sekwencję dającą oczekiwany efekt. Możesz na forum wrzucić co masz już napisane, to dasz szansę, żeby ci pomóc.
     
  20. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w C# Hatch   
    Wygląda na to, że hund begraben jest w kodzie DXF 92. Po wstawieniu hatcha  z .NET API  kod wynosi 0. Sprawdziłem że dla kodu 1 jest liczona powierzchnia. Dla innych nie sprawdzałem.
    Wyciąg z dokumentacji kodów DXF
    Boundary Path Data
    The boundary of each hatch object is defined by a path (or loop) that consists
    of one or more segments. Path segment data varies depending on the entity
    type (or types) that make up the path. Each path segment is defined by its
    own set of group codes. For information about abbreviations and formatting
    used in this table, see Formatting Conventions in This Reference on page 2.
    Hatch boundary path data group codes
    Description Group code
    Boundary path type flag (bit coded): 92
    0 = Default; 1 = External; 2 = Polyline
    4 = Derived; 8 = Textbox; 16 = Outermost
    Lekarstwo w lisp'ie.
    (defun c:hatchfix ( / entity dxfdata old-dxf new-dxf dxfdata ) (setq entity (car (entsel)) dxfdata (entget entity) old-dxf (assoc 92 dxfdata) new-dxf '(92 . 1) dxfdata (subst new-dxf old-dxf dxfdata) ) (entmod dxfdata) ) W C# jeszcze nie znalazłem co i jak trzeba zafiksować żeby DXF 92 był 1. 
  21. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Automatyczna numeracja   
    A może to ci się nada
    https://kojacek.wordpress.com/2018/05/17/numerator/
  22. Upvote
    perlon otrzymał(a) reputację od kruszynski w [LISP] Tworzenie własnego menu   
    Należałoby najpierw uściślić czy chodzi ci o wstążkę czyli z angielska ribbon w stylu wstążkowym interfejsu, 

    Czy może jednak menu rozwijanie z interfejsu klasycznego to co pokazałeś na własnym zrzucie ekranu. Kwestia semantyki.
    Jeżeli to pierwsze to trzeba się bawić edytorem plików .cui (Tools->Customize->Customize interface)
    Jeżeli to drugie to poszukaj w googlu hasła autocad custom menu pull-down; i polecenia menuload
    Tutaj masz co nieco o tworzeniu własnego menu.
    https://www.afralisp.net/archive/lispa/menu1.htm
    http://www.thirdistudio.com.au/AutoCADmenu1.html
    no i oficjalna strona autodesku
    https://knowledge.autodesk.com/support/autocad-lt/learn-explore/caas/CloudHelp/cloudhelp/2019/ENU/AutoCAD-LT/files/GUID-90B274D0-C750-4ADA-9D3E-2C07B157F6A3-htm.html
    Większość nakładek ma jakieś swoje menu. Można podejrzeć jak to jest zrobione np. w Profilku naszego kolegi forumowego Gruzin albo w nakładkach e-cad. Każde takie menu siedzi w pliku *.mnu
    Zdaje się, że nowe wersje zwcada nie mają już tego pliku ale w wersji 2015+ taki plik jest w kartotece 
    {user}\AppData\Roaming\ZWSOFT\ZWCAD\2015\en-US\Support
    Można go sobie pooglądać i zrobić coś a'la w podobie.
  23. Like
    perlon otrzymał(a) reputację od kruszynski w C# Hatch   
    Wygląda na to, że hund begraben jest w kodzie DXF 92. Po wstawieniu hatcha  z .NET API  kod wynosi 0. Sprawdziłem że dla kodu 1 jest liczona powierzchnia. Dla innych nie sprawdzałem.
    Wyciąg z dokumentacji kodów DXF
    Boundary Path Data
    The boundary of each hatch object is defined by a path (or loop) that consists
    of one or more segments. Path segment data varies depending on the entity
    type (or types) that make up the path. Each path segment is defined by its
    own set of group codes. For information about abbreviations and formatting
    used in this table, see Formatting Conventions in This Reference on page 2.
    Hatch boundary path data group codes
    Description Group code
    Boundary path type flag (bit coded): 92
    0 = Default; 1 = External; 2 = Polyline
    4 = Derived; 8 = Textbox; 16 = Outermost
    Lekarstwo w lisp'ie.
    (defun c:hatchfix ( / entity dxfdata old-dxf new-dxf dxfdata ) (setq entity (car (entsel)) dxfdata (entget entity) old-dxf (assoc 92 dxfdata) new-dxf '(92 . 1) dxfdata (subst new-dxf old-dxf dxfdata) ) (entmod dxfdata) ) W C# jeszcze nie znalazłem co i jak trzeba zafiksować żeby DXF 92 był 1. 
  24. Upvote
    perlon otrzymał(a) reputację od Parikon w C# Hatch   
    Znalazłem. 
    hatch.AppendLoop(HatchLoopTypes.External, collection); enum HatchLoopTypes można sumować logicznie 
    hatch.AppendLoop(HatchLoopTypes.External | HatchLoopTypes.Outermost, collection);  
  25. Upvote
    perlon przyznał(a) reputację dla kruszynski w [C#] zdarzenie przy komendzie CANNOSCALE   
    Może Eventhandler  SystemVariableChanged ?