kruszynski

Moderatorzy
  • Postów

    1474
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    93

Treść opublikowana przez kruszynski

  1. Dzień dobry. Dziękuję za zgłoszenie. Postaram się wprowadzić to przy kolejnej aktualizacji
  2. W załączniku takie na szybko uklecone w C#. Wczytać można poleceniem netload Nowe polecenie nazywa się: TableRemoveFormatting TableFormatting.zip
  3. Trudo powidzieć co powoduje problem w starej wersji. Sprawdziłem też na aktualnej 2021 i tutaj działa bez problemu.
  4. Też się z tym kiedyś spotkałem, ale nie umiem wywołać na życzenie. Przypuszczałem że to związane z moimi programistycznymi działaniami. A tu okazuje się że temat jest szerszy. Czy potrafi Pan doprowadzić to takiego zachowania świadomie? Co musiałbym zrobić żeby u mnie też tak się stało?
  5. Jaki vernum? i ile obiektów powinno zaznaczyć tak mniej-więcej?
  6. Chwila bo czegoś nie rozumiem. Może mamy coś inaczej. U mnie okienko właściwości jest otwarte cały czas. Po uruchomieniu takiej funkcji we właściwościach pojawiają mi sie zaznaczone bloki z możliwością zmian.
  7. Wybitnie brzydki i nieintuicyjny fragment kodu. Tak przyjmuję wszelką krytykę z pokorą. Ale zaznacza wszystkie bloki w tym przypadku o nazwie "A-1". Public Sub Test() Dim ssh As ZcadSelectionSet Dim Ftyp(1) As Integer Dim Fdat(1) As Variant Dim BlockName As String BlockName = "A-1" Dim F1, F2 As Variant Ftyp(0) = 0: Fdat(0) = "Insert" Ftyp(1) = 2: Fdat(1) = BlockName Set sstest = ThisDrawing.SelectionSets.Add("sstest") F1 = Ftyp F2 = Fdat sstest.Select zcSelectionSetAll, , , Ftyp, Fdat Dim GroupName As String GroupName = "sstest" Dim group As ZcadGroup Set group = ThisDrawing.Groups.Add(GroupName) For Each Item In sstest group.AppendItems (Item) Next sstest.Delete ThisDrawing.SendCommand ("_SELECT" + vbCr + "G" + vbCr + GroupName + vbCr + vbCr) group.Delete End Sub Pozostaje odfiltrować bloki po atrybucie. Iteracyjnie, w pętli trzeba sprawdzić wartość każdego atrybutu w każdym zaznazconym bloku. Który atrybut jest pierwszy? ten który został wcześniej wstawiony do rysunku? a może ten najwyżej? Raczej posługiwałbym się tu nazwą atrybutu (TagString) niż tym który jest pierwszy. ale... to już temat na inna historię.
  8. Szybkie pytanko szybka odpowiedź: (command "_layer" "_off" "zbrojenie_linie" "")
  9. Jeśli dobrze rozumiem pytanie to będzie to (vlax-dump-object dim t ) gdzie (setq dim (vlax-ename->vla-object (car(entsel "Wybierz "))))
  10. Tą linię (setq dim (vlax-ename->vla-object (car(entsel "Wybierz wymiar")))) Możesz rozbić na (setq selected(entsel "Wybierz wymiar")) (setq dim (vlax-ename->vla-object (car selected ) ) ) I sprawdź co zwraca (setq selected (entsel "Wybierz wymiar"))
  11. W pasku poleceń wklej kolej linie i napisz w której jest problem.
  12. Nie wiem. Nie mam i nie znam Arcadi. Ale tak na czuja to skoro pozwala na wskazanie wymiaru to wygląda na to że LISPy obsługuje. Może nie ma albo nie ładuje z automatu środowiska Visual LISP, spróbuj na początku skryptu dodać linię (vl-load-com) A jak nie łyknie to spróbujemy jeszcze czegoś innego.
  13. Tak na szybko to mogłoby to być takie coś: (setq R (getdist "podaj rozstaw")) (setq dim (vlax-ename->vla-object (car(entsel "Wybierz wymiar")))) (setq A (vlax-get-property dim 'Measurement) ) (setq X (/ A R)) (vlax-put-property dim 'TextOverride (strcat "#8 co " (rtos X) " cm")) Nie ma jeszcze zaokrąglenia. Nie wiem czy zadziała w Arcadi. w ZWCAD działa.
  14. W załączniku aktualizacja pozwalająca wskazywać wiele elementów Szyk.lsp
  15. Taki skrypt mógłby wyglądać np tak: (defun C:SzykManualny ( / element odleglosc bazowy kierunek Koniec licznik kopiuj *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nC:SzykManualny:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq Koniec "" licznik 1 ) (defun kopiuj ( / v1 *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nkopiuj:*error*: " ) (princ msg ) (princ "\n") ) ) ) ( setq v1 ( Vector:Normalize ( Vector: kierunek bazowy ) ) ) ( setq v ( Vector:XScalar v1 (* odleglosc licznik ) ) ) ( setq clone (vlax-invoke-method element 'Copy) ) ( setq px (Vector+ bazowy v )) (vlax-invoke-method clone 'Move (vlax-3d-point bazowy) (vlax-3d-point px) ) (setq licznik (1+ licznik)) ) (setq element (SelSet:Entsel "Wskaż element" nil)) (if (null element) (*error* nil) ) (setq odleglosc (ZWCAD:GetDist "Podaj odległość" poprzedniaOdleglosc)) (if (null odleglosc) (*error* nil) ) (setq bazowy (ZWCAD:Getpoint "Wskaż punkt bazowy" nil nil ) ) (if (null bazowy) (*error* nil) ) (setq kierunek (ZWCAD:Getpoint "Wskaż kierunek" bazowy nil ) ) (if (null kierunek) (*error* nil) ) (while (equal Koniec "") ( kopiuj ) (setq Koniec ( ZWCAD:GetString "Czy wstawić kolejny" "" ) ) ) (setq poprzedniaOdleglosc odleglosc) (princ) ) (defun Vector: ( A B / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector::*error*: " ) (princ msg ) (princ "\n") ) ) ) (list (- (car A) (car B ) ) (- (cadr A) (cadr B ) ) (- (caddr A) (caddr B ) ) ) ) (defun Vector:Length (vec / s *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector:Length:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq s (+ (* (car vec) (car vec) ) (* (cadr vec) (cadr vec) ) (* (caddr vec) (caddr vec) ))) (if (< s 0.0000000000001 ) 0.0 (sqrt s )) ) (defun Vector:Normalize (v / len *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector:Normalize:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq len (Vector:Length v) ) (if (< len 0.00000001) (list 0.0 0.0 0.0 ) (progn (list (/ (car v ) len) (/ (cadr v ) len) (/ (caddr v ) len) ) ) ) ) (defun Vector:XScalar (v s / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nVector:XScalar :*error*: " ) (princ msg ) (princ "\n") ) ) ) (mapcar '(lambda (x) (* x s) ) v ) ) (defun Vector+ (A B / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\n Vector+ : *error*: " ) (princ msg ) (princ "\n") ) ) ) (if (null A) (setq A (list 0.0 0.0 0.0 ) )) (if (null B) (setq B (list 0.0 0.0 0.0 ) )) (list (+ (car A ) (car B) ) (+ (cadr A ) (cadr B) ) (+ (caddr A ) (caddr B ) ) ) ) (defun SelSet:Entsel (tresc filter / OldNoMutt MSel OutVal *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nSelSet:Entsel:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq tresc (strcat "\n" tresc ": ") ) (prompt tresc ) (setq OldNoMutt (getvar 'NOMUTT)) (setvar 'NOMUTT 1) (setq MSel (if (null filter) (vl-catch-all-apply 'ssget (list ":S:E" )) (vl-catch-all-apply 'ssget (list ":S:E" filter )) ) ) (setvar 'NOMUTT OldNoMutt ) (if (vl-catch-all-error-p MSel) (progn (prompt (vl-catch-all-error-message MSel)) ) (progn (if MSel (progn (setq OutVal (vlax-ename->vla-object (ssname MSel 0)) ) )) ) ) OutVal ) (defun ZWCAD:GetDist (tresc domyslny / Wynik trescformat liczba *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nZWCAD:GetDist:*error*: " ) (princ msg ) (princ "\n") ) ) ) (if domyslny (if (numberp domyslny) (setq tresc (strcat tresc "<" (rtos domyslny 2 4) ">") ))) (setq tresc (strcat "\n" tresc ": ")) (setq liczba(vl-catch-all-apply 'getdist (list tresc ))) (if (vl-catch-all-error-p liczba) (progn (prompt (vl-catch-all-error-message liczba)) (setq Wynik nil ) ) (progn (if (null liczba) (setq Wynik domyslny ) (setq Wynik liczba) ) ) ) Wynik ) (defun ZWCAD:Getpoint (tresc P0 domyslny / SelPt Wynik *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nZWCAD:Getpoint:*error*: " ) (princ msg ) (princ "\n") ) ) ) ;(ZWCAD:Getpoint tresc P0 domyslny ) (setq tresc (strcat "\n" tresc ": ")) (if (not(null P0)) (setq SelPt(vl-catch-all-apply 'getpoint (list P0 tresc ))) (setq SelPt(vl-catch-all-apply 'getpoint (list tresc ))) ) (if (vl-catch-all-error-p SelPt) (progn (prompt (vl-catch-all-error-message SelPt)) (setq Wynik nil ) ) (progn (if (null SelPt) (setq Wynik domyslny ) (setq Wynik SelPt) ) ) ) Wynik ) (defun ZWCAD:GetString (tresc domyslny / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nZWCAD:GetString:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq tresc (strcat "\n" tresc ": ")) (String:Get tresc domyslny) ) (defun String:Get (komunikat defVal / Wynik tekst *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nString:Get:*error*: " ) (princ msg ) (princ "\n") ) ) ) ; (setq komunikat "podaj tekst" ) ; (setq defVal "SLU" ) (if defVal (if (not(= defVal "")) (setq komunikat (strcat komunikat "<" defVal ">:" ) )) ) (setq tekst(vl-catch-all-apply 'getstring (list komunikat ))) (if (vl-catch-all-error-p tekst) (progn (prompt (vl-catch-all-error-message tekst)) (setq Wynik nil ) ) (progn (if (null tekst) (setq Wynik defVal ) (if (= tekst "") (setq Wynik defVal ) (if (= tekst ".") (setq Wynik "") (setq Wynik tekst) ) ) ) ) ) Wynik ) Szyk.lsp
  16. Wygląda trochę jak jedna z funkcji naszego ZWGEO: https://youtu.be/E0pC28T7E-M Wiecej tutaj https://www.zwcad.pl/ui-szansa/zwgeo.html
  17. A tak z ciekawości: W jakich sytuacjach taka funkcja może się przydać?
  18. Myślałem że uda mi się znaleźć jakiś problem na poziomie kodu, ale wygląda OK. Mogę to przetestować jedynie na ZWCAD i tutaj działa. Nie wiem dlaczego w innej aplikacji jest problem.
  19. A na drugi, to ten kod z tablicami dla mnie był bardziej czytelny niż z kolekcjami. Refaktoryzacja w celu usunięcia kodu spagetti przez wydzielenie funkcji to dobry plan. Ale zmiana typy danych z tablicy na kolekcję, to po żeby za chwilę zmieniać kolekcję na tablicę to ma skutek dokładnie odwrotny. Myślę, że lepszym planem byłoby oddzielenie operacji typu interakcja z użytkownikiem, przeliczenie punktów rysowanie. np tak Public Function ZapytajOPunkt(komunikat As String) ZapytajOPunkt = ThisDrawing.Utility.GetPoint(, komunikat) End Function Public Function przeliczPunkty(NAROZNIK As Variant) ReDim p(7) As Double p(0) = NAROZNIK(0): p(1) = NAROZNIK(1) p(2) = NAROZNIK(0) + 50: p(3) = NAROZNIK(1) + 30 p(4) = NAROZNIK(0) + 100: p(5) = NAROZNIK(1) + 30 p(6) = NAROZNIK(0) + 100: p(7) = NAROZNIK(1) przeliczPunkty = p End Function Public Function rysuj(p) Dim poly As ZcadLWPolyline Set poly = ThisDrawing.ModelSpace.AddLightWeightPolyline(p) poly.ConstantWidth = 1 End Function Private Sub Test() ' frm_test.Hide Dim NAROZNIK As Variant NAROZNIK = ZapytajOPunkt("Podaj punkt początkowy:") Dim p() As Double p = przeliczPunkty(NAROZNIK) rysuj (p) End Sub Dzięki temu pracujesz szybciej, bo jesteś niezależny od okna możesz w innej funkcji testującej wywołać np tylko rysuj(p) na danych sztucznie spreparowanych dzięki czemu masz pewność że ten obszar DZIAŁA. masz wszystkie operacje związane z reprezentacją grafiki w jednym miejscu. więc jeśli chcesz w innym miejscu aplikacji narysować podobną polilinię, to nie musisz pamiętać że masz jeszcze zmienić jej szerokość. Jeśli chcesz zmienić polilinię, np na szerszą, albo podmienić na inny typ elementu np blok, robisz to tylko w jednym miejscu, w funkcji rysuj, a nie musisz szukać w innych miejscach aplikacji gdzie to jeszcze i po pozmieniać.
  20. tak na pierwszy rzut oka to raczej ZcadLWPolyline a nie ZcadPolyline
  21. Trudno powiedzieć co może być przyczyną problemu. Załączony fragment jest częścią większej całości - korzysta z funkcji które nie są funkcjami z obszaru AutoLISP czy VisualLISP.
  22. Dzień dobry. W jakich sytuacjach to się objawia? Sprawdzałem przed chwilą na najnowszej wersji i na pustym pliku i taki problem się nie powtórzył. Być może coś siedzi w pliku na którym Pani pracuje. Proszę przesłać przykładowy plik na pomoc@zwcad.pl Pozdrawiam
  23. Jasne, mogę pomóc. Jaka pomoc byłaby potrzebna? Sporo przykładów i wyjaśnienie najprostszych pojęć jest tutaj. https://www.zwcad.pl/1-narzedzia-do-lisp.html https://www.zwcad.pl/1-narzedzia-do-lisp/39-kursy/kurs-lisp/przyklady-lisp/111-2-odczyt-pliku-tekstowego.html https://www.zwcad.pl/help/lisp-help.html
  24. Czy to koniecznie musi być w VBA? Wygląda na to, że to nie jest możliwe w VBA. Jedyne co mi przychodzi do głowy to wstawić do UserForm kontrolkę typu Image i wyświetlić Obrazek prostokąta w kontrolce Image, ale to taka dość karkołomna metoda. Może lepiej zrobić to w .Net VB, tam przypuszczam że będzie to łatwiejsze.
  25. Może tak: (defun c:lh (/ p x y ptcoord textloc) (while (setq p (getpoint "\nPick Point: ")) (command "_POINT" p) (setq z (rtos (caddr p))) (setq ptcoord (strcat z)) (setq textloc (getpoint "\nPick Label Location: ")) (command "_TEXT" (list (car textloc) (cadr textloc) (caddr p) ) 0.3 0 ptcoord "" ) ) )