yoin

EddyBeerke

Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Rubke10

EddyBeerke en Roy_043, ik heb veel over jullie oplossingen nagedacht en geëxperimenteerd maar heb helaas nog steeds niet de juiste oplossing kunnen vinden.
Graag zou ik mijn vraag nogmaals bij jullie onder de aandacht willen brengen.

Het probleem is als volgt:
Ik heb zo'n 300 á 400 ingeregeld op verschillende schaalniveau's. Nu voeg ik later een laag toe met de naam ''test''. Deze laag zou ik niet geplot willen hebben in al mijn viewports met het schaalniveau 1:20. Ik ben er achter dat ik wel een nieuwe laag aan kan maken welke in alle viewports wordt bevroren ('new layer VP frozen in all viewports'), echter moet dit alleen in de viewports schaal 1:20 zijn.

Een andere methode zou zijn waarbij Autocad automatisch alle viewports in mijn tekening opent die het schaalniveau 1 op 20 hebben. In elke viewport zou Autocad dan een commando uit moeten voeren waarbij de laag ''test'' wordt bevroren d.m.v. VPLAYER --> Freeze.
Dit omdat ik anders alle 300 á 400 viewports handmatig moet openen de laag ''test'' handmatig moet bevriezen.

Ik hoop mijn probleem zo duidelijk omschreven te hebben.

roy_043

Jouw probleem is en was duidelijk.

Citaat van: Rubke10 op wo 07 07 2010, 16:49:04Zou iemand mij op weg kunnen helpen met het schrijven van zo'n lisp??
Maar wat versta jij onder op weg helpen?

De code hieronder brengt je nog iets dichter bij de finish:
; (SelScaledViewports 0.05) ; retourneert een lijst met de enames van alle viewports waarvoor geldt: schaal=1:20
(defun SelScaledViewports (scale / ss i ent entLst result)
  (if (setq ss (ssget "_X" '((0 . "VIEWPORT"))))
    (progn
      (setq i -1)
      (repeat (sslength ss)
        (setq ent (ssname ss (setq i (1+ i))))
        (setq entLst (entget ent))
        (if (equal (/ (cdr (assoc 41 entLst)) (cdr (assoc 45 entLst))) scale 0.00000001)
          (setq result (cons ent result))
        )
      )
      result
    )
  )
)

Rubke10

Beste Roy,

Wat is op weg helpen? Dat is inderdaad een goeie vraag.

Wij zijn maar een klein kantoor met 2 tekenaars en zitten echt al weken te brainstormen heo we dit probleem op kunnen lossen. We zijn niet goed in het schrijven van Lisps, echter is het ons wel ooit gelukt om een simpele lisp te schrijven maar dit gaat onze pet te boven.

We hebben jouw code in een kale Lips gezet en deze ingeladen in Autocad met appload. Wat zou deze Lisp moeten doen? En hoe krijgen we deze Lisp werkend?

Wij vragen onszelf af of het niet op een eenvoudigere manier kan dan door het schrijven van een Lisp. Autocad zou toch iets ingebouwd moeten hebben waarbij een laag gerelateerd is aan een annotation scale in de layer manager. Hierbij zou dan de laag test zichtbaar gemaakt kunnen worden op schaalniveau 1:20 wel en 1:100 niet. Het lijkt ons een gemiste kans als dit niet het geval is.


bart

De lisp maakt volgens de beschrijving een lijst met de viewports die 1:20 zijn ingesteld.

lees de waarde van result maar eens uit na het uitvoeren van de lisp
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

roy_043

#20
Allez, vooruit dan. Bijgevoegd VPFreezeScale.lsp.

Rubke10

#21
Hartelijk dank voor de lisp Roy_043.

Helaas werkt hij nog niet helemaal goed bij ons. Wij krijgen de volgende melding:

vpfs

Naam van de laag <test 2 1 op 100>:

Schaal van de viewports waarin test 2 1 op 100 bevroren moet worden: 1:20
; error: no function definition: VLAX-ENAME->VLA-OBJECT


Doen wij iets niet helemaal goed??

PS: wij hebben gezien dat je de lisp nog een keer hebt gewijzigd. We hebben de lisp nogmaals gedownload maar krijgen nog dezelfde foutmelding.

roy_043

Ik was (vl-load-com) vergeten. Bijgevoegd de nieuwe versie.

Rubke10

Het ziet er veelbelovend uit!

Helaas geeft Autocad nu de melding dat het schaalniveau niet in paperspace voor komt. Dit terwijl wij meerdere viewports in de paperspaces hebben zitten welke zijn ingesteld op viewportscale 1:20 en annotationscale 1:20.

Dit is de melding:

Command: vpfs

Naam van de laag <test>:

Schaal van de viewports waarin test bevroren moet worden: 1:20
; error: Automation Error. Not in paperspace



Doen wij iets fout?

roy_043

#24
In Bricscad krijg ik deze melding niet.
Het probleem wordt mogelijk veroorzaakt door de functie VPFreeze van CadDog. In VPFreezeScale_C.lsp zijn 2 regels in deze functie uitgecommentarieerd. Verder is de functie SelScaledViewports iets aangepast.
Hopelijk werkt het.

Rubke10

#25
Het werkt!!!!!!!!!  Onze hartelijke dank hiervoor!! :D :D :D :vreegoe: :vreegoe:

Deze lisp doet wat wij willen!  :vreegoe:

Maar toch verbaast het ons dat bij de layer manager niet de optie zit om per laag toe te kennen in welke annotationscale of viewportscale deze zichtbaar moet zijn.

EddyBeerke

Misschien in een nieuwere versie.
Stel het voor bij Autodesk
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Rubke10

Roy-043 nogmaals bedankt voor je oplossing  :vreegoe:

Wij blijven ondertussen verder brainstormen over dit onderwerp!

Ps Eddy, ze zullen bij autodesk toch wel zo slim zijn dat ZIJ deze site in de gaten houden.

:D