Rekomendowane odpowiedzi

Opublikowano (edytowane)

Mam taki skrypt do opisu prętów zbrojeniowych.

Wskazuję pręt  a skrypt odczytuję jego długość i nadaje odpowiednią wartość atrybutowi.

Do niedawna wszystko działało ok. Tzn na początku używałem komendy "Lengthen" i odczytywałem "perimeter"

Później zastąpiłem komendą "area",

Teraz jednak przestało mi to działać w odniesieniu do obiektów typu linia. Wcześniej działało do linii i polilinii.

Jaj napisać skrypt, żeby działał dla linii i polilinii?

 

(setq obiekt (ssget ":S"))
;(command "lengthen" obiekt ))
(command "area" "o" obiekt)
(SETQ dlug (GETVAR "perimeter"  ))

 

Dodatkowo przydałoby się jeszcze żeby ze wskazanego obiektu  odczytać kąt i wstawić blok z odpowiednim kątem.

W przypadku polilinii powinien to być kąt wskazanego odcinka.

Nie umiem tego odczytać, A nie mam czasu wgłębiać się w literaturę.

Edytowane przez KBR
Opublikowano (edytowane)

Proszę spróbować w ten sposób:

(command "_lengthen" (car (entsel "\nWskaż obiekt do odczytu długości: ")))
(getvar "perimeter")

lub jeszcze lepiej, pobrać bibliotekę stąd:

http://cad.pl/ftp/Pack/v1/CADPL-Pack-v1.lsp

a następnie użyć polecenia:

(cd:ACX_GetProp (car(entsel "\nWskaż obiekt: ")) '("Length" "Angle"))

Dla LWPOLYLINE, trzeba by określić kąt dla wskazanego segmentu (w przypadku gdy nie jest to łuk).

Ale to dopiero wówczas można zrobić, kiedy faktycznie okaże się konieczne.

 

EDIT:

lub też użyć funkcji Lee-Mac:

(defun c:tlen ( / e i l s )
    (if (setq s
            (ssget
               '(   (0 . "ARC,CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE")
                    (-4 . "<NOT")
                        (-4 . "<AND")
                            (0 . "POLYLINE") (-4 . "&") (70 . 80)
                        (-4 . "AND>")
                    (-4 . "NOT>")
                )
            )
        )
        (progn
            (setq l 0.0)
            (repeat (setq i (sslength s))
                (setq e (ssname s (setq i (1- i)))
                      l (+ l (vlax-curve-getdistatparam e (vlax-curve-getendparam e)))
                )
            )
            (princ "\nTotal Length: ")
            (princ (rtos l))
        )
    )
    (princ)
)

pozdrawiam

Edytowane przez Assgarth
Opublikowano

Dzięki!

mam wersję  "2013.07.09(14388)"

 

Użyłem tego pierwszego rozwiązania, ale nie kończyło mi polecenia  lengthen musiałem zapisać

 

(command "_lengthen" (car (entsel "\n Wskażpręt żebrowazny do opisu")) "" )
(SETQ dlug (GETVAR "perimeter" ))

 

Na rozwiązanie z kontem jednak jestem za słaby:).

Opublikowano (edytowane)

Zależy w jakim banku masz (to konto)... ;)

Jeżeli zaś chodzi o polilinie, jej długości etc. Tutaj jest parę różności: http://forum.cad.pl/wiczenie-lisp-lwpolyline-t74939.html

O kątach segmentów nie ma chyba nic, niemniej uważny czytelnik na podstawie tej lektury powinien sobie z tym dać spokojnie radę. Przy sprawdzaniu kątów swgmentów, dodatkowo (dla tekstów) należy zwrócić uwagę, na ich prwidłową orientację. Przykładowo pionowy odcinek może mieć kąt 90 stopni, jak i 180, zatem powinno się je trakować tożsamo - tekst zaś powinien mieć w obu przypadkach jedną orientację. Zabawy (z obrotem) dowolnego wymiaru liniowego dobrze to ilustrują.

kojacek

Edytowane przez kojacek

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie