dotNet UI

Become a member of the CGSociety

Connect, Share, and Learn with our Large Growing CG Art Community. It's Free!

REPLY TO THREAD
 
Thread Tools Search this Thread Display Modes
Old 11 November 2011   #61
Sure, glad to help.

Btw, I recently wrote a c# spinner control which mimics the behaviour of the 3dsmax spinner control, I'll try to post it here.
 
Old 11 November 2011   #62
Improvment

An improvement on that above script would be to put it into a struc.
__________________
____________ ___ __ _
John A. Martini
JokerMartini@hotmail.com
www.JokerMartini.com
 
Old 11 November 2011   #63
Rotem
Speaking of c# I spent my freetime in the past day converting the maxscript .net stuff over to complete standalone c# in visual studio.
It's completed and working. I've attached the Spacer.exe file.

If anyone wants me to I'd be more than welcome to uploading a zip file which would contain the entire visual studio build if anyone would like to modify it or add to it.

As mentioned above the script right now does not have max like spinners in it but if someone wants to add that they are more then welcome to. Just let me know and I'll upload the zip.

Check it out.


UPDATE
ButtonSpacerV6.zip is the visual studio build/files

Thanks
John
__________________
____________ ___ __ _
John A. Martini
JokerMartini@hotmail.com
www.JokerMartini.com
 
Old 11 November 2011   #64
cool.. good job
 
Old 11 November 2011   #65
Great stuff! Cheers for attaching the files. I'm very comfortable with maxscript / dotNet but have very little experience with c#, I'll have a look through this as an example. Thanks for all the work you guys have put in to this thread. It's got some really great info within it
 
Old 11 November 2011   #66
Here's the max-style spinner I mentioned.
I just noticed that LoneRobot had already built a similar class ages ago. Hope this is useful to anyone in any case...
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

public class MaxSpinner : NumericUpDown
{
    private bool dragging;
    private Point dragPoint;
    private decimal dragValue;
    private decimal defaultValue;

    public float FloatValue
    {
        get { return (float)Value; }
        set { Value = (decimal)value; }
    }

    public float DefaultValue
    {
        get { return (float)defaultValue; }
        set { defaultValue = (decimal)value; }
    }

    public MaxSpinner()
    {
        dragging = false;
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        if (Controls[0].Bounds.Contains(e.Location))
        {
            if (e.Button == MouseButtons.Left)
            {
                dragging = true;
                dragPoint = e.Location;
                dragValue = Value;
            }
            else if (e.Button == MouseButtons.Right)
            {
                Value = Math.Min(Math.Max(defaultValue,Minimum),Maximum);
            }
        }
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        if (dragging)
        {
            Value = Math.Min(Math.Max(dragValue + (dragPoint.Y - e.Location.Y) * Increment ,Minimum),Maximum);
        }
    }

    protected override void OnMouseUp(MouseEventArgs mevent)
    {
        base.OnMouseUp(mevent);
        if (dragging)
        {
            dragging = false;
        }
    }

    public void Clear()
    {
        Text = String.Empty;
    }
}


Because maxscript converts decimals to integers instead of to floats, I've added the .FloatValue to get the property of the spinner without it being cast to an integer.
 
Old 11 November 2011   #67
Thanks Tim and Rotem

Thanks guys for keeping the thread going and helping me out as well as everyone else.

This thread is just getting started.
I'm going to keep going with the dotNet stuff like I mentioned above and further develop examples for everyone to learn from.

The c# version of the script is actually the first every script I built in vs. So it was a very cool and fun learning process to take something I originally wrote in a google doc excel > maxscript rollout > dotNet form > standalone c# exe. All in a matter of a feww weeks.

I've learned a ton of information and techniques as well as coding formats.
I'll be posting more stuff on my site in the future on notes for c# for anyone who may be interested in learning it. It's rather pretty straight forward and easy to transition to if you know maxscript.

If anyone does end up modifying or adding to the build I'd love to check it out.
__________________
____________ ___ __ _
John A. Martini
JokerMartini@hotmail.com
www.JokerMartini.com
 
Old 11 November 2011   #68
Originally Posted by lo: Here's the max-style spinner I mentioned.
I just noticed that LoneRobot had already built a similar class ages ago. Hope this is useful to anyone in any case...
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

public class MaxSpinner : NumericUpDown
{
    private bool dragging;
    private Point dragPoint;
    private decimal dragValue;
    private decimal defaultValue;

    public float FloatValue
    {
        get { return (float)Value; }
        set { Value = (decimal)value; }
    }

    public float DefaultValue
    {
        get { return (float)defaultValue; }
        set { defaultValue = (decimal)value; }
    }

    public MaxSpinner()
    {
        dragging = false;
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        if (Controls[0].Bounds.Contains(e.Location))
        {
            if (e.Button == MouseButtons.Left)
            {
                dragging = true;
                dragPoint = e.Location;
                dragValue = Value;
            }
            else if (e.Button == MouseButtons.Right)
            {
                Value = Math.Min(Math.Max(defaultValue,Minimum),Maximum);
            }
        }
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        base.OnMouseMove(e);
        if (dragging)
        {
            Value = Math.Min(Math.Max(dragValue + (dragPoint.Y - e.Location.Y) * Increment ,Minimum),Maximum);
        }
    }

    protected override void OnMouseUp(MouseEventArgs mevent)
    {
        base.OnMouseUp(mevent);
        if (dragging)
        {
            dragging = false;
        }
    }

    public void Clear()
    {
        Text = String.Empty;
    }
}


Because maxscript converts decimals to integers instead of to floats, I've added the .FloatValue to get the property of the spinner without it being cast to an integer.


Thanks Rotem for the contribution!
I'll add this to the c# build and be sure to credit you.
__________________
____________ ___ __ _
John A. Martini
JokerMartini@hotmail.com
www.JokerMartini.com
 
Old 11 November 2011   #69
dotNet Maxscript Spinner

here is a dotNet maxscript spinner.
credit - Paul Neal


--Create a dotNet form control.
form=dotNetObject "form"
form.bounds=(dotNetObject "system.drawing.rectangle" 10 10 150 100)

--Create a dotNet NumericUpDown control.
nud=dotNetObject "System.Windows.Forms.NumericUpDown"
nud.location=(dotNetObject "system.drawing.point" 10 10)
nud.DecimalPlaces=2
nud.Increment=.1
nud.maximum=100
nud.minimum=-10
nud.value=10
nud.ReadOnly=false

--This is needed so that we can type in the values as well as use the spinner. 
enableAccelerators=false

--Set variables to hold the mouse position and current value of the spinner. 
lastMousePos=0
curVal=0

--Mouse down function to set the variables above to the starting values. 
fn nudMouseDown sender arg=
(
	case arg.button of
	(
		--Check for the left mouse button
		(arg.button.left):
		(
			lastMousePos=(arg.location).y
			curVal=sender.value
		)
		--Check for the right mouse button
		(arg.button.right):
		(
			sender.value=0
		)
	)
)

--On mouseMove event
fn nudMouseMove sender arg=
(
	case arg.button of
	(
		--Check for the left mouse button. 
		(arg.button.left):
		(
			--Get the offset from the last position of the mouse
			mouseOffSetY=(lastMousePos-arg.location.y)*.1
			--Add that position to the curVal variable
			curVal=curVal+=mouseOffSetY
			
			--Check if the curVal is within limits of the spinner.
			if curVal>=sender.minimum and curVal<=sender.maximum do
			(
				--Set the value of the spinner
				sender.value=curVal
			)
			--Check if the value has gone above or below the min max values and set them.
				--This is needed if the value changes more rapidly then the spinner can react.
 			if curVal<=sender.minimum do sender.value=sender.minimum
 			if curVal>=sender.maximum do sender.value=sender.maximum
			
			--Set the lastMousePos value to the current value of the mouse. 
			lastMousePos=arg.location.y
		)
	)
)

--Create the event handlers
dotNet.addEventHandler nud "mouseDown" nudMouseDown
dotNet.addEventHandler nud "mouseMove" nudMouseMove
--Set the life time control of the spinner to be handled by dot net and not Max script. 
	--This stops garbage collections from deleting the event handlers. 
dotNet.setLifeTimeControl nud #dotNet

--Add the NumericUpDown to the form and show the form. 
form.controls.add nud
form.show()   
__________________
____________ ___ __ _
John A. Martini
JokerMartini@hotmail.com
www.JokerMartini.com
 
Old 11 November 2011   #70
SubRollout

So this is what I'm after and working on. I'm attempting to get some sort of subrollout system working. When the user clicks on that button it then loads that .ms file and its controls are then visible in the main dialogs Control Panel.

I tried created a controlPanel and nothing was seeming to show.
Think of it as the buttons at the top of the main dialog being tabs. The main reason I'm not using tabs is because I want to be able to create custom looking buttons and use them as tabs.

I've attached the wirecolor files as seen in the image if anyone wants to make an attempt at this. I'll be working on this more throughout the following days and seeing what I get. I'll be sure to post.

__________________
____________ ___ __ _
John A. Martini
JokerMartini@hotmail.com
www.JokerMartini.com
 
Old 11 November 2011   #71
here is some quick and dirty code that shows how you could do something like this
theform = dotnetobject "form"
theform.bounds = dotnetobject "system.drawing.rectangle" 200 200 300 300

--THIS CONTROL WILL ACT AS AN EMPTY SPACE TO HOST YOUR SUBPANELS IN
containerPanel = dotnetobject "panel"
containerPanel.bounds = dotnetobject "system.drawing.rectangle" 10 50 280 240

fn btnClicked s e = 
(
	containerPanel.controls.clear()
	containerPanel.controls.add s.tag
)

--SUB PANEL 1
subPanel1 = dotnetobject "panel"
subPanel1.backcolor = subpanel1.backcolor.green
subPanel1.bounds = dotnetobject "system.drawing.rectangle" 0 0 280 240

subButton1 = dotnetobject "combobox"
subButton1.bounds = dotnetobject "system.drawing.rectangle" 20 20 100 20

subPanel1.controls.add subButton1

--SUB PANEL 2
subPanel2 = dotnetobject "panel"
subPanel2.backcolor = subpanel2.backcolor.blue
subPanel2.bounds = dotnetobject "system.drawing.rectangle" 0 0 280 240

subButton2 = dotnetobject "button"
subButton2.text = "sub button 2"
subButton2.bounds = dotnetobject "system.drawing.rectangle" 20 20 100 20

subPanel2.controls.add subButton2

--MAIN FORM CONTROLS
btn1 = dotnetobject "button"
btn1.bounds = dotnetobject "system.drawing.rectangle" 20 20 100 30
btn1.text = "button 1"
btn1.tag = subPanel1
dotnet.addeventhandler btn1 "Click" btnClicked

btn2 = dotnetobject "button"
btn2.bounds = dotnetobject "system.drawing.rectangle" 140 20 100 30
btn2.text =  "button 2"
btn2.tag = subPanel2
dotnet.addeventhandler btn2 "Click" btnClicked

theForm.controls.addRange #(btn1,btn2,containerpanel)
theForm.show()
 
Old 11 November 2011   #72
Hey Guys!

Hey Guys,
I'm back in business. I was really busy this past week finishing up some projects and getting things wrapped up.

Feel free to check out one of my latest projects which I was CG Supervisor for.
A Very Harold and Kumar Christmas.

Aside from that. I've got a question. Is there an event for right-clicking a button?
I was unable to find anything in http://www.scriptspot.com/bobo/mxs9...rms.Button.html
__________________
____________ ___ __ _
John A. Martini
JokerMartini@hotmail.com
www.JokerMartini.com
 
Old 11 November 2011   #73
Originally Posted by JokerMartini: Aside from that. I've got a question. Is there an event for right-clicking a button?


you have to use MouseDown(MouseUp) event and check MouseEventArgs for button was pressed(released).
 
Old 11 November 2011   #74
I was wondering if anyone has treid to create a dot net control for creating an editable curve for a non linear control. I'm looking to replace reaction manager...
 
Old 11 November 2011   #75
Originally Posted by floatingworld: I'm looking to replace reaction manager...

wow! i'm not so tough...
 
reply share thread



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
CGSociety
Society of Digital Artists
www.cgsociety.org

Powered by vBulletin
Copyright 2000 - 2006,
Jelsoft Enterprises Ltd.
Minimize Ads
Forum Jump
Miscellaneous

All times are GMT. The time now is 09:48 AM.


Powered by vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.