FastFiber

systemvariables van viewport kloppen niet met de werkelijkheid

Gestart door delangstevandestraat, vr 27 05 2016, 11:46:40

Vorige topic - Volgende topic

roy_043

Citaat van: roy_043 op di 26 04 2016, 15:15:14
Ik raad je aan om naar deze functies te kijken:
vla-put-center
vla-put-height
vla-put-width
vla-put-target

Ik herhaal hier dit advies. Gebruik deze functies, pas de bestaande viewports aan, vermijd omslachtige code, en ga recht op je doel af!

delangstevandestraat

@roy

Het gaat eigenlijk voornamelijk over 'elektrische plannen' die bij aanpassingen nogal durven groeien of krimpen in de breedte, binnen het bedrijf streven we ernaar om de tekening altijd op A4-hoogte te houden.
Sommige tekeningen zijn echter wenselijk om onder elkaar getekend te worden, dan staat de
VP 90) gedraaid waardoor de 'lezer' van de afdruk dan ook zijn blad draait

Elektrische tekeningen vereisen geen UCS dus is die altijd world

hierdoor zijn er dus ook maar 2 twist instellingen nodig.

Voor alle andere gevallen waarin bovenstaande niet van toepassing is wordt de kaderaanpassing uitgevoerd met "vpincl" op 0 en gebeurt er niets met de VP...
Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

roy_043

Als je wilt vasthouden aan jouw code dan zijn er 2 oplossingen:

1. Zoals reeds genoemd: gebruik de trans functie.
Opslaan waarde:
(setq vpctr (trans (getvar "viewctr") 1 0))
Hergebruik waarde:
(trans vpctr 0 1)


2. Of, impliciet ook al genoemd, zorg dat het UCS bij het opslaan van de VIEWCTR waarde en het hergebruik van die waarde gelijk is:
...
(command "mspace")
(command "ucs" "w")
(setq vpctr (getvar "viewctr"))
....
(command "ucs" "w")
(command "_zoom" "c" vpctr vpheight)
...


Jammer dat je niet geïnteresseerd bent in de (betere) alternatieve oplossing.

delangstevandestraat

@roy

het gaat niet over 'willen vasthouden, of niet geinteresseeerd zijn, (want dan was ik hier niet) ik ben misschien wel blond maar nu ook niet zooo blond  :(

De code WERKT en goed ook, alleen in sommige tekeningen die reeds bestonden doet de code het één keer fout los van welke layout er eerst behandeld wordt

Heb je deze fout kunnen reproduceren zoals eerder beschreven ?
En is deze fout er dan niet met uw 'betere' oplossing, die ik niet ken ?

ik heb idd nog niet gewerkt met VLA- code, gewoon omdat ik daar heel weinig info over vind, hoe de syntax is enzo,...

afralisp enzo hebben me al elke keer kunnen op weg helpen en mijn programma's doen wat ik van ze verwacht

dus als je me kan vertellen waar ik duidelijke info vind over vla- code zal ik die zeker bekijken,

Maar zoals reeds vernoemd : de code werkt en doet het maar éééén keertje fout, en dan niet meer fout, dus zo'n probleem is het niet


Ik hou van werken,
ik kan er uuuren naar kijken...
daarom zorg ik ook dat er altijd genoeg overblijft voor morgen :-)

roy_043

Tegenvraag:
Heb je iets gedaan met de voorstellen in mijn vorige bijdrage?

roy_043

Voorbeeld code voor de alternatieve oplossing:
(defun _Geom_MidPoint (pt1 pt2)
  (mapcar '/ (mapcar '+ pt1 pt2) '(2.0 2.0 2.0))
)

(defun VpModify (obj pt1 pt2 / scl)
  (setq scl (vla-get-customscale obj))
  (vla-put-center obj (vlax-3d-point (_Geom_MidPoint pt1 pt2)))
  (vla-put-width obj (abs (- (car pt1) (car pt2))))
  (vla-put-height obj (abs (- (cadr pt1) (cadr pt2))))
  (vla-put-customscale obj scl)
)

(defun c:Test ( / enm obj pt1 pt2)
  (if
    (and
      (setq enm (car (entsel "\nSelect a VP: ")))
      (setq obj (vlax-ename->vla-object enm))
      (= "AcDbViewport" (vla-get-objectname obj))
      (setq pt1 (getpoint "\nPoint 1: "))
      (setq pt2 (getcorner pt1 "\nPoint 2: "))
    )
    (VpModify obj (trans pt1 1 0) (trans pt2 1 0))
  )
  (princ)
)