-
Postów
432 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
36
Ostatnia wygrana perlon w dniu 18 Listopada
Użytkownicy przyznają perlon punkty reputacji!
Ostatnie wizyty
Blok z ostatnimi odwiedzającymi dany profil jest wyłączony i nie jest wyświetlany użytkownikom.
Osiągnięcia perlon
Średniozaawansowany (3/6)
68
Reputacja
-
dmatusz3 zareagował(a) na odpowiedź w temacie: Kopiowanie wraz z obracaniem
-
kruszynski zareagował(a) na odpowiedź w temacie: Kopiowanie wraz z obracaniem
-
Kopiowanie wraz z obracaniem
perlon odpowiedział(a) na PiotrI temat w Wsparcie programistyczne LISP i VisualLISP
Komenda MOCORO z dawnego Expressa ale to było w jakimś vlx-ie. Zamiennik znaleziony na autodeskowym forum. Nie wiem czy przejdzie link. Żeby skrócić działanie można to to sobie owrapować commandem jeżeli zależy ci na jakiejś konkretnej kolejności operacji. -
dmatusz3 zareagował(a) na odpowiedź w temacie: Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
-
Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
perlon odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Niestety powyższe nie działa prawidłowo w każdym przypadku orientacji UCS i samego MText. Uzupełniłem kod o odpowiednie translacje żeby rozwiązać, albo raczej ominąć problem. Ponieważ nie mogę już edytować poprzedniego postu załączam kod ponownie. Zmieniłem również definicję dwóch funkcji z TransMatrix.lsp. Dlatego zamieszczam pliki ponownie z prośbą do admina o usunięcie poprzednich wersji. Dorzuciłem również pewien test funkcji acet-geom-mtxtbox oraz plik dwg, który obrazuje problem jej wykorzystania wraz z nagraniem testu. Test rysuje proste linie w przestrzeni żeby uniknąć narzutu polilinii. Czy jest gdzieś dostępna dokumentacja funkcji acet-geom-mtxtbox bo powyższe zrobiło mii nieco zamieszania w głowie. MTextBox.lsp TransMatrix.lsp mtb.dwg -
dmatusz3 zareagował(a) na odpowiedź w temacie: Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
-
Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
perlon odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
acet-geom-mtxtbox zwraca obszar obramowania mtext ale rzutuje go na płaszczyznę X-Y WCS a w przypadku kiedy MTEXT nie jest równoległy do tej płaszczyzny to obramowanie dostaje dziwnej translacji. Dlatego Postanowiłem ominąć ten problem poprzez transformację obiektu jak poniżej : ; ============================================================================================= ; ; c:MTextBox - enclose mtext in a box and place leader for callout ; ; --------------------------------------------------------------------------------------------- ; ; ©2024 by Tomasz Tkaczyk ; ; ============================================================================================= ; (load "CADPL-Pack-v1") (load "TransMatrix") (defun c:MTextBox ( / ent entName origin x-axis y-axis z-axis matrix obj) (if (and (setq entName (car (entsel "Wybierz MTEXT:"))) (= "MTEXT" (cdr (assoc 0 (setq ent (entget entName))))) ) (progn (setq origin (cdr (assoc 10 ent)) x-axis (cdr (assoc 11 ent)) z-axis (cdr (assoc 210 ent)) y-axis (cd:T3D_NormalVector '(0 0 0) z-axis x-axis) matrix (cd:T3D_TransformMatrix x-axis y-axis z-axis origin) obj (vlax-ename->vla-object entname) ) (vla-TransformBy obj (vlax-tmatrix (cd:T3D_InvertMatrix matrix))) (vla-TransformBy (cd:ACX_AddLWPolyline (cd:ACX_ASpace) (acet-geom-mtxtbox (entget entname) 0) T) (vlax-tmatrix matrix) ) (vla-TransformBy obj (vlax-tmatrix matrix)) ) ) ) Powyższe wymaga kilku funkcji do transformacji obiektów w przestrzeni. Zebrałem trochę kodu w krótką biblioteczkę : (princ "\nŁadowanie biblioteki TransMatrix............") ;;; ========================================================================================= ; ;;; TransMatrix.lsp ; ;;; [2024-10-29] ©2024 by Tomasz Tkaczyk ; ;;; ========================================================================================= ; ; [T3D] ===================================================================================== ; ; c:UCSZDIR - Zwraca wektor normalny aktualnego lokalnego układu ; ; współrzędnych ; ; cd:T3D_NormalizeVector - Normalizuje odległość między punktami do wektora jednostkowego; ; cd:T3D_NormalVector - Zwraca wektor normalny do płaszczyzny określonej ; ; trzema punktami ; ; cd:T3D_ASin - Zwraca arcus sinus kąta wyrażonego w radianach ; ; cd:T3D_ACos - Zwraca arcus cosinus kąta wyrażonego w radianach ; ; cd:T3D_Angle3PtsVC - Zwraca kąt między odciankami p0-p1 p0-p2 (rachunek wektorowy) ; ; cd:T3D_Angle3PtsTC - Zwraca kąt między odciankami p0-p1 p0-p2 (twierdzenie Carnota); ; cd:T3D_Elev - Zwraca elewację punktu nad płaszczyzną p0-p1-p2 ; ; cd:T3D_ProjectPt - Zwraca punkt rzutowany na płaszczyznę p0-p1-p2 ; ; cd:T3D_TransformMatrix - Zwraca macierz transformacji do układu x-y-z-origin ; ; cd:T3D_InvertMatrix - Zwraca macierz odwrotną do macieży transformacji ; ; cd:T3D_CompositionTwoMatrices - Zwraca wynik mnożenia dwóch macierzy transformacji ; ; =========================================================================================== ; ; =========================================================================================== ; ; Zwraca wektor normalny aktualnego lokalnego układu współrzędnych ; ; ------------------------------------------------------------------------------------------- ; ; (c:UCSZDIR) ; ; =========================================================================================== ; (defun c:UCSZDIR () (trans '(0 0 1) 1 0 T) ) ; =========================================================================================== ; ; Zwraca wektor jednostkowy odległości między dwoma punktami punktami ; ; p1 p2 - punkty w przestrzeni 3D ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_UnitVector p0 p1) ; ; =========================================================================================== ; (defun cd:T3D_UnitVector(p0 p1) (if (not (equal p0 p1 1e-009)) (mapcar '(lambda (x) (/ x (distance p0 p1))) (mapcar '- p1 p0) ) ) ) ; =========================================================================================== ; ; Zwraca wektor normalny do płaszczyzny określonej trzema punktami ; ; w przestrzeni zgodnej z reguła prawej dłoni ; ; p0 p1 p2 - punkty w przestrzeni 3D ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_NormalVector p0 p1 p2) ; ; =========================================================================================== ; (defun cd:T3D_NormalVector (p0 p1 p2 / normal) (cond ( (inters p0 p1 p0 p2) (foreach p '(p1 p2) (set p (mapcar '- (eval p) p0))) (setq normal (list (- (* (cadr p1) (caddr p2)) (* (caddr p1) (cadr p2))) (- (* (caddr p1) (car p2)) (* (car p1) (caddr p2))) (- (* (car p1) (cadr p2)) (* (cadr p1) (car p2))) ) normal (mapcar '(lambda (x) (* x (/ 1 (distance '(0 0 0) normal)))) normal) ) ) ) ) ; =========================================================================================== ; ; Zwraca arcus sinus kąta wyrażonego w radianach ; ; ------------------------------------------------------------------------------------------- ; ; (ccd:T3D_ASin ang) ; ; =========================================================================================== ; (defun cd:T3D_ASin (ang) (if (<= -1 ang 1) (atan ang (sqrt (- 1 (expt ang 2)))) ) ) ; =========================================================================================== ; ; Zwraca arcus cosinus kąta wyrażonego w radianach ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_ACos ang) ; ; =========================================================================================== ; (defun cd:T3D_ACos (ang) (if (<= -1 ang 1) (atan (sqrt (- 1 (expt ang 2))) ang) ) ) ; =========================================================================================== ; ; Zwraca kąt między odciankami p0-p1 a p0-p2 (rachunek wektorowy) ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_Angle3PtsVC p0 p1 p2) ; ; =========================================================================================== ; (defun cd:T3D_Angle3PtsVC (p0 p1 p2 / v1 v2) (if (and (setq v1 (cd:T3D_UnitVector p0 p1)) (setq v2 (cd:T3D_UnitVector p0 p2)) ) (cond ((equal v1 v2 1e-009) 0.0) ((equal v1 (mapcar '- v2) 1e-009) pi) (T (* 2 (cd:T3D_ASin (/ (distance v1 v2) 2)))) ) ) ) ; =========================================================================================== ; ; Zwraca kąt między odciankami p0-p1 a p0-p2 (twierdzenie Carnota) ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_Angle3PtsTC p0 p1 p2) ; ; =========================================================================================== ; (defun cd:T3D_Angle3PtsTC (p0 p1 p2 / d1 d2 d3) (setq d1 (distance p0 p1) d2 (distance p0 p2) d3 (distance p1 p2) ) (if (and (not (zerop d1)) (not (zerop d2))) (cd:T3D_ACos (/ (+ (* d1 d1) (* d2 d2) (- (* d3 d3))) (* 2 d1 d2)) ) ) ) ; =========================================================================================== ; ; Zwraca elewację punktu nad płaszczyzną p0-p1-p2 ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_Elev pt p0 p1 p2) ; ; =========================================================================================== ; (defun cd:T3D_Elev (pt p0 p1 p2) (* (cos (cd:T3D_Angle3PtsVC p0 (mapcar '+ p0 (cd:T3D_NormalVector p0 p1 p2)) pt)) (distance p0 pt) ) ) ; =========================================================================================== ; ; Zwraca punkt rzutowany na płaszczyznę p0-p1-p2 ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_ProjectPt pt p0 p1 p2) ; ; =========================================================================================== ; (defun cd:3D_ProjectPt (pt p0 p2 p3) (mapcar '- pt (mapcar '(lambda (x) (* x (cd:T3D_Elev pt p0 p1 p2))) (cd:T3D_NormalVector p0 p1 p2) ) ) ) ; =========================================================================================== ; ; Zwraca macież transformacji do układu x-y-z-origin ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_TransformMatrix x-axis y-axis z-axis origin) ; ; =========================================================================================== ; (defun cd:T3D_TransformMatrix (x-axis y-axis z-axis origin) (list (list (nth 0 x-axis) (nth 0 y-axis) (nth 0 z-axis) (nth 0 origin)) (list (nth 1 x-axis) (nth 1 y-axis) (nth 1 z-axis) (nth 1 origin)) (list (nth 2 x-axis) (nth 2 y-axis) (nth 2 z-axis) (nth 2 origin)) (list 0 0 0 1) ) ) ; =========================================================================================== ; ; Zwraca macież odwrotną do macierzy transformacji ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_InvertMatrix matrix) ; ; =========================================================================================== ; (defun cd:T3D_InvertMatrix( tmatrix / m00 m01 m02 m03 m10 m11 m12 m13 m20 m21 m22 m23 m30 m31 m32 m33 inv00 inv01 inv02 inv10 inv11 inv12 inv20 inv21 inv22) ;; Pobierz elementy macierzy z listy list (setq m00 (nth 0 (nth 0 tmatrix)) m01 (nth 1 (nth 0 tmatrix)) m02 (nth 2 (nth 0 tmatrix)) m03 (nth 3 (nth 0 tmatrix)) m10 (nth 0 (nth 1 tmatrix)) m11 (nth 1 (nth 1 tmatrix)) m12 (nth 2 (nth 1 tmatrix)) m13 (nth 3 (nth 1 tmatrix)) m20 (nth 0 (nth 2 tmatrix)) m21 (nth 1 (nth 2 tmatrix)) m22 (nth 2 (nth 2 tmatrix)) m23 (nth 3 (nth 2 tmatrix)) m30 (nth 0 (nth 3 tmatrix)) m31 (nth 1 (nth 3 tmatrix)) m32 (nth 2 (nth 3 tmatrix)) m33 (nth 3 (nth 3 tmatrix)) ) ;; Oblicz transpozycję macierzy rotacji (górna lewa 3x3) (setq inv00 m00 inv01 m10 inv02 m20 inv10 m01 inv11 m11 inv12 m21 inv20 m02 inv21 m12 inv22 m22 ) ;; Oblicz odwrotny wektor translacji (setq inv03 (- (+ (* inv00 m03) (* inv01 m13) (* inv02 m23))) inv13 (- (+ (* inv10 m03) (* inv11 m13) (* inv12 m23))) inv23 (- (+ (* inv20 m03) (* inv21 m13) (* inv22 m23))) ) ;; Skonstruuj macierz wynikową (list (list inv00 inv01 inv02 inv03) (list inv10 inv11 inv12 inv13) (list inv20 inv21 inv22 inv23) (list 0 0 0 1) ) ) ; =========================================================================================== ; ; Zwraca wynik mnożenia dwóch macierzy transformacji ; ; ------------------------------------------------------------------------------------------- ; ; (cd:T3D_CompositionTwoMatrices matrixA matrixB) ; ; =========================================================================================== ; (defun cd:T3D_CompositionTwoMatrices (A B) (list (list (+ (* (nth 0 (nth 0 A)) (nth 0 (nth 0 B))) (* (nth 1 (nth 0 A)) (nth 0 (nth 1 B))) (* (nth 2 (nth 0 A)) (nth 0 (nth 2 B)))) (+ (* (nth 0 (nth 0 A)) (nth 1 (nth 0 B))) (* (nth 1 (nth 0 A)) (nth 1 (nth 1 B))) (* (nth 2 (nth 0 A)) (nth 1 (nth 2 B)))) (+ (* (nth 0 (nth 0 A)) (nth 2 (nth 0 B))) (* (nth 1 (nth 0 A)) (nth 2 (nth 1 B))) (* (nth 2 (nth 0 A)) (nth 2 (nth 2 B)))) (+ (* (nth 0 (nth 0 A)) (nth 3 (nth 0 B))) (* (nth 1 (nth 0 A)) (nth 3 (nth 1 B))) (* (nth 2 (nth 0 A)) (nth 3 (nth 2 B))) (nth 3 (nth 0 A))) ) (list (+ (* (nth 0 (nth 1 A)) (nth 0 (nth 0 B))) (* (nth 1 (nth 1 A)) (nth 0 (nth 1 B))) (* (nth 2 (nth 1 A)) (nth 0 (nth 2 B)))) (+ (* (nth 0 (nth 1 A)) (nth 1 (nth 0 B))) (* (nth 1 (nth 1 A)) (nth 1 (nth 1 B))) (* (nth 2 (nth 1 A)) (nth 1 (nth 2 B)))) (+ (* (nth 0 (nth 1 A)) (nth 2 (nth 0 B))) (* (nth 1 (nth 1 A)) (nth 2 (nth 1 B))) (* (nth 2 (nth 1 A)) (nth 2 (nth 2 B)))) (+ (* (nth 0 (nth 1 A)) (nth 3 (nth 0 B))) (* (nth 1 (nth 1 A)) (nth 3 (nth 1 B))) (* (nth 2 (nth 1 A)) (nth 3 (nth 2 B))) (nth 3 (nth 1 A))) ) (list (+ (* (nth 0 (nth 2 A)) (nth 0 (nth 0 B))) (* (nth 1 (nth 2 A)) (nth 0 (nth 1 B))) (* (nth 2 (nth 2 A)) (nth 0 (nth 2 B)))) (+ (* (nth 0 (nth 2 A)) (nth 1 (nth 0 B))) (* (nth 1 (nth 2 A)) (nth 1 (nth 1 B))) (* (nth 2 (nth 2 A)) (nth 1 (nth 2 B)))) (+ (* (nth 0 (nth 2 A)) (nth 2 (nth 0 B))) (* (nth 1 (nth 2 A)) (nth 2 (nth 1 B))) (* (nth 2 (nth 2 A)) (nth 2 (nth 2 B)))) (+ (* (nth 0 (nth 2 A)) (nth 3 (nth 0 B))) (* (nth 1 (nth 2 A)) (nth 3 (nth 1 B))) (* (nth 2 (nth 2 A)) (nth 3 (nth 2 B))) (nth 3 (nth 2 A))) ) (list 0 0 0 1) ) ) (princ " Załadowane") (princ "\nTransMatrix v.0.1 ©2024 by Tomasz Tkaczyk") (princ "\nbased from gile on https://www.theswamp.org/index.php?topic=11561.0") (princ) Powyższe otwiera drogę do modyfikacji programu do rysowania obramowania grupy obiektów dowolnie zorientowanych w przestrzeni na płaszczyźnie X-Y aktualnego UCS'a również dowolnie zorientowanego z uwzględnieniem również obiektów typu MTEXT. -
Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
perlon odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Akurat acet-geom-mtxtbox w zwcad działa. Szybsza metoda niż odczytywanie kodów dxf assoc'em. Jedynie co to mnie zastanowiło dlaczego mtext wstawiony w (0,0) daje taki wynik : Command: (acet-geom-mtxtbox (entget (car (entsel))) 1) Select object: ((-2.5 -14.1962 0.0) (21.9509 -14.1962 0.0) (21.9509 2.5 0.0) (-2.5 2.5 0.0)) Jak widać margines jest 2.5. Ten sam obiekt z marginesem 0 daje takie dane : Command: (acet-geom-mtxtbox (entget (car (entsel))) 0) Select object: ((0.0 -11.6962 0.0) (19.4509 -11.6962 0.0) (19.4509 0.0 0.0) (0.0 0.0 0.0)) Jakaś zmienna środowiskowa to determinuje? -
perlon zareagował(a) na odpowiedź w temacie: Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
-
Prostokąt obejmujący MTEXT i transformacje układów współrzędnych
perlon odpowiedział(a) na perlon temat w Wsparcie programistyczne LISP i VisualLISP
Jeżeli chodzi o transformacje to chciałbym obiekt narysowany w globalnym układzie w tzw. "zerze" przetransformować do punktu i płaszczyzny oraz rotacji innego obiektu znajdującego się gdzieś w przestrzeni 3D wskazując ten obiekt. Zadanie to wykonuje się pod spodem komendy "_ucs" "ob" niejako w odwrotnej kolejności tzn. najpierw ustawiam układ współrzędnych na obiekt a potem rysuje drugi obiekt. Chciałbym to jednak zrobić w bardziej elegancki sposób czyli generować od razu obiekty w przestrzeni 3D poprzez transformację węzłów obiektu który chcę wstawić odczytując układ odniesienia obiektu bazowego i do takiego układu transformować inny obiekt. To co do tej pory przeczytałem pokazuje że w AciveX muszę stworzyć macierz transformacji układu obiektu czyli ECS do układu globalnego WCS aby móc wykonać przeniesienie obiektu z płaszczyzny WCS do płaszczyzny ECS lub w czystym lisp'ie pobawić się w podmianę w encji stosownych par kropkowych 10, 50 i 210 być może jeszcze innych. Przy rotacji niestety kod dxf 50 zwraca rotację względem aktualnego UCS więc musiałbym jeszcze uwzględnić transformację tego kąta z ECS do UCS a następnie do WCS. Nie mam tego jeszcze dobrze poukładanego w głowie. Proszę zwrócić uwagę że przywołany w pierwszym poście lisp prostokąt-obejmujacy rysuje ten prostokąt w WCS. Ja chciałbym znaleźć sposób na narysowanie go w jakimś innym układzie nieortogonalnym do WCS. I kolejne spostrzeżenie. vla-GetBoundingBox tak naprawdę podaje maksymalne i minimalne współrzędne ograniczające obiekt w globalnym układzie współrzędnych. Wskazuje box'a opisanego na obiekcie o ściankach zgodnych z WCS niezależnie od aktualnego UCS'a. Żeby narysować prawidłową ramkę obiektu gdzieś w przestrzeni to powinienem go przetransformować do WCS odczytać/narysować tą ramkę i ją przetransformować do ECS'a bo aktualny UCS może być zupełnie inny niż WCS i ECS. Ale się rozpisałem. Mam nadzieję że nie zagmatwałem. -
Witam. W kontekście Prostokąt obejmujący Podjąłem próbę uzupełnienia o obsługę obiektu MTEXT tak aby obrys obejmował tekst rzeczywisty a nie obszar na niego zarezerwowany. Z tego względu funkcja vla-GetBoundingBox się nie sprawdzi. Popełniłem kawałek kodu do rysowania ramki i przy o tej okazji napotkałem szereg problemów związanych z wyznaczaniem obszaru, justowaniem, dopasowaniem do punktu wstawienia etc. Poniższy kod wykorzystuje do tworzenia obiektów w przestrzeni 3D command'y. Działa, ale nie wygląda zbyt dobrze. Pierwsza sprawa jak przerobić to na kod operujący na danych obiektu MTEXT bez korzystania z command czyli wyłuskując dane obiektu i transformując współrzędne. Tu pojawia się problem i moje pytanie. Jak dokonać transformacji układu ECS na WCS i odwrotnie aby po obliczeniach analitycznych wrysować obrys w płaszczyźnie obiektu MTEXT. Przy okazji w kodzie umieściłem próbę wrysowania obrysu za pomocą vla-GetBoundingBox ale obiekt ten dostaje dziwnej elewacji i nie jest umieszczany w płaszczyźnie tekstu ale za to do niego równoległej. Natomiast linia kontrolna (przekątna) nie trzyma się płaszczyzny tekstu. Podobny efekt występuje w funkcji Obrys przywołanego na wstępie kudu, który działa prawidłowo tylko dla WCS'a. Potrzebowałbym pomocy w rozwikłaniu tego problemu. W załączeniu lisp i dwg demo. (vl-load-com) (defun c:MTextBorder ( / ent entName systemEnv IPT APT WDT HGT NV LB RT) ; (defun local:AddPLine ( points / mSpace pointArray pLineObj ) ; (setq ; mSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ; pointArray (vlax-make-safearray vlax-vbDouble '(0 . 2)) ; ) ; (vlax-safearray-fill pointArray points) ; (vla-AddPolyline mSpace pointArray) ; ) ; (defun local:DrawBox (p1 p2 bwl bwr bwb bwt) ; (list ; (list (- (car p1) bwl) (- (cadr p1) bwb) 0) ; (list (- (car p1) bwl) (+ (cadr p2) bwt) 0) ; (list (+ (car p2) bwr) (+ (cadr p2) bwt) 0) ; (list (+ (car p2) bwr) (- (cadr p1) bwb) 0) ; ) ; ) (defun local:XLB (APT WDT) (cond ((= (rem APT 3) 1) 0) ((= (rem APT 3) 2) (* -1 (/ WDT 2))) (T (* -1 WDT)) ) ) (defun local:XRT (APT WDT) (cond ((= (rem APT 3) 1) WDT) ((= (rem APT 3) 2) (/ WDT 2)) (T 0) ) ) (defun local:YLB (APT HGT) (cond ((or (= APT 1) (= APT 2) (= APT 3)) (* -1 HGT)) ((or (= APT 3) (= APT 4) (= APT 5)) (* -1 (/ HGT 2))) (T 0) ) ) (defun local:YRT (APT HGT) (cond ((or (= APT 1) (= APT 2) (= APT 3)) 0) ((or (= APT 3) (= APT 4) (= APT 5)) (/ HGT 2)) (T HGT) ) ) (if (setq ent (entsel)) (progn (setq ; systemEnv (cd:ENV_SaveEnvVariable) entName (entget (car ent)) IPT (cdr (assoc 10 entName)) ; insert point APT (cdr (assoc 71 entName)) ; attachment point WDT (cdr (assoc 42 entName)) ; width HGT (cdr (assoc 43 entName)) ; height ANG (cdr (assoc 50 entName)) ; angle NV (cdr (assoc 210 entName)) ; normal vector LB (list (local:XLB APT WDT) (local:YLB APT HGT) 0) ; left bottom point RT (list (local:XRT APT WDT) (local:YRT APT HGT) 0) ; right top point ) ; save current UCS (setvar "osmode" 0) (setvar "cmdecho" 0) (command "_ucs" "_d" "tmp" "") (command "_ucs" "_s" "tmp") ; use native commands (command "_ucs" "_ob" ent) (command "_ucs" "_o" (trans IPT 0 1)) (command "_rectang" LB RT) ; using ActiveX to determine the coordinates of corners and transform coordinate systems (vla-GetBoundingBox (vlax-ename->vla-object (car ent)) 'LB 'RT) (print (setq LB (vlax-safearray->list LB))) (print (setq RT (vlax-safearray->list RT))) (print (trans LB 0 1)) (print (trans RT 0 1)) (command "_rectang" (trans LB 0 1) (trans RT 0 1)) ; coordinate control (command "_line" (trans LB 0 1) (trans RT 0 1) "") ; restore UCS (command "_ucs" "_r" "tmp") (command "_ucs" "_d" "tmp") ; (cd:ENV_RestEnvVariable systemEnv) ) ) (princ) ) (c:MTextBorder) mtb.lsp mtb.dwg
-
Martin_S zareagował(a) na komentarz do wpisu na blogu: Jak w ZWCAD dodać polecenie do paska narzędzi w interfejsie klasycznym?
-
perlon obserwuje zawartość Jak w ZWCAD dodać polecenie do paska narzędzi w interfejsie klasycznym?
-
Jak w ZWCAD dodać polecenie do paska narzędzi w interfejsie klasycznym?
perlon skomentował(a) pawmal wpis na blogu w pawmal Blog
Znalezione u Lee Mac : (defun LayTog ( layer ) (vl-load-com) (if (not (vl-catch-all-error-p (setq layer (vl-catch-all-apply 'vla-item (list (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)) ) layer ) ) ) ) ) (vlax-put layer 'layeron (~ (vlax-get layer 'layeron))) ) ) i pod odpowiednie przyciski podpiąć odpowiednie wywołania: ^c^c((if (not LayTog) (load "LayTog.lsp")) (LayTog "_PLATEW")) ^c^c((if (not LayTog) (load "LayTog.lsp")) (LayTog "_PODEST")) etc. Oczywiście plik LayTog.lsp musi być na ścieżce wyszukiwania żeby się załadował. Kolejne przyciśniecia przycisku włączają i wyłączają naprzemiennie konkretną warstwę. To tak bardzie na forum by się nadawało, a nie komentarz do blog'a -
perlon zareagował(a) na odpowiedź w temacie: Brakujące SHX, kontynuacja tematu
-
perlon obserwuje zawartość ZWCAD 2023 dimordinate+field , Smath czy inna alternatywa , [VBA]Zwcad2024 - wpływ na ikonki interfejsu i 4 innych
-
dmatusz3 zareagował(a) na odpowiedź w temacie: Pytanie o użytkowanie komercyjne
-
Nie ma co rozwijać. Na stronie producenta w zakładce History. Na forum autor potwierdzał ważność licencji starszych wersji a te były 100% free dla wszystkich. https://smath.com/en-US/view/SMathStudio/history
-
Ostatnia wersja freeware (w tym też bez znaku wodnego na wydruku ) to 0.99.7822 do pobrania ze strony autora.
-
LISP - przesuwający obiekty w osi Z co 1 jednostkę
perlon odpowiedział(a) na toma1982 temat w Wsparcie programistyczne LISP i VisualLISP
Każdą osobną polilinię można procesować wskazując w odpowiedniej kolejności chyba że chcesz zagarnąć wszystkie i dostać wynik. To wtedy trzeba by te polilinie ponumerować (XDATA albo atrybuty jakieś w blokach) -
dmatusz3 zareagował(a) na odpowiedź w temacie: LISP - przesuwający obiekty w osi Z co 1 jednostkę
-
LISP - przesuwający obiekty w osi Z co 1 jednostkę
perlon odpowiedział(a) na toma1982 temat w Wsparcie programistyczne LISP i VisualLISP
Witam A może łatwiej by było zamienić ten zestaw linii i łuków w polilinie właśnie i przeprocesować polilinię która już będzie uporządkowana ze swej natury? Kwestia tylko wskazania który koniec jest początkiem. Innym rozwiązaniem mogło by być dodanie XDATA do obiektów linia/łuk ale trzeba do tego też stworzyć system zarządzania kolejnością. Kolejność na podstawie rzędnej Z jak dla mnie wzbudza pewną kontrowersję -
Witam. Mam do rozwiązania pewien problem matematyczny. Chodzi o znalezienie takiego argumentu funkcji, dla którego funkcja osiąga maximum. Problem mam zdefiniowany następująco: Dla konstruktorów w szczególności jest to fragment obliczeń płyty fundamentowej na przebicie. ObwódKontrolny to macierz poszczególnych przypadków położenia słupa. Ogólnie chodzi o wyznaczenie maksimum funkcji f(a) poprzez rozwiązanie solverem równania f'(a)=0. Dla pierwszego wiersza nawet to działa. Do dalszych obliczeń a1 potrzebuję jako liczbę mianowaną (z jednostką) ale niestety solver zwraca komunikat że brak rozwiązania w zbiorze liczb rzeczywistych., przy wyłączonym ignorowaniu jednostek. Gdy włączę ignorowanie dostaję wynik ale niestety niemianowany ( w tym przypadku wartość wyniku jest prawidłowa w metrach) Jak sprawić żeby obliczona wartość a1 miała jednostkę. Drugie pytanie dotyczy pozostałych dwóch przypadków. Solver wykłada się na funkcji zdefiniowanej jako min z dwóch funkcji. Chodzi o ograniczenie od góry obwodu kontrolnego do takiego jak dla słupa środkowego. Tu bez względu na opcję ignorowania jednostek dostaję komunikat o braku rozwiązania. Proszę o pomoc w rozwiązaniu tych kwestii. W załączeniu również przykład w SMath Test.sm
-
Podpisany cyfrowo podkład PDF
perlon odpowiedział(a) na perlon temat w ZWCAD Standard i Professional
Nie wszystkie drukarki PDF mi chciały wydrukować tą mapę ale się udało. No cóż Taki tip... 😄 -
Podpisany cyfrowo podkład PDF
perlon odpowiedział(a) na perlon temat w ZWCAD Standard i Professional
Też już tak robiłem, licząc, że jeżeli wczytam certyfikat do głównego magazynu to ZwCAD tam zajrzy i zweryfikuje podpis. Niestety chyba ZwCAD tego nie potrafi :(. Kłopot jest taki że pytajnik może wzbudzić kontrowersje w organie w kwestii ważności mapy jako podkładu ponieważ przepis mówi że PZT należy wykonać na aktualniej mapie do celów projektowych. Podpis gwarantuje że mapa nie została w między czasie zmieniona. -
Witam. Co muszę wiedzieć i co zrobić żeby podkładając podpisaną cyfrowo mapę do celów projektowych w PDF uzyskać potwierdzenie weryfikacji sygnatury? Mapa jest podklejana jako Insert->PDF underlay