kojacek

Użytkownik forum
  • Postów

    268
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    43

Treść opublikowana przez kojacek

  1. Zawsze można użyć LISP-a: Poniższy kod pozwoli zmierzyć długość elementu dowolnej krzywej pomiędzy dwoma punktami na niej wskazanymi: ;;; (vl-load-com) ;;; (defun C:CDIST (/ sa sb vo) (if (setq sa (nentselp "\nWskaz pierwszy punkt na krzywej: ")) (if (setq sb (nentselp "\nWskaz drugi punkt na krzywej: ")) (if (and (eq (car sa)(car sb))) (progn (setq vo (vlax-ename->vla-object (car sa))) (abs (- (vlax-curve-getDistAtPoint vo (vlax-curve-getClosestPointTo vo (cadr sa) t) ) (vlax-curve-getDistAtPoint vo (vlax-curve-getClosestPointTo vo (cadr sb) t) ) ) ) ) (princ "\nWskazano rózne obiekty. ") ) (princ "\nNic nie wskazano. ") ) (princ "\nNic nie wskazano. ") ) (princ) ) .
  2. Bezpośrednio nie ma. Choć można wysmażyć krótkiego lisp-a. Inna sprawa - w węzłach polilini nie będzie raczej "prostopadłych".
  3. Nie tam żebym upierał się aby odwodzić was od komplikowania sobie pracy, ale... może warto wykorzystać opcję _block do podziału?
  4. Swego czasu (miljon lat temu...) w AutoCAD-zie, robiłem coś takiego: http://kojacek.republika.pl/bkg.html
  5. To jeszcze prostsze ;) Język ów nazywa się: AutoLISP
  6. To proste, z wymienionej wyżej linii usuń sekwencję znaków "_x" Wtedy wywołanie: (if (setq % (ssget '((0 . "LINE")(62 . 5)(410 . "Model"))))(sslength %) 0) poprosi Cię o wskazanie obiektów
  7. Nie tam żebym się wtrącał czy coś,... ale wystarczy w linii poleceń wpisać: (if (setq % (ssget "_x" '((0 . "LINE")(62 . 5)(410 . "Model"))))(sslength %) 0) i zaakceptować enterem... Takie proste (bezbajtowe wręcz) wklepanie z klawiaturki, ma tę przewagę nad skompilowanymi plikami *.zel (nic im nie ujmując), że można zawsze zmienić dowolnie albo rodzaj obiektu czy kolor, bez tworzenia nowego pliku, definicji polecenia i podpinania ikonek. Może to i mniej spektakularne rozwiązanie, ale w mojej opinii bardziej elastyczne... Jutro kolega będzie chciał wybrać czerwone łuki... i co będzie?
  8. kojacek

    Rebus piątkowy

    Kombinator. Z tej samej bajki co kombinerki i kombinezon... :)
  9. kojacek

    Rebus piątkowy

    Dziś dziecinnie prosty... :)
  10. kojacek

    Rebus piątkowy

    Aparat do robienia chmury punktów. Bezsprężynowy... ;)
  11. kojacek

    Rebus piątkowy

    Dobre! Gratulacje! Też coś kombinowałem na początku z tym T, ale coś takie mało teowate mi się zdałowało, więc zarzuciłem... :)
  12. kojacek

    Rebus piątkowy

    Dzięki :) To samo, nieco inaczej:
  13. kojacek

    Rebus piątkowy

    Piernik?
  14. Służyło się... w lotnictwie... ;) to się wie... :)
  15. ORP Władysławowo w Kołobrzegu?
  16. Jedynym problemem jaki widzę, to prawidłowy wybór obiektów. Myślę jednak że 8-10 linijek rozlazłego kodu LISP-owego, załatwiło by sprawę.
  17. To jest dokładnie taka sama zabawa jak już wcześniej wspominane nieszczęsne zestawienie stolarki (atrybutyzacja vs. xrecordowanie). Właściwie nie ma różnicy czy obiekt jest dwu czy trójwymiarowy. Problemy z zarządzaniem tymi danymi będą podobne. W mojej opinii, najbardziej optymalnym rozwiązaniem jest przypisywanie do obiektu tylko tych danych które są dla niego unikalne (idntyfikatory), lub są konieczne (vide: wymiary stolarki w szpilce). Wszelkie inne, powinny być przechowywane, albo na zewnątrz (w osobnych plikach (tekstowych xls-ach, db-ach, mbd-ach itp.)), albo jako dane niegraficzne czyli słowniki + xrecordy + itp. w rysunku. Oczywiście - w zależności od potrzeb - możliwe rozwiązania mogą być również mieszane.
  18. Nie, nie ma za co przepraszać, po prostu zabrzmiało to mocno konkretnie, zatem zapytałem :) Na marginesie moją wiedzę "programistyczną" trzeba traktować raczej amatorsko i hobby-stycznie. Wynika ona jedynie z długowiecznego obcowania ( ;) ) z CAD-em...
  19. Nie rozumiem formy "stosujecie" - bowiem sugeruje ona jakieś konkretne rozwiązania. Funkcjonalność o której mowa, może być realizowana na co najmniej kilka różnych sposobów. Identyfikacja obiektu - tak samo, może polegać na typowych identyfikatorach rysunkowych, jak też własnych (np. przez dowiązanie XDATA czy ExtensionDictionary). To też może determinować sposób przechowywania innych danych, np. w samym obiekcie, lub w osobnym słowniku (-ach), a jedynie "adresowanie" do niego identyfikatora obiektu. Możliwych rozwiązań jest naprawdę wiele.
  20. Zwyczajnym LISP-em: (vl-load-com) ; ------------ (defun _Get3DSolid (Hand / e) (if (and (setq e (handent Hand)) (= (cdr (assoc 0 (entget e))) "3DSOLID") ) (vla-get-volume (vlax-ename->vla-object e)) ) ) Potem wywołanie: (_Get3DSolid "404f7") i masz.
  21. Jak rozumiem - dość gładko przeszliśmy od danych niegraficznych do brył?
  22. No ale cała ta dyskusja wynika z tego że można coś ułatwić. W mojej opinii (i tu widzę też podobne głosy), całe to zestawienie, opisy stolarki (i co tam tego tyczy dookoła) można zrobić nieco inaczej, ale za to w konsekwencji, w sposób bardziej uporządkowany i logiczny. Przecież nie upieram się żem alfa i omega, niemniej kilka rzeczy można ulepszyć, zdejmując z użytkownika potrzeby weryfikowania, sprawdzania i korygowania błędów, jeśli wystąpią. Przy czym, z mojej strony, nie jest to jakieś wielkie programowanie, jeno hobbystyczne zastosowanie LISP-a.
  23. Ja tam sobie myślę, że nie ma co się unosić - póki gadamy to się dogadujemy :) @perlon - gwoli sprostowania: Nie stosuję tutaj XDATA. XDATA to dane dodatkowe, tutaj mówimy o danych niegraficznych. XDATA rzeczywiście są wykorzystywane, ale w wątku obok (http://forum.cad.info.pl/topic/1114-wymiar-z-dodan%C4%85-sta%C5%82%C4%85-warto%C5%9Bci%C4%85/page-3#entry6547) dotyczącym wymiarów "skażonych". Na marginesie, tutejszy wątek "wyrósł" z tamtego. Ponadto pozwolę sobie zauważyć - dogadywanie się tam laików, zaowocowało całkiem zgrabnym narzędziem, mam nadzieję przydatnym. Kto wie, może tutaj też się coś zrobi?
  24. By gołosłownym nie być, ćwiczenia do treningu działania. Plik STOLARKA2.DWG (w załączeniu) oraz (poniższy) kod lispowy. ; =========================================================================================== ; ; Stolarka.lsp by kojacek ; ver. 17-06-2014 ; Wymaga biblioteki: CADPL-Pack-v1.lsp <http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html> ; =========================================================================================== ; (if (not cd:ACX_ADoc)(load (findfile "CADPL-Pack-v1.lsp"))) ; ------------------------------------------------------------------------------------------- ; (defun C:STOLINFO (/ x r e d a n l i j) (if (setq x (cd:DCT_GetDictList (setq r (cd:DCT_GetDict (namedobjdict) "Arch-Std-Stolarka")) nil) ) (while (and (setq e (car (entsel "\nWybierz opis stolarki: "))) (setq d (entget e)) (= (cdr (assoc 0 d)) "INSERT") (wcmatch (cdr (assoc 2 d)) "e-cad*_1_?") ) (if (and (setq a (cd:BLK_GetAtts e)) (setq n (cdr (assoc "SYMBOL" a))) ) (if (member n x) (progn (setq i (_GetAttValueInsert n) l (cd:DXF_Massoc 1 (cd:DCT_GetXrecord (cdr (assoc n (cd:DCT_GetDictList r T))))) j (if i (itoa (length i)) "0") l (mapcar '(lambda (%)(strcat "\n" %)) l) ) (alert (strcat (cdr (assoc "NAZWA" a)) " [" n "] (sztuk: " j ")\n" (apply 'strcat l) ) ) ) (princ "\nNie znaleziono informacji. ") ) (princ "\nNie znaleziono informacji. ") ) ) (progn "\nW rysunku nie ma danych stolarki. ") ) (princ) ) ; ------------------------------------------------------------------------------------------- ; (defun _GetAttValueInsert (Val) (vl-remove-if '(lambda (%)(/= % Val)) (mapcar '(lambda (%)(cdr (assoc "SYMBOL" %))) (mapcar '(lambda (%)(cd:BLK_GetAtts %)) (cd:SSX_Convert (ssget "x" (list '(0 . "INSERT")'(2 . "e-cad*_1_?"))) 0) ) ) ) ) ; ------------------------------------------------------------------------------------------- ; (princ "\nPolecenie: STOLINFO") (princ) Potrzebna jest bliblioteka CADPL-Pack, którą można pobrać stąd: http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html Powinna ona znajdować się w ścieżce poszukiwań. Kod należy skopiować do pliku (stolarka.lsp) i załadować. Dostępne jest polecenie STOLINFO, po wywołaniu należy klikać w "szpile" okien & drzwi Pokazuje to jedynie w prosty sposób mechanizm działania. Prawdziwe makro mogłoby oprócz przeglądania np. pozwolić edytować dane. Zauważcie że można w łatwy sposób "wyłączyć" jakieś elementy. Wystarczy zmienić w atrybucie SYMBOL szpilki, wartość (np. dodać dowolną literę) i już nie jest ona brana pod uwagę. Potestujcie. Ciekaw jestem waszych uwag. STOLARKA 2.dwg
  25. No i tutaj jest pełna zgodność w całości ogółu. Różnica jedna - ale to w szczególe (choć istotnym) - jest taka że to co zaznaczone na Twoim obrazku na niebiesko trafia do atrybutów, zaś ja uważam (ponadto) że to (co zaznaczyłem na pomarańczowo) powinno (z wielu już wczesniej prezentowanych powodów) lądować w "moim" XRECORD-zie...: