Wyciągnięcie bryły pomiędzy dwoma punktami (po linii prostej).


Rekomendowane odpowiedzi

A propos tych profili. Tak sobie myślę że jeśli jedziemy z bloków, to można się umówić że definicja takiego bloku może składać się zawsze i tylko z jednego obiektu będącym:

1) Zamkniętą LWPOLYLINE (tak jak tutaj jakieś tam IP które testowaliśmy)

2) Obiektu typu REGION - i tutaj możemy sobie pozwolić na bardziej wydumane kształty (np. rura, czy profil z otworami). Warunek - musi to być jeden obiekt

 

I wtedy, można dopracować program tak, aby można było wybrać tylko taki rodzaj bloku (jeden obiekt jak powyżej) - reszta byłaby odrzucana.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli mogę wtrącić 2 słowa...

Typów kształtowników jest sporo. Pewnie każdy ma narysowane swoje najpopularniejsze, niemniej cała baza kształtowników dla ZWCAD dostępna jest za 1zł.

 

Poniżej przykład aplikacji, z której można w ciągu kilku sekund wstawić dany profil.

 

post-1-0-44384600-1445856335_thumb.png

 

A oto przykład takiego kształtownika wybranego z listy.

 

dwuteownik.dwg

 

Może warto byłoby dodać obsługę takich profili, aby nie trzeba było rozbijać bloków z tej aplikacji?

Odnośnik do komentarza
Udostępnij na innych stronach

Jesli chodzi o rury wystarczy powtórzyc na zewnętrznego  i wewnętrznego okręgu wykonac lispa, potem odjąć 1 bryłe od drugiej i jest rura.

 

Jesli ktoś używa nakładki e-cad, to baza profili jest tam szeroka, goracowalcowane i zimnogiete polilinie zamknięte, to samo dotyczy rur okragłych, kwadratowych i prostokatnych.

post-140-0-98324200-1445856968_thumb.jpg

Także interfejs z profilami to ambitniejsze zadanie, ale nie konieczne ;) do tworzenia bloków z przekroi stalowych

 

 

 

Także, pomysł z blokiem jest udany, a osadzanie na sciezce bylo by wg definiowanego punktu wstawienia bloku w układzie lokalnym XYZ na poczatku sciezki w p. 0,0,0, to dobrze działa.

 

Natomiast fazowanie jest trudniejszym problemem (wykorzystanie narzędzia SLICE jako ucięcie w płaszczyźnie równoległej do płaszczyzny globalnej XY lub prostopadłej do płaszczyzny globalnej XY (płaszczyzna cięcia jest prostopadła do płaszczyzny zawierajacej ścieżkę-odcinek P1-P2, dotyczy to poczatku i końca ściezki. 3 wariant bez mian. Są 2 wyjątki wczesniej opisałem. płaszczyzna przekroju profila nie może być równoległa do płaszczyzny cięcia SLICE bo wyjdzie bzdura, nieskończoność. ;)

 

Do nastepnego wątku wkleje lispa do spirali 3D - np. zastosowanie do schodów spiralnych, strzemion-uzwojeń słupów okrągłych. Lisp jest z internetu, nie pamietam skąd, działa w ZWCAD+

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

Tak się zastanawiam, czemu mamy wybierać blok, czemu to służy?

Po co robić z polilinii blok i potem go wyciągać. Może od razu wyciągajmy zamknięta polilinie po ścieżce i kliknięciem wskazujmy punkt z którego się wyciąga polilinię.

 

Region OK, ale też chyba nie ma potrzeby aby byl w bloku.

 

pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

@gruzin, rozważane były 2 opcje,

 

Polilinia zamknięta + punkty orientacyjne pomocnicze do wstawienia przekroju w sposób normalny na ścieżce w p. P1

 

druga opcja od kojacka , profil z polilinii zamknietej w postaci bloku, blok wstawiany wg zdefiniowanego punktu wstawiania w bloku w sposób normalny na ścieżce w p. P1

Odnośnik do komentarza
Udostępnij na innych stronach

Co do bloków. Blokiem jest łatwiej operować: obrót, obrót 3d, skalowanie itp. Ma punkt bazowy, a definicja bloku determinuje kierunki, orientację itp. Ponadto ma nazwę, więc wybór profilu nie jest przypadkowy. Narysowana każdorazowo Polilinia może nie spełniać zawsze wszystkich warunków.

Odnośnik do komentarza
Udostępnij na innych stronach

Tworząc blok nalezy uprzednio zamknąć polilinię, chyba ze korzystamy z gotowca z biblioteki co pokazywałem. Punkt wstawienia bloku mozna okreslić dowolnie wtedy

 

nie koniecznie w narzucony sposób jak na grafice, także sposób kojacka jest praktyczniejszy jednak

 

 

post-140-0-17892800-1445857571_thumb.jpg

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Co do bloków. Blokiem jest łatwiej operować: obrót, obrót 3d, skalowanie itp. Ma punkt bazowy, a definicja bloku determinuje kierunki, orientację itp. Ponadto ma nazwę, więc wybór profilu nie jest przypadkowy. Narysowana każdorazowo polilinia może nie spełniać zawsze wszystkich warunków.

OK, jasne.

Odnośnik do komentarza
Udostępnij na innych stronach

Wprowadziłem na razie takie zmiany:
1) Rysowany jest profil bez użycia command. To jest wielokrotnie szybsze
2) Profil w bloku może być zamkniętą polilinią lub regionem.
Oczywiście  CADPack musi byc załadowany. Sprawdźcie czy to chodzi na ZW, bo nie miałem okazji próbować. Na Ac hula bez zarzutu. Oto kod:

; =========================================================================================== ;
(defun C:EXTRINS (/ InsName StartP EndP PathEnt InsObj)
  (if
    (setq StartP (getpoint "\nPierwszy punkt linii definiującej ścieżkę: "))
    (if
      (setq EndP (getpoint StartP "\nKoniec ścieżki: "))
      (if
        (and
          (setq InsName (getstring "\nPodaj nazwe bloku: "))
          (member
            (strcase InsName)
            (mapcar 'strcase (cd:SYS_CollList "BLOCK" (+ 1 2 4 8)))
          )
        )
        (progn
          (cd:SYS_UndoBegin)
          (setq InsObj (cd:BLK_InsertBlock StartP InsName '(1 1 1) 0 T))
          (SetInsertZOrient
            (NewVect StartP EndP)
            (setq InsObj (vlax-vla-object->ename InsObj)
          )
          )
          (setq PathEnt (cd:ENT_MakeLine (getvar "CTAB") StartP EndP T))
          (ExtrudeProfile (vlax-ename->vla-object InsObj) PathEnt)
          (cd:SYS_UndoEnd)
        )
      )
    )
  )
  (princ)
)
; =========================================================================================== ;
(defun ExtrudeProfile (Blk Lin / Prf Crv Reg Del)
  (vla-explode Blk)
  (setq Prf (entlast))
  (vla-delete Blk)
  (if
    (cond
      ( (= "LWPOLYLINE" (cdr (assoc 0 (entget Prf))))
        (setq Crv (vlax-make-safearray vlax-vbObject '(0 . 0)))
        (vlax-safearray-put-element Crv 0 (vlax-ename->vla-object Prf))
        (setq Reg (vla-AddRegion (cd:ACX_ASpace) Crv))
      )
      ( (= "REGION" (cdr (assoc 0 (entget Prf))))
        (setq Reg (vlax-ename->vla-object Prf))
      )
      (t nil)
    )
    (progn
      (vla-AddExtrudedSolidAlongPath
        (cd:ACX_ASpace)
        (if
          (= (type Reg )'VLA-OBJECT)
          Reg
          (setq Del (vlax-safearray-get-element (vlax-variant-value Reg) 0))
        )
        (vlax-ename->vla-object Lin)
      )
      (if Del (vla-delete Del))
      (foreach % (list Lin Prf)(entdel %))
    )
  )
)
; =========================================================================================== ;
(defun NewVect (p1 p2 / dt sq sm um uv)
  (setq dt (mapcar '- p2 p1)
        sq (mapcar '* dt dt)
        sm (apply '+ sq)
        um (sqrt sm)
        uv (mapcar '/ dt (list um um um))
  )
)
; =========================================================================================== ;
(defun SetInsertZOrient (ExtrVec Ename / e b)
  (setq e (entget Ename)
        b (trans (cdr (assoc 10 e)) Ename ExtrVec)
        e (subst (cons 10 b)(assoc 10 e) e)
        e (subst (cons 50 0.0)(assoc 50 e) e)
        e (subst (cons 210 ExtrVec)(assoc 210 e) e)
  )
  (entmod e)
)
; =========================================================================================== ;
(princ)
Odnośnik do komentarza
Udostępnij na innych stronach

Witaj, testowałem rure prostokątną goracowalcowaną 500x300x20, i tworzona bryła jest tylko z wewnętrznej krawędzi zamknietej, zewnętrza krawędz zamknieta bez zmian , wrzuce obrazek zaraz

 

post-140-0-03348000-1445900970_thumb.jpg

 

RP500x300x20_test.dwg

 

 

p.s. jesli definiowany jest region1 w regionie2 to chyba te bryły obie powinny byc wyciągane i zewnętrzna odejmuje wewnętrzną, chyba ze trzeba definiowac osobno blok dla krawedzi/regionu zewnętrznego i osobno dla wewnętrznego

 

tu rurę potraktowałem osobno (zewnętrzny obwód i wewnętrzny obwód)

post-140-0-54501400-1445901776_thumb.jpg

 

RP500x300x20_test.dwg

 

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

Hmm. W definicji bloku ma znajdować się jeden obiekt. Czyli w twoim przypadku nie dwa regiony a tylko jeden. Musi on być utworzony tak że w definicji bloku od większego regionu odejmujesz mniejszy. Wtedy jest jeden obiekt - definiowany przez (tutaj) dwa profile.

post-451-0-13075800-1445925793_thumb.png

Edytowane przez kojacek
Odnośnik do komentarza
Udostępnij na innych stronach

A teraz moi mili, w następnym kroku niechże zrobi ktoś dwg-a, w którym niech sobie będzie z 5-10 bloków z profilami z LWPOLYLINE, kilka z REGION-ami, oraz kilka całkiem innych różnych bloczków. Po co? Otóż chcę przerobić wybieranie bloków na:
1) przez nazwę "z ręki"
2) przez nazwę z listy
3) przez wybór entycji (leży sobie gdzieś obok i się wskazuje)
Całą "chytrość" wyboru chcę oprzeć na tym że sprawdzana jest zawartość bloku tak, aby np. liście (punkt 2) znalazło się tylko np. 10 bloków, (spełniających warunki) a pozostał (np. 20) - już nie.

Odnośnik do komentarza
Udostępnij na innych stronach

Mam prosbe o drobną zmiane, w lispie pozbyłem sie polskich znaków, bo coś z nimi nie tak, i nazwa lispu skrócona,
łatwiej sie wprowadza z klawiatury B3D (EXTRINS - oryginalne ale dość przydługie)

 

 

post-140-0-72270700-1445956869_thumb.jpg

 

teraz nie ma problemu z ś, ż, ę

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

Halo, halo panie Martin_S... 

Niechże mnie ktoś poprawi, ale czy nie jest tak że w blokach o nazwach IPE500 i IPE600, które gdzieś tutaj istnieją w przykładowych plikach, polilinie są OTWARTE, a nie (jak być powinno) zamknięte? Mylę się?

 

O poliliniach otwartych a wyglądających jak zamknięte można przeczytać (autoreklama) tutaj:   https://kojacek.wordpress.com/polilinia-zamknieta/

Odnośnik do komentarza
Udostępnij na innych stronach

Racja, przeoczyłem to z dwuteownikami, oooops . plik skoryguję, nie wiedziałem, ze to narobi kupe problemów

 

post-140-0-56066300-1445968423_thumb.jpg

 

bedzie zasada jak na grafice

 

 


DWG z dwuteownikami pozamykanymi, zetowniki także, pręt to okrąg, rura kwadratowa to region

 

 

mam nadzieje ze bedzie juz ok B3D-003.dwg

 

p.s. dyscyplina w CAD ważna , @kojacek - zrozumiałem, mam nadzieje że tak

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Kojacku załączam kilka bloków stworzonych w Zwcadzie do testowania. Bloki od "a1" do "a8" zawierają albo polilinie zamknięte albo regiony więc powinny się dać wyciągnąć. Bloki B nie nadają się do tego.

 

err. blok b2 zawiera niezamkniętą polilinię a udaje się go wyciągnąć ??

test bloki 01.dwg

Edytowane przez gruzin
Odnośnik do komentarza
Udostępnij na innych stronach

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