Parikon

Użytkownik forum
  • Postów

    355
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    19

Odpowiedzi opublikowane przez Parikon

  1. Witam. Mam takie pytanie. 

    Potrzebuje rozwiązania jak usprawnić taki kod.

    private void button_Button_Click(object sender, RoutedEventArgs e)
            {            
                zza.Document rys = zza.Application.DocumentManager.MdiActiveDocument;
                try
                    {
                        rys.SendStringToExecute("WG_Button\n", true, false, false);
                    }
                    catch (System.Exception ex)
                    {
                        zza.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.ToString());
                    }
            }

    Naciśniecie przycisku wywołuje komendę. Chciałbym aby przed wywołaniem komendy następowało sprawdzenie, czy inna komenda jest aktualnie  w użyciu i jeśli tak to ją przerywało. 

  2. Zainstalowałem na laptopie z windows 10 zwcad 2021PL i zwcad 2024PL. W tym drugim wszystko jest w porządku, natomiast  w zwcad 2021 nie działają skróty wielu poleceń, gdyż ich nazwy są niepoprawnie wyświetlane ( chodzi o polskie znaki w polskich komendach). Wybierając skrót komendy, która nie jest poprawnie wyświetlana program odpowiada, ze nie zna takiej komendy.

    image.png.56418c98e6e19d045dbe4de04f8e38b0.png

  3. 14 godzin temu, dmatusz3 napisał:

    Ładnie.  Czy użył Pan polecenia spirala?

    Polecenie w ZwCAD 2021 PL to helisa. Polecenie spirala nie istnieje. Narysowanie czegoś podobnego - to stworzenie ścieżki gwintu za pomocą polecenia helisa i przeciągnięcie po niej za pomocą polecenia przeciągnij (_sweep) określonego kształtu. Brak potrzeby pisania programu ;)

  4. Wyłapałem 2 irytujące błędy w  wersji 2021.

    Pierwszy to powiększanie i pomniejszanie scrollem myszy. W 2021 po prostu się zatrzymuje  powiększanie. Być może jakąś zmienną trzeba ustawić.
    Drugi. Nie odświeża bloku po jego edycji. Blok tworzony w 2020. Po edycji odświeża go dopiero po zamknięciu i otwarciu na nowo rysunku.

  5. Jeżeli chcesz "oskryptować" ZwCad-a proponuje abyś wybrał język C#. W zasadzie będziesz mógł tworzyć rozwinięte programy. A narzędzia do tego są ogólnodostępne. Co prawda zamknięte, ale ZwCad-a też mogą "zwinąć" w pewnym momencie.

    Jeśli przerobiłeś projekt_forum.dll to wiesz jak utworzyć okno. Chociaż to co pokazałem może być nieprofesjonalne, ale ja też za programistę się nie uważam. 😉 

    Ja w zasadzie do rysowania wykorzystuję przestrzeń udostępnianą przez ZwCad. Ale możesz szkicować w oknie  wykorzystując System.Windows,Shape.

    // Add the Polyline Element
    myPolyline = new Polyline();
    myPolyline.Stroke = System.Windows.Media.Brushes.SlateGray;
    myPolyline.StrokeThickness = 2;
    myPolyline.FillRule = FillRule.EvenOdd;
    System.Windows.Point Point4 = new System.Windows.Point(1, 50);
    System.Windows.Point Point5 = new System.Windows.Point(10, 80);
    System.Windows.Point Point6 = new System.Windows.Point(20, 40);
    PointCollection myPointCollection2 = new PointCollection();
    myPointCollection2.Add(Point4);
    myPointCollection2.Add(Point5);
    myPointCollection2.Add(Point6);
    myPolyline.Points = myPointCollection2;
    myGrid.Children.Add(myPolyline);

    https://docs.microsoft.com/en-us/dotnet/api/system.windows.shapes?view=netcore-3.1

    Zatem robisz to tak w przykładzie projekt_forum.dll.

    Gdzieś w oknie dodajesz kontrolkę Canvas. W kodzie wpf będzie to np.<Canvas x:Name="Plotno" HorizontalAlignment="Left" Height="60" Margin="18,158,0,0" VerticalAlignment="Top" Width="160"/>

    Nazwałem kontrolkę "Plotno". Teraz w tej kontrolce możesz narysować przykładowo prostokąt. Przy czym jak ten prostokąt ma się pojawić po kliknięciu przycisku do dodaj kod do zdarzenia kliknięcia przycisku. Jak od razu przy uruchomieniu programu, to dodaj do zdarzenia uruchomienia programu:

     // Add a Rectangle Element
                        System.Windows.Shapes.Rectangle myRect = new System.Windows.Shapes.Rectangle();
                        myRect.Stroke = System.Windows.Media.Brushes.Black;
                        myRect.Fill = System.Windows.Media.Brushes.SkyBlue;
                        myRect.HorizontalAlignment = HorizontalAlignment.Left;
                        myRect.VerticalAlignment = VerticalAlignment.Center;
                        myRect.Height = 50;
                        myRect.Width = 50;
                        Plotno.Children.Add(myRect);

    Oczywiście można to oprogramować dalej i prostokąt będzie przyjmował kształty wybranych z bazy danych prostokątów.

    Pojawi się taki kwadracik jak poniżej. Przy czym nie przybiera on kształtu odpowiedniego do długości B i L, gdyż jeszcze tego nie oprogramowałem. Sorry, że piszę tak jak do kogoś całkiem nie obytego z programowaniem, ale jak już piszę, to i komuś takiemu może się przyda.

    image.png.693b502e2c921933302a34f0dc2b2063.png

  6. Zrobiłem prostą tabelę. Napisałem prostą formułę  =sqrt(A2). Program podaje wynik  z 6 cyframi po kropce. Przycisk format danych jest nieaktywny. Czy formatowanie jest jeszcze niedostępne, czy ja coś muszę zrobić, aby  uaktywnił się ten przycisk? 

     

  7. using zza = ZwSoft.ZwCAD.ApplicationServices;
    
    namespace startowa
    {
        public class Start : zzr.IExtensionApplication
        {  
    
            public void Initialize()
            {      
    
                AddDocEvent();
              	WywolajPrzyStarcie();
    		}
    
    		public void Terminate()
            {
                // zdarzenia zamknięcia ZwCAD
            }  
            private void AddDocEvent()
            {
                zza.Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated;            
            }
    
            private void DocumentManager_DocumentCreated(object sender, zza.DocumentCollectionEventArgs e)
            {
                WywolajPrzyStarcie();
            }  
    		private void WywolajPrzyStarcie()
    
    		{
    			//tutaj ustawiamy zmienne systemowe dla documentu po otwarciu
    		}
          }
    }

    Czy taki kod zda egzamin? Czy coś trzeba by dodać? Jak myślicie?

    Zamiast zmiennych systemowych chciałbym wstawiać własne linie, warstwy wcześniej zdefiniowane w bazie danych do nowych- pustych rysunków jak i otwieranych rysunków z zawartością.

  8. 16 godzin temu, perlon napisał:

    Miałem nadzieję, że da się ustawić wartość startową przy tworzeniu nowego rysunku. Przy tworzeniu nowego dwg bez templata zwcad musi przecież podjąć decyzję jaką wartość zmiennej ustawić. Drugi przypadek użycia to po eksporcie w bocadzie bmf->dwg mam  WIPEOUTFRAME=1 a chciałbym mieć 0 lub chociaż 2. 😞 A to już sprawka samego bocada. Czyżby ta wartość był immanentną cechą standardu dwg? Będę zmuszony wykorzystać lispa startowego i będę musiał każdy rysunek przed wydanie otworzyć, żeby ustawić to WIPEOUTFRAME. Coś mi się zdaje, że pójdzie w ruch jakiś skrypt *.scr do przetwarzania masowego.

    using zza = ZwSoft.ZwCAD.ApplicationServices;
    
    
    public void AddDocEvent()
            {
                // Get the current document
                zza.Document acDoc = zza.Application.DocumentManager.MdiActiveDocument;           
    
                acDoc.BeginDocumentClose += new zza.DocumentBeginCloseEventHandler(docBeginDocClose);
                zza.Application.DocumentManager.DocumentToBeDeactivated += DocumentManager_DocumentToBeDeactivated;
            }
    
     private void docBeginDocClose(object sender, zza.DocumentBeginCloseEventArgs e)
            {
                zza.DocumentCollection docs = zza.Application.DocumentManager;
                if (docs.Count == 1)
                {
                    
                }
            }
    
            private void DocumentManager_DocumentToBeDeactivated(object sender, zza.DocumentCollectionEventArgs e)
            {
                
            }

    Być może można dodać przy uruchamianiu ZwCAD event otwierania dokumentu. I po jego zaistnieniu wywoływać zmianę zmiennej? Sprawdź, być może taki event jest możliwy do wywołania.

    http://docs.autodesk.com/ACD/2010/ENU/AutoCAD .NET Developer's Guide/index.html

    The following events are available for DocumentCollection objects:

    DocumentActivated

    Triggered when a document window is activated.

  9. Dnia 6.12.2019 o 15:36, pawmal napisał:

    Witam,
    Pracujemy nad tym i w przyszłym tygodniu postaramy się udzielić odpowiedzi. Trzeba jednak pamiętać, że na uzyskanie miarodajnych wartości ma wpływ bardzo wiele czynników.
    Pozdrawiam

     

    Wpisując 51,99 program nie widzi problemu, więc zapewne szerokość i długość geograficzną trzeba podawać po przecinku  z przelicznikiem.

  10. Najpierw na podstawie danych @JasW stworzyłem podłoże. Granica między bryłami, których rzut to kwadrat wyznacza kierunek północ- południe. Małe koło w środku wyznacza zasięg cienia 10 metrowego obiektu jaki wychodzi z podanego kąta padania promieni słonecznych. Duże koło, podzielone dwoma kolorami wyznacza podany azymut. W centrum ustawiłem dziesięciometrowy stożek o średnicy podstawy 1 metr. A oto wynik renderingu.

    large_SUN.jpg.546e3b4d31abc17c4675c898d9258949.jpg

    Wniosek. Jest OK! Dane punktu na ziemi wpisałem bez przeliczania minut na dziesiętne po przecinku, czyli zapewne w zaokrągleniu.

    A tu widok z góry. 10 metrowy walec o średnicy metra zamiast stożka.

    large_SUN2..jpg.14f64f804d5b0c3910e4b176da4dda2e.jpg