_

Obrys polilini + automatyczny hatch

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

Obrys polilini + automatyczny hatch

Postprzez kg91 » mar 06, 2018 09:18

Dzień dobry,
Projektując gazociąg muszę wyznaczać strefę kontrolowaną wokół projektowanego gazociągu na PZT. Robię to w następujący sposób:
1. Rysuję gazociąg polilinią
2. Odsuwam go poleceniem offset na 0,5m dwa razy, raz w górę raz w dół.
3. Obrysowuję od jakby końca i początku 0,5m
4. Kreskuję obszar.

Czy da się to zoptymalizować jakimś lispem, który by wokół wybranej polilini rysował prostokąt odsunięty od polilini o 0,5m (najlepiej jakby wybór domyślny to było 0,5m ale możnabyło to zmienić na jakąś inną wartość)(rysunek w metrach) i kreskował go określonym stylem? (ANSI31, Scale 0,1)

Będę wdzięczny za pomoc
kg91
 
Posty: 15
Dołączył(a): lut 14, 2018 10:44

Re: Obrys polilini + automatyczny hatch

Postprzez kojacek » mar 06, 2018 10:41

kg91 napisał(a):Dzień dobry,
Projektując gazociąg muszę wyznaczać strefę kontrolowaną wokół projektowanego gazociągu na PZT. Robię to w następujący sposób:
1. Rysuję gazociąg polilinią
2. Odsuwam go poleceniem offset na 0,5m dwa razy, raz w górę raz w dół.
3. Obrysowuję od jakby końca i początku 0,5m
4. Kreskuję obszar.

Czy da się to zoptymalizować jakimś lispem, który by wokół wybranej polilini rysował prostokąt odsunięty od polilini o 0,5m (najlepiej jakby wybór domyślny to było 0,5m ale możnabyło to zmienić na jakąś inną wartość)(rysunek w metrach) i kreskował go określonym stylem? (ANSI31, Scale 0,1)

Będę wdzięczny za pomoc


A takie coś - przez wskazanie 2 punktów może być :?: <klik>:

HatchRectangle.gif
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Re: Obrys polilini + automatyczny hatch

Postprzez ziele_o2k » mar 06, 2018 11:37

kojacek napisał(a):A takie coś - przez wskazanie 2 punktów może być :?:
[/attachment]

Albo tak :?: :twisted: <klik>
lwhatch.gif
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 682
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Obrys polilini + automatyczny hatch

Postprzez kojacek » mar 06, 2018 11:42

No też :) , ale było:
kg91 napisał(a):(...) rysował prostokąt (...)
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Re: Obrys polilini + automatyczny hatch

Postprzez ziele_o2k » mar 06, 2018 11:46

kojacek napisał(a):No też :) , ale było:
kg91 napisał(a):(...) rysował prostokąt (...)


Założyłem, że chcemy zakreskować wszystko wzdłuż polilinii (gazociągu). Zobaczymy co kg91 będzie chciał 8)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 682
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Obrys polilini + automatyczny hatch

Postprzez kojacek » mar 06, 2018 12:29

Podkręciłem (opcjonalnie) powiększenie (jak ktoś ma taką potrzebę) prostokąta "z przodu" jak i "z tyłu"... :)

HatchRect.png
HatchRect.png (9.84 KiB) Przeglądane 370 razy
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Re: Obrys polilini + automatyczny hatch

Postprzez kg91 » mar 07, 2018 13:54

Dziękuję za odzew @ziele_o2k @kojacek

Ta metoda Pana ziele_o2k bardziej mi odpowiada, jeden klik i mam wszystko. Może właśnie do tej wersji udało by się zrobić dwa warianty tj tak jak jest zaprezentowane teraz i tak jak zaproponował Pan kojacek w ostatnim poście? Jakieś dodatkowe okno dialogowe do wyboru? I te fajnie by było jakby się udało dystans offsetu ustawić, przy czym żeby domyślnie było 0,5m od osi.

I ostatnie pytanie, da się zrobić tak abym wybrał np dwie różne polilinie z jakimś wspólnym punktem i żeby wokół nich ten hatch był wspólny?

Będę wdzięczny za pomoc
kg91
 
Posty: 15
Dołączył(a): lut 14, 2018 10:44

Re: Obrys polilini + automatyczny hatch

Postprzez kg91 » mar 08, 2018 09:13

Jeszcze chwilę nad tym posiedziałem i wymyśliłem, że najlepiej będzie jak tego odsunięcia od końca polilini nie będzie, czyli tak jak zaprezentował to Pan @ziele_o2k jest ok :) Tylko jak zachowa się ten lisp jak polinia będzie skręcać gęsto (gęsciej niż odsunięcie)to się to ładnie zrobi?

Kwestia tylko możliwości ustawienia szerokości tego odsunięcia i ustawienia domyślnego 0,5m i tak jak pisałem w pierwszym poście, kolor 252 lub jak warstwa, rodzaj kreskowania ANSI31, Skala hatchu 0,1.

Pozdrawiam
kg91
 
Posty: 15
Dołączył(a): lut 14, 2018 10:44

Re: Obrys polilini + automatyczny hatch

Postprzez ziele_o2k » mar 08, 2018 09:23

kg91 napisał(a):Jeszcze chwilę nad tym posiedziałem i wymyśliłem, że najlepiej będzie jak tego odsunięcia od końca polilini nie będzie, czyli tak jak zaprezentował to Pan @ziele_o2k jest ok :) Tylko jak zachowa się ten lisp jak polinia będzie skręcać gęsto (gęsciej niż odsunięcie)to się to ładnie zrobi?

Kwestia tylko możliwości ustawienia szerokości tego odsunięcia i ustawienia domyślnego 0,5m i tak jak pisałem w pierwszym poście, kolor 252 lub jak warstwa, rodzaj kreskowania ANSI31, Skala hatchu 0,1.

Pozdrawiam

Zrobi się, ale jest kolejka :)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 682
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Obrys polilini + automatyczny hatch

Postprzez kojacek » mar 08, 2018 19:50

Póki co, zrobiłem tak. Ciekawe jak to zrobił Ziele. Złączenie odsuniętych poly zrobiłem command-em - przyznam nie chciało mi się dziobać poważniej... ;) [klik]:
HatchPoly.gif

Są 4 zmienne globalne: do odsunięcia, stylu i skali hatch-a oraz koloru. CADPL-Pack (rzecz jasna) wymagany. Nie ma obsługi błędów, i nie sprawdza czy Poly nie jest samoprzecinająca się. Cały kod:
Kod: Zaznacz cały
; =============================================================== ;
; HPoly.lsp by kojacek (08-03-2018)
; --------------------------------------------------------------- ;
(setq *X* 0.5        ; offset
      *S* 0.1        ; pattern scale
      *H* "ANSI31"   ; pattern name
      *C* 252        ; color
)
; --------------------------------------------------------------- ;
(defun C:HPO (/ s x f d i v a b c g p -mp -mh)
  (defun -mp (a b c d / cmd)
    (setq cmd (getvar "CMDECHO"))
    (setvar "CMDECHO" 0)
    (vl-cmdf "_.Pedit" a "_j" c b d "" "_exit")
    (setvar "CMDECHO" cmd)
    (vlax-ename->vla-object (entlast))
  )
  (defun -mh (o /  h a)
    (setq h (vla-AddHatch
              (cd:ACX_ASpace)
              acHatchPatternTypePredefined *H* :vlax-true))
    (setq a (vlax-make-safearray vlax-vbObject (cons 0 0))
          a (vlax-safearray-fill a (list o))
    )
    (vla-AppendOuterLoop h a)
    (vla-put-PatternScale h *S*)
    (vla-Evaluate h)
    (foreach % (list o h)(vla-put-Color % *C*))
  )
  (initget "Zmień")
  (setq s
    (entsel
      (strcat "\nAktualna szerokość ("
              (cd:CON_Real2Str *X* 2 nil)
              ") [Zmień] lub wybierz polilinię:"))
  )
  (if s
    (cond
      ( (= s "Zmień")
        (initget (+ 1 2 4))
        (setq x (getdist
                  "\nNowa szerokość: "))
        (if x
          (progn
            (setq *X* x)
            (C:HPO)
          )
          (princ "\nAnulowano. ")
        )
      )
      ( (= (type (setq i (car s)))'ENAME)
        (cond
          ( (= (cdr (assoc 0 (setq f (entget i)))) "LWPOLYLINE")
            (cond
              ( (= 1 (logand 1 (cdr (assoc 70 f))))
                (princ "\nPolilinia jest zamknieta. Spróbuj ponownie.")
                (C:HPO)
              )
              (t
                (setq d (/ *X* 2.0)
                      v (vlax-ename->vla-object (car s))
                )
                (cd:SYS_UndoBegin)
                (vla-offset v d)
                (setq a (entlast))
                (vla-offset v (* -1 d))
                (setq b (entlast)
                      c (entget a)
                      g (entget b)
                )
                (-mh
                  (-mp
                    a
                    b
                    (cd:ENT_MakeLWPolyline
                      (getvar "CTAB")
                      (list
                        (cdr (assoc 10 c))
                        (cdr (assoc 10 g))) nil
                    )
                    (cd:ENT_MakeLWPolyline
                      (getvar "CTAB")
                      (list
                        (cdr (assoc 10 (reverse c)))
                        (cdr (assoc 10 (reverse g)))) nil
                    )
                  )
                )
                (cd:SYS_UndoEnd)
              )
            )
          )
          ( t
            (princ "\nTo nie jest polilinia. Spróbuj ponownie.")
            (C:HPO)
          )
        )
      )
      (t (princ "\nAnulowano."))
    )
    (princ "\nNic nie wybrano.")
  )
  (princ)
)
; --------------------------------------------------------------- ;
(princ)
Avatar użytkownika
kojacek
 
Posty: 5430
Dołączył(a): paź 03, 2005 20:17

Następna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników