VectorWorks forum: Seteditreal / Setrfield - VectorWorks forum

Ga naar inhoud

Pagina 1 van 1

Seteditreal / Setrfield

#1 Gebruiker is offline   CarpeDM 

  • Expert
  • Groep: Members
  • Posts: 302
  • Lid geworden: 19-January 08
  • Gender:Male
  • Stad:België

Gepost 21 April 2015 - 10:43 PM

Iemand een idee hoe ik de ingevulde waarden onder 'Knop A' (EditReal - Gegevens X, Y & Z) kan behouden nadat ik de dialoog heb afgesloten?
Met onderstaand script gaan de gegevens ergens verloren in het dialoogvenster, maar ik zie niet waar.
Dank bij voorbaat.

PROCEDURE Script;
CONST
	Bevestig		= 01;
	Annuleer		= 02;
	Reset_PIO		= 03;
	k_Icoon			= 05;
	PIO_Bepaalt_Palet	= 08;
	k_Paletknop		= 35;
VAR
	PIO_N			: STRING;
	PIO_H, PIO_R, PIO_W	: HANDLE;
	Event, Uitkomst		: LONGINT;
	Bool			: BOOLEAN;
	Dial_ID, Dial_Res	: INTEGER;
	Geg_X, Geg_Y, Geg_Z	: REAL;

	PROCEDURE Resultaat_A;
	BEGIN
		IF GetCustomObjectInfo (PIO_N, PIO_H, PIO_R, PIO_W) THEN
		BEGIN
			Rect (0, 0, pGeg_A, pGeg_B );
			Message (GetRField (PIO_H, 'Rec_N', 'Gegeven X'));
		END;
	END;

	PROCEDURE Resultaat_B;
	BEGIN
	END;

	PROCEDURE Records;
	BEGIN
		NewField ('Rec_N', 'Gegeven X', Concat (Geg_X), 9, 0);
		NewField ('Rec_N', 'Gegeven Y', Concat (Geg_Y), 9, 0);
		NewField ('Rec_N', 'Gegeven Z', Concat (Geg_Z), 9, 0);
	END;

	PROCEDURE Dialoog_A;
		PROCEDURE Layout_Dialoog_A;
		BEGIN
			Dial_ID		:= CreateResizableLayout ('Dialoog A', TRUE, 'Bevestig', 'Annuleer', TRUE, TRUE);
				CreateCheckBox		(Dial_ID, 100, 'Doe iets');
				CreateStaticText	(Dial_ID, 110, 'Gegeven X:', 20);
				CreateEditReal		(Dial_ID, 111, 3, Geg_X, 20);
				CreateStaticText	(Dial_ID, 120, 'Gegeven Y:', 20);
				CreateEditReal		(Dial_ID, 121, 3, Geg_Y, 20);
				CreateStaticText	(Dial_ID, 130, 'Gegeven Z:', 20);
				CreateEditReal		(Dial_ID, 131, 3, Geg_Z, 20);

				SetFirstLayoutItem	(Dial_ID, 100);
				SetBelowItem		(Dial_ID, 100, 110, 0, 0);
				SetRightItem		(Dial_ID, 110, 111, 0, 0);
				SetBelowItem		(Dial_ID, 110, 120, 0, 0);
				SetRightItem		(Dial_ID, 120, 121, 0, 0);
				SetBelowItem		(Dial_ID, 120, 130, 0, 0);
				SetRightItem		(Dial_ID, 130, 131, 0, 0);
		END;

		PROCEDURE Handelingen_Dialoog_A (VAR Item, Data: LONGINT);
			PROCEDURE Instellingen_Dialoog_A;
			BEGIN
				Bool	:=	GetEditReal (Dial_ID, 111, 3, Geg_X);
				Bool	:= 	GetEditReal (Dial_ID, 121, 3, Geg_Y);
				Bool	:= 	GetEditReal (Dial_ID, 131, 3, Geg_Z);
			END;

			PROCEDURE Bevestig_Handelingen;
			BEGIN
				IF GetCustomObjectInfo (PIO_N, PIO_H, PIO_R, PIO_W) THEN
				BEGIN
					Bool	:= GetEditReal (Dial_ID, 111, 3, Geg_X);
					Bool	:= GetEditReal (Dial_ID, 121, 3, Geg_Y);
					Bool	:= GetEditReal (Dial_ID, 131, 3, Geg_Z);

					AlrtDialog (Concat (Geg_X));

					SetRField (PIO_H, 'Rec_N', 'Gegeven X'	, Concat (Geg_X));
					SetRField (PIO_H, 'Rec_N', 'Gegeven Y'	, Concat (Geg_Y));
					SetRField (PIO_H, 'Rec_N', 'Gegeven Z'	, Concat (Geg_Z));
				END;
			END;

			PROCEDURE Annuleer_Handelingen;
			BEGIN
			END;
		BEGIN
			CASE Item of SetUpDialogC: Instellingen_Dialoog_A;
				01	: Bevestig_Handelingen;
				02	: Annuleer_Handelingen;
			END;
		END;
	BEGIN
		Layout_Dialoog_A;
		IF VerifyLayout (Dial_ID) THEN Dial_Res := RunLayoutDialog (Dial_ID, Handelingen_Dialoog_A);
	END;

	PROCEDURE Dialoog_B;
	BEGIN
		AlrtDialog ('Hier gebeurt er niets');
	END;

BEGIN
	vsoGetEventInfo (Event, Uitkomst);
	CASE Event OF
		k_Icoon:
		BEGIN
			Bool	:= SetObjPropVS (PIO_Bepaalt_Palet, TRUE);
			Bool	:= vsoInsertAllParams;
			Bool	:= vsoAppendWidget (12, 100, 'Knop A', 0);
			Bool	:= vsoAppendWidget (12, 200, 'Knop B', 0);
		END;

		k_Paletknop:
		CASE Uitkomst OF
			100:	Dialoog_A;
			200:	Dialoog_B;
		END;

		Reset_PIO:
		IF GetCustomObjectInfo (PIO_N, PIO_H, PIO_R, PIO_W) THEN
		BEGIN
			PushAttrs;
				Resultaat_A;
				Resultaat_B;
				Records;
				Record (PIO_H, 'Rec_N');
			PopAttrs;
		END;
	END;
END;
RUN (Script);

MacBookPro
Mac OS X.10.11 - El Capitan
VW 2017 - Standaard
Cinema4D R18 - Visualize
0

#2 Gebruiker is offline   hippothamus 

  • Forum Kenner
  • Groep: Members
  • Posts: 97
  • Lid geworden: 14-November 12
  • Gender:Male
  • Stad:Hasselt

Gepost 23 April 2015 - 10:43 AM

Als ik het goed heb is REC_N niet het parametrisch record ?
In dat geval ben je vergeten het expliciet vast te hangen aan je object. VS:SetRecord
Vectorworks 2013
Windows 7 64 bit; i5-2400 CPU 3.10 Ghz; 4Gb Ram
0

#3 Gebruiker is offline   CarpeDM 

  • Expert
  • Groep: Members
  • Posts: 302
  • Lid geworden: 19-January 08
  • Gender:Male
  • Stad:België

Gepost 24 April 2015 - 07:27 PM

In eerste instantie was ik van mening dat de procedure " Record (PIO_N, 'Rec_N') " de record aan de PIO zou hangen (vervangt een bestaande record door de de nieuwe versie van dezelfde record volgend de F. R.) en dat lukte ook wel degelijk, de record hangt aan de PIO.
Het lukte me echter niet om de ingevulde waarden onder de EditReal-velden op te slaan in EditReal-velden in de dialoog.

Nu heb ik er dus ook nog eens de procedure " SetRecord (PIO_N, 'Rec_N') " aan toegevoegd (op verschillende plaatsen in het script), de " Record (PIO_N, 'Rec_N') "-procedure vervangen door de SetRecord-procedure en dies meer, maar nog steeds zonder het gewenste resultaat.
Ik vermoed dat ik ergens in dit script aan de PIO de opdracht geef om de EditReal-waarden zonder meer steeds te vervangen door " 0mm " als ik op 'Knop A" duw in het info-pallet.

Moet ik de PIO nergens vertellen dat hij de ingevulde waarden moet onthouden tot ze terug veranderd worden via de 'Knop A'-dialoog?

Edit:
Enne ... merci en een gelukkige verjaardag, hé.
MacBookPro
Mac OS X.10.11 - El Capitan
VW 2017 - Standaard
Cinema4D R18 - Visualize
0

#4 Gebruiker is offline   hippothamus 

  • Forum Kenner
  • Groep: Members
  • Posts: 97
  • Lid geworden: 14-November 12
  • Gender:Male
  • Stad:Hasselt

Gepost 24 April 2015 - 09:25 PM

Als ik even de volgorde van je code bekijk:

- Je voegt bij elke reset opnieuw de drie recordvelden toe aan het record. Een record dien je maar eenmalig aan te maken. Je kan bijvoorbeeld eerst kijken of het reeds bestaat. Ben wel niet zeker of dat nadelig is.
- Bij elke reset ga je door het record opnieuw toe te voegen met Record(Pio_H,'Rec_N') ook je vorige gegevens wissen want je plaatst een nieuw leeg record, of allesinds de standaardwaarden. Ik zou hier eerder kijken of het reeds toegevoegd is, enkel indien niet het record vasthangen aan je object.
- Je haalt nergens de vorige opgeslagen waarden op. Bijvoorbeeld bij het aanmaken van je dialoog gebruik je Geg_X etc zonder deze parameter eerst iets toe te kennen. GetRField op je custom record zodat je dialoog begint bij de vorige waarden ?

Mercikes ;)/>
Vectorworks 2013
Windows 7 64 bit; i5-2400 CPU 3.10 Ghz; 4Gb Ram
0

Deel dit topic:


Pagina 1 van 1

1 Gebruiker(s) lezen dit topic
0 gebruikers, 1 gasten, 0 anonieme gebruikers