CADsite forum

AutoCAD => Autolisp => Topic gestart door: ronny op do 04 09 2008, 15:49:22

Titel: Een detail maken
Bericht door: ronny op do 04 09 2008, 15:49:22
Wie kan mij helpen, ik moet op een groot aantal tekeningen een vergroot detail maken van een deel van de tekening. De bedoeling is dat er een deel van de tekening wordt geselecteerd en daarna wordt vergroot bv 5x en dat daarna alles netjes wordt getrimd. Had op internet een autolisp routine gevonden maar die werkt om één of andere reden niet.  :cry:

Thx

Ron
Titel: Re: Een detail maken
Bericht door: EddyBeerke op do 04 09 2008, 15:56:39
Daar heb je toch viewpoorts voor?
Titel: Re: Een detail maken
Bericht door: ronny op do 04 09 2008, 17:38:58
Citaat van: EddyBeerke op do 04 09 2008, 15:56:39
Daar heb je toch viewpoorts voor?
Niet als je in modelspace werkt, bovendien is het aantal viewports per tekening beperkt. De bedoeling is om echte details te maken dmv een lisp routine :shock: :roll:
Titel: Re: Een detail maken
Bericht door: ronny op vr 05 09 2008, 07:49:47
dit is routine waar ik het over had, het trimmen gaat niet goed, heb de routine een aantal keer op dezelfde selectionset laten lopen, elke keer met een ander resultaat (niet altijd worden de objecten aan de juiste zijde getrimd). Iemand een idee?  :mrgreen:

(defun val (x e) (cdr (assoc x e)))
(defun enttype (e) (cdr (assoc 0 e)))
(defun entname (e) (cdr (assoc -1 e)))
(setq >90 (/ pi 2))
(setq >270 (* 3 (/ pi 2)))
(defun osends (ss pll pur / z eps)
  (ends ss)
  (foreach z eps
    (if (or (< (caadr z) (car pll))
        (< (cadadr z) (cadr pll))
        (> (caadr z) (car pur))
        (> (cadadr z) (cadr pur))
      )
      (command z)
    )
  )
)
(defun ends (ss / i ent cen)
  (setq len (sslength ss) i 0)
  (while (< i len)
    (setq ent (entget (ssname ss i)))
    (cond
      ((= (enttype ent) "LINE")
        (setq eps (cons (list (entname ent) (val 10 ent)) eps))
        (setq eps (cons (list (entname ent) (val 11 ent)) eps)) )
      ((= (enttype ent) "ARC")
        (setq cen (val 10 ent))
        (setq eps (cons
          (list (entname ent)
            (polar cen 0 (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
            (polar cen >90 (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
          (polar cen pi (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
          (polar cen >270 (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
            (polar cen (val 50 ent) (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
            (polar cen (val 51 ent) (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
          (osnap (polar cen (val 51 ent) (val 40 ent)) "mid")) eps)) )
      ((= (enttype ent) "CIRCLE")
        (setq cen (val 10 ent))
        (setq eps (cons
          (list (entname ent)
          (polar cen 0 (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
          (polar cen >90 (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
          (polar cen pi (val 40 ent))) eps))
        (setq eps (cons
          (list (entname ent)
          (polar cen >270 (val 40 ent))) eps)) )
    )
    (setq i (1+ i))
  )
)
(defun exp_pl (s / i len ent)
  (setq i 0 len (sslength s))
  (while (< i len)
    (setq ent (entget (ssname s i)))
    (cond
      ((= (enttype ent) "POLYLINE")
        (command "explode" (entname ent))
      )
      ((= (enttype ent) "INSERT")
        (if (= (val 41 ent) (val 42 ent) (val 43 ent))
          (command "explode" (entname ent))
        )
      )
    )
    (setq i (+ 1 i))
  )
)
(defun era_xtra (e)
  (setq ssx# (ssadd))
  (while (setq e (entnext e))
    (if (not (ssmemb e ssx#))
      (setq ssx# (ssadd e ssx#))
    )
  )
  (command "erase" ssx# "")
)
(defun c:dtl ()
  (if (and
    (setq px (getpoint "\nFirst corner: "))
    (setq py (getcorner px "\nOther corner: "))
    (setq pxx (getpoint px "\nNew first corner position: "))
    (setq xs (getreal "\nScale factor for detail: ")) )
    (progn
  (command "copy" "c" px py "" px pxx)
  (command "pline" px (list (car px) (cadr py)) py (list (car py) (cadr px)) "c")
  (setq ss (ssget "c" pxx (polar pxx (angle px py) (distance px py))))
  (setq last (entlast))
  (exp_pl ss)
  (setq ss (ssget "c" pxx (polar pxx (angle px py) (distance px py))))
  (era_xtra last)

 
 
  (command "scale" ss "" pxx xs)
  (setq pyy (polar pxx (angle px py) (* xs (distance px py))))
  (command "pline" pxx (list (car pxx) (cadr pyy)) pyy (list (car pyy) (cadr pxx)) "c")
  (command "trim" (setq b (entlast)) "")
  (osends ss pxx pyy)
  (command "")
  (redraw b)
    )
  )

  (princ)
)
(princ)

En dan is er nog iets,  ik begrijp de functie van deze lijn niet goed: (command "erase" ssx# "")  :(  het is de bedoeling (volgens mij) dat de kader van de polyline wordt weggegooid, maar dat gaat (ook) niet altijd goed  :cry:

(defun era_xtra (e)
  (setq ssx# (ssadd))
  (while (setq e (entnext e))
    (if (not (ssmemb e ssx#))
      (setq ssx# (ssadd e ssx#))
    )
  )
  (command "erase" ssx# "")
)
Titel: Re: Een detail maken
Bericht door: EddyBeerke op vr 05 09 2008, 08:06:52
Velen geven de voorkeur om NIET te verschalen (altijd 1:1 tekenen) en dan kun je dus wel een vp gebruiken!
Titel: Re: Een detail maken
Bericht door: ronny op vr 05 09 2008, 08:17:00
Eddy,

Mijn tekeningen zijn altijd 1:1, maar soms moet er een verschaald detail op staan tbv de constructie er van. Dan wordt er een deeltje van de tekening vergroot en alle overbodige info weggegooid. (Net zoals vroeger toen we nog met het handje tekende) :shock:
Titel: Re: Een detail maken
Bericht door: EddyBeerke op vr 05 09 2008, 08:26:56
Citaat van: ronny op vr 05 09 2008, 08:17:00
Eddy,

Mijn tekeningen zijn altijd 1:1, maar soms moet er een verschaald detail op staan tbv de constructie er van. Dan wordt er een deeltje van de tekening vergroot en alle overbodige info weggegooid. (Net zoals vroeger toen we nog met het handje tekende) :shock:

Waarom dan niet een vp dan hoef je dus niet te verschalen, en of wat is het voordeel als je wel verschaald? vraag ik me af.
Titel: Re: Een detail maken
Bericht door: ronny op vr 05 09 2008, 08:34:00
Met VP's kan je inderdaad een "detail" verschaald weergeven, maar dan wel met alle objecten die er in de tekening zitten en dat is nu net niet de bedoeling want dan staat er te veel overbodige info in het detail, dus VP's vallen af.
Titel: Re: Een detail maken
Bericht door: EddyBeerke op vr 05 09 2008, 10:05:35
Citaat van: ronny op vr 05 09 2008, 08:34:00
...te veel overbodige info in het detail, dus VP's vallen af.
Ik selecteer de objecten die ik wil gebruiken, kopieer ze en sloop alle overbodige dingen er uit, of zet in het vp de lagen uit die ik niet wil zien.
Als het detail opblaast moet je ook nog eens rekening houden met de schaal ervan.
Titel: Re: Een detail maken
Bericht door: bart op vr 05 09 2008, 11:05:43
De werkzaamheid van deze lisp is afhankelijk van je scherm
zoom eens wat verder uit en probeer het nog een keer
Titel: Re: Een detail maken
Bericht door: ronny op vr 05 09 2008, 11:56:11
Het probleem blijft hetzelfde, somige lijnen worden aan de verkeerde zijde getrimd.  :auw: Zoals je op de bijlage kan zien, de onderste 2 zijn Oké, de bovenste niet. De routine heeft 3x achter elkaar gelopen en het resultaat is niet altijd hetzelfde ?!?
Titel: Re: Een detail maken
Bericht door: bart op vr 05 09 2008, 15:36:15
De input is niet het zelfde dus de output ook niet.

als je drie keer exact het zelfde venster selecteerd en de zelfde vergrotings schaal opgeeft komt er 3 keer het zelfde resultaat uit

De lsp werkt redelijk waarschijlijk gaat het fout als er iets wordt geselecteerd dat niet te trimmen is
Je zal er wat aan moeten sleutelen om e.a "altijd" te laten werken
Titel: Re: Een detail maken
Bericht door: Joop op ma 08 09 2008, 09:59:58
 :!: :!: Je gebruikt de Autocad parameter/optie  LAST als variabele. Dit levert altijd problemen op :!: :!:
Titel: Re: Een detail maken
Bericht door: Joop op ma 08 09 2008, 12:16:59
Ik ben zomaar eens even in de AutoCAD directories gaan kijken, specifiek in de Expres dir.
En wat kom ik daar tegen: de oude en vertrouwde extrim.
Dit bestaat al sinds 1999 en werkt nog steeds.
Wel de blokken even exploderen.

Voor alle zekerheid hier bijgevoegd. :mrgreen:
Titel: Re: Een detail maken
Bericht door: julien op ma 08 09 2008, 13:06:05
Citaat van: ronny op vr 05 09 2008, 08:34:00
Met VP's kan je inderdaad een "detail" verschaald weergeven, maar dan wel met alle objecten die er in de tekening zitten en dat is nu net niet de bedoeling want dan staat er te veel overbodige info in het detail, dus VP's vallen af.
Je kan per viewport toch layers op onzichtbaar zetten?
Werken met copies is altijd gevaarlijk. Als er aanpassingen gebeuren moet je dat 2 keer doen!
Titel: Re: Een detail maken
Bericht door: EddyBeerke op ma 08 09 2008, 15:07:24
Citaat van: julien op ma 08 09 2008, 13:06:05

Je kan per viewport toch layers op onzichtbaar zetten?
Werken met copies is altijd gevaarlijk. Als er aanpassingen gebeuren moet je dat 2 keer doen!
Citaat van: EddyBeerke op vr 05 09 2008, 10:05:35
Ik selecteer de objecten die ik wil gebruiken, kopieer ze en sloop alle overbodige dingen er uit, of zet in het vp de lagen uit die ik niet wil zien.
Als het detail opblaast moet je ook nog eens rekening houden met de schaal ervan.
Dat is nou net wat ik bedoel.
Maar dat...->
Citeerkopieer ze en sloop alle overbodige dingen er uit

... is alleen een nood oplossing de echte oplossing zit 'm in het "per viewport toch layers op onzichtbaar zetten."