CADsite forum

AutoCAD => AutoCAD probleem => Topic gestart door: Vonk op do 20 08 2015, 14:17:23

Titel: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op do 20 08 2015, 14:17:23
Beste,

Kan iemand me vertellen hoe ik het beste de aantallen van een gevelaanzicht kan bepalen.
Nu hebben we een lisp van iemand vroeger gemaakt met een dimension die vraagt om de aantallen en
lengten die handmatig moeten worden geteld en ingevoerd(met risico op foutief invoeren/tellen).
Het betreft een horizontale situatie ds(dozen) en een horizontale of verticale pl (platen) situatie waarbij er ook sparingen in een gevel kunnen zitten((ramen deuren enz) en de werkende breedte van het product kan variëren van ca. 200 tot 1200mm.
Met lisp-routine schrijven ben ik hierin helaas niet ver genoeg gevorderd. Ben erg benieuwd of jullie een tip hebben. bedankt.
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: roy_043 op ma 24 08 2015, 11:55:37
Volgens mij is een Lisp programma toch de meest aangewezen oplossing. Waarbij de huidige wijze van tekenen problematisch kan zijn. Het lijkt alsof in de bovenste gevel in de PDF geen platen worden aangeven, maar lijnen met een lengte van ca. 160 (?) m. En bij het plaatsen van de aligned dimensions wordt niet nauwkeurig te werk gegaan.

Maar wellicht zijn er ook oplossingen mogelijk die gebruikmaken van dynamische blocks.
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op ma 24 08 2015, 16:11:22
Beste Roy,

De pdf is een voorbeeld(fragment) van een gevel waarbij de as-lijnen ook gemaatvoerd zijn
en de totale as-maatvoering inderdaad 160m1 lang is.

Het gaat me echter over de hoeveelheden bepalen zoals ook in de dwg zichtbaar is als voorbeeld.
Wel een stapje verder :!:
Ik heb via een collega een oude Lisp gekregen :Dmaar die zoekt waarschijnlijk naar lagen en
teksten die niet meer stroken binnen het bedrijf. (Is wel voor het dak en niet de wand) Ik heb geprobeerd het eea aan de gang te krijgen maar blijf
hangen na het aanklikken van linksonder en rechtsboven. Ik krijg dan de melding
Value must be nonzero.
; error: Function cancelled
[/i]

Zoals ik dacht refereert de lisp ook naar de bijlage dwg?
heb daar de laag nu veranderd in 0.35.

Misschien dat er ergens nog een fout zit?
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op ma 24 08 2015, 16:19:03
Ik heb ze ook van de wand gevonden :D
Die hebben dezelfde opbouw als van het dak. Wat ik wel raar vindt is dat het keuzemenu waar het commando
mee begint onderaan in de lisp staat.
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: roy_043 op ma 24 08 2015, 22:02:09
Citaat van: Vonk op ma 24 08 2015, 16:11:22
Het gaat me echter over de hoeveelheden bepalen
Dat is mij duidelijk. Mijn boodschap is dat de wijze van tekenen het automatisch bepalen van hoeveelheden niet ondersteunt.

De Lisp die jij hebt bijgevoegd loopt vast op de waarde van USERR1 (= een tekening variabele). Deze waarde wordt gebruikt voor de schaal van een insert en mag daarom niet nul zijn.
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op di 25 08 2015, 07:58:37
Bedankt voor de reactie Roy,

Weer wat geleerd. Ik dacht dat met user1 een soort workspace profiel werd bedoeld.
Is het nodig om die variabele aan te passen in de LISP door er simpelweg userr5 of een ander getal van te maken? of gaat het om een instelling die ik zou moeten doen in bijvoorbeeld een insert menu.
Als het echter niet zo simpel werkt gaat het boven mijn pet :police: en wordt het lastig denk ik.
gr
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: roy_043 op di 25 08 2015, 09:12:23
Het simpelste is om deze regel (komt 2x voor):
(setq schaal (getvar "userr1"))
te vervangen door:
(setq schaal 50.0)
Waarbij ik niet weet of dat de juiste schaal is.
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op di 25 08 2015, 09:35:51
Ja het lukt! :D dank voor de hulp
Heb hem ingesteld op schaal 100.0
Is de schaal misschien niet te koppelen aan de Viewportschaal?
Ik ga het bij de andere ook is proberen.



Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op di 25 08 2015, 10:01:23
Ik heb het tekstbestand dplaat.dwg. waar de lisp aan gekoppeld staat
aangepast in een recente laag en de grote aangepast met als uitgangspunt 1:100.
Hierdoor kan de waarde in de lisp nu gewoon 1 zijn.
De locatie van die dwg zoekt hij via het'' support file search path ''toch?
Misschien vanaf nu de tekst annotative maken zodat die mee verschaald als de tekening bijvoorbeeld 1:150 moet worden.


Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: EddyBeerke op wo 26 08 2015, 10:32:30
Citaat van: roy_043 op di 25 08 2015, 09:12:23
Het simpelste is om deze regel (komt 2x voor):
(setq schaal (getvar "userr1"))
te vervangen door:
(setq schaal 50.0)
Waarbij ik niet weet of dat de juiste schaal is.
Misschien kun je ook een "if" aan dat stukje hangen om te kijken of er iets is ingevuld:
(if (= (setq schaal (getvar "USERR1")) 0.0) (setq schaal 1)) ; als USERR1 niet is ingevuld, dus 0.0, vul dan schaal met 1 of een andere gewenste waarde

Om de vieportschaal op te vragen kun je dit gebruiken, de waarde komt in USERR1:


;--- getx --------------------------------------------------
(defun getx (n data)
(nth n (cdadr (assoc -3 data)))
)

;--- c:vpscale ----------------------------------------------
(defun c:vps (/ ent data cvsize cvhgt units vpna flag schaal)
(cond
  ((not (equal 0 (getvar "tilemode")))   (princ "\nGa naar 'PaperSpace', anders werkt het niet."))
  ((and (/= 1 (getvar "cvport"))
(setq vpna (acet-currentviewport-ename))
(equal 1 (logand 1 (cdr (assoc 90 (entget vpna)))))
)                              (princ "\nWerkt niet in 'perspective view'"))
  (T (acet-error-init (list (list "cmdecho" 0 "luprec" (getvar "luprec") "dimzin" 8 ) T     ;flag. True means use undo for error clean up.
                      );list
      );acet-error-init

      (if (> 2 (getvar "cvport")(getvar "tilemode")) ; port=1 & tile=0
       (progn
          (while (not flag)
           (princ "\nSelecteer een lijn van een viewport.")
           (setq ent (acet-ui-single-select '((0 . "viewport")) T )) ;setq
           (if (and ent
                    (= 1 (logand 1 (cdr (assoc 90 (entget ent)))))
               )
               (progn
                 (princ "\nViewport met een 'perspective view' zijn niet toegestaan.")
                 (setq flag nil)
               );progn
               (setq flag T)
           );if
          );while
        );progn
        (setq ent (acet-currentviewport-ename))
      )
      (cond
        ((and
            ent
            (setq data (entget ent '("ACAD")))
            (= "VIEWPORT" (acet-dxf 0 DATA))
         );and
          (setq cvhgt  (acet-dxf 41 DATA)  ; viewport height
                cvsize (cdr (getx 6 data))    ; viewsize from extended data
          )
          (cond
            ((< cvsize cvhgt)
              (setq schaal (/ cvhgt cvsize))
  (setq schaal (rtos (/ 1000 schaal)  2))
              (princ "Schaal is 1: ")(princ schaal)
  (setvar "USERR1" schaal)
            )
            (T
              (setq schaal (/ cvsize cvhgt))
  (setq schaal (rtos (/ 1000 schaal)  2))
              (princ "Schaal is 1: ")(princ schaal)
  (setvar "USERR1" schaal)
            )
          );cond
        )
        (T (prompt "\ngeen viewport gevonden."))
      );cond
      (acet-error-restore) ; Retsore values
  )
);cond close
  (princ)
)

(princ)

Opmerking:
Deze code komt van de expresstools en is aangepast.
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op wo 26 08 2015, 13:07:11
bedankt voor het meedenken eddy,
Ik zal de eerste optie is toevoegen aan de regel en kijken wat hij aangeeft.

Ik heb ook reeds de andere lisp gevonden en aangepast en geladen.
Echter als ik op de zelfgemaakt button klik met het juiste commando behorende bij de lisp(wandplaat of binenndoos) laat hij tekstueel het keuzemenu zien van de eerste gekozen lisp als je erna op de andere button klikt.
wat vreemd is aangezien het toch echt een andere defun commando is. Maar dat ga ik gaande weg nog wel even bekijken want wat er in de tekening komt te staan klopt namelijk wel.
gr
Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: Vonk op vr 05 02 2016, 10:54:23
Beste
Om op deze lisp nog even terug te komen.
Ik heb aan de lisp onderstaande regel toegevoegd zodat ik bij een enter het commando
van deze lisp weer kan herhalen. Dat werkt prettig met
(setvar "cmdecho" cmde)
Nu moet ik vervolgens wel een afwijkende waarde van het keuzemenu opnieuw invoeren
bij het herhalen van het commando.
Gevraagd werkende breedte 1035, deze wijzig ik in bijvoorbeeld 1064
V verticaal of H horizontaal(V is standaard) deze wijzig ik in H horizontaal.
bij afsluiten en opnieuw openen van het commando in dezelfde tekening
Moet ik dit weer opnieuw invullen.
Kan dit ook met een soortgelijk commando als cmdecho dat hij de laatst ingevoerde waarde onthoudt?
Zo ja waar moet ik dit in de lisp plaatsen?
Ben Benieuwd of het zo duidelijk is? gr Armand

Titel: Re: hoeveelheden bepalen aantal en lengte
Bericht door: EddyBeerke op za 06 02 2016, 22:37:59
Citaat van: roy_043 op di 25 08 2015, 09:12:23
Het simpelste is om deze regel (komt 2x voor):
(setq schaal (getvar "userr1"))
te vervangen door:
(setq schaal 50.0)
Waarbij ik niet weet of dat de juiste schaal is.
Je kunt idd niey zomaar een schaal opgeven... Kijk eerst eens naar de waarde die in userr1 ingevoerd wordt..
De code zou zo iets kunnen zijn: (setvar "userr1" waarde)
Waarbij waarde het geyal of variabele is.