xod
-
Posts
632 -
Joined
-
Last visited
-
Days Won
20
Posts posted by xod
-
-
I used with slight modifications the method that @Pixey indicated.
It is an example of a fast execution without tweaks. For example, the tie shows the flower petal in the original image.
Sure you can save the image without any problem, but I think it's best to process it yourself.- 1
-
You need something like that?
- 2
-
I always use this method:
-
On the plugins created with OptionBasedLibrary it is allowed to remember the location where the window is displayed:
Menu -> Remember Location
Too bad the development of this library has been abandoned. -
The code below provides information about the object on the canvas.
It seems to work correctly in all situations where the object is on a transparent layer and even if the layer is full of color.
However, if I have an filled area of 10000x7500px and even for smaller values of the surface containing a transparent vertical strip as in the image below, the error 'A new guard page for the stack cannot be created' appears and Pdn crashes.
I can't figure out how to solve this.Spoiler// Name: MeasureTheObject // Submenu: // Author: // Title: MeasureTheObject // Version: // Desc: // Keywords: // URL: // Help: #region UICode ColorWheelControl Amount1 = ColorBgra.FromBgr(0,0,0); // [PrimaryColor!] Font color DoubleSliderControl Amount2 = 0.75; // [0.1,5] Font scale CheckboxControl Amount3 = false; // [0,1] Bounding box of object #endregion private PdnRegion _measureObject; public int x, y, x1, xp1, xp2, yp1, yp2, y1, x2, y2, cx, cy, xPos, yPos, newx, newy, sTop, sBot, sLeft, sRite, width, height, _canvasWidth, _canvasHeight; void Render(Surface dst, Surface src, Rectangle rect) { Rectangle sel = EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt(); Size selSize = EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt().Size; _canvasWidth = selSize.Width; _canvasHeight = selSize.Height; sTop = sel.Top; sBot = sel.Bottom; sLeft = sel.Left; sRite = sel.Right; int fontH = (int)(Amount2 * sel.Height/50); int fontHoffset = fontH + fontH/2; GetMeasureOfObject(); Rectangle obj = _measureObject.GetBoundsInt(); x1 = obj.Left; y1 = obj.Top; x2 = obj.Right - 1; y2 = obj.Bottom - 1; width = obj.Width; height = obj.Height; Point topLeftCorner = new Point (x1, y1); Point topRiteCorner = new Point (x2, y1); Point botLeftCorner = new Point (x1, y2); Point botRiteCorner = new Point (x2, y2); int cx = x1 + width/2; int cy = y1 + height/2; dst.CopySurface(src, rect.Location,rect); using (Font txtFont = new Font("Tahoma", fontH, FontStyle.Regular)) using (SolidBrush txtBrush = new SolidBrush(Amount1)) using (SolidBrush fillBrush = new SolidBrush(Color.FromArgb(64,255,0,0))) using (Pen pen = new Pen(Color.Red, 1)) using (RenderArgs ra = new RenderArgs(dst)) { Graphics g = ra.Graphics; g.Clip = new Region(rect); g.SmoothingMode = SmoothingMode.AntiAlias; g.TextRenderingHint = TextRenderingHint.AntiAlias; StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Near; format.LineAlignment = StringAlignment.Near; if(width == 0 || height == 0) { g.DrawString("Empty layer. There is no object.", txtFont, txtBrush, topLeftCorner, format); } else if(width == _canvasWidth && height == _canvasHeight) { g.DrawString("The object has the size of the layer.", txtFont, txtBrush, topLeftCorner, format); } else { //topleft corner format.Alignment = StringAlignment.Near; format.LineAlignment = StringAlignment.Near; g.DrawString("x:" + x1.ToString(), txtFont, txtBrush, topLeftCorner, format); g.DrawString("y:" + y1.ToString(), txtFont, txtBrush, x1, y1 + fontHoffset, format); //top right corner format.Alignment = StringAlignment.Far; format.LineAlignment = StringAlignment.Near; g.DrawString("x:" + x2.ToString(), txtFont, txtBrush, topRiteCorner, format); g.DrawString("y:" + y1.ToString(), txtFont, txtBrush, x2, y1 + fontHoffset, format); //bottom right corner format.Alignment = StringAlignment.Far; format.LineAlignment = StringAlignment.Far; g.DrawString("x:" + x2.ToString(), txtFont, txtBrush, x2, y2 - fontHoffset, format); g.DrawString("y:" + y2 .ToString(), txtFont, txtBrush, botRiteCorner, format); //bottom left corner format.Alignment = StringAlignment.Near; format.LineAlignment = StringAlignment.Far; g.DrawString("x:" + x1.ToString(), txtFont, txtBrush, x1, y2 - fontHoffset, format); g.DrawString("y:" + y2.ToString(), txtFont, txtBrush, botLeftCorner, format); //width and height format.Alignment = StringAlignment.Center; format.LineAlignment = StringAlignment.Center; g.DrawString("width:" + width.ToString() + "px", txtFont, txtBrush, cx, cy, format); g.DrawString("height:" + height.ToString() + "px", txtFont, txtBrush, cx, cy + fontHoffset, format); if(Amount3) { //g.DrawRectangle (pen, x1, y1, width, height); g.FillRectangle(fillBrush, x1, y1, width, height); } } } } private void GetMeasureOfObject() { if (_measureObject == null) { Surface src = EnvironmentParameters.SourceSurface; Rectangle sel = EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt(); int left = sel.Left; int right = sel.Right; int top = sel.Top; int bottom = sel.Bottom; _measureObject = new PdnRegion(Rectangle.Empty); for (int y = top; y < bottom; y++) { for (int x = left; x < right; x++) { if (src[x, y].A > 0) { int xinit = x; do { x++; } while (x < right && src[x, y].A > 0); _measureObject.Union(new Rectangle(xinit, y, x - xinit, 1)); } } } } }
-
You must to split the text in 2 section before run Trail.
1. Run Text Distortion into one empty layer an type ..........KAT (10 dots before)
the setings is:
]2. Run Text Distortion into another one empty layer an type LEEN..........(10 dots after)
the setings is:3. Cut the dots into the both layers using Rectangle Select tool
4. Outline the text 1 pixel
5. Run Trail plugin in the KAT text layer with default settings and uncheck Fade out
6. Run Trail plugin in the LEEN text layer, change direction to 180 degree and uncheck Fade out
7. Merge layer down- 1
- 2
-
I updated the Align + plugin. See the first post.
The code below does not belong to me, I just adapted it for PDN.
Spoiler// Name: ShapesPattern // Submenu: Render // Author: Rod Stephens // Title: ShapesPattern // Version: 1.0 // Desc: // Keywords: // URL: // Help: #region UICode IntSliderControl Amount1 = 20; // [3,20] Shape sides DoubleSliderControl Amount2 = 90; // [0,200] Offset IntSliderControl Amount3 = 1; // [0,5] Repeat shape DoubleSliderControl Amount4 = 1; // [0.05,10] Shape size AngleControl Amount5 = 90; // [-180,180] Rotate ColorWheelControl Amount6 = ColorBgra.FromBgra(0,0,255,64); // [Red?] Color IntSliderControl Amount7 = 1; // [0,10] Outline thickness CheckboxControl Amount8 = false; // [0,1] Clear background CheckboxControl Amount9 = false; // [0,1] Fill polygons (Decrease Alpha slider) #endregion void Render(Surface dst, Surface src, Rectangle rect) { Rectangle selection = EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt(); dst.CopySurface(src,rect.Location,rect); int CenterX = ((selection.Right - selection.Left) / 2) + selection.Left; int CenterY = ((selection.Bottom - selection.Top) / 2) + selection.Top; using (Graphics g = new RenderArgs(dst).Graphics) using (Region gClipRegion = new Region(rect)) using (SolidBrush brush = new SolidBrush(Amount6)) using (Pen pen = new Pen(Amount6, (float)Amount7)) { g.Clip = gClipRegion; g.SmoothingMode = SmoothingMode.AntiAlias; if(Amount8) g.Clear(Color.Transparent); PointF center = new PointF(CenterX, CenterY); float radius = Math.Min(CenterX, CenterY) * (float)Amount4; DrawShape(Amount3, g, brush, pen, center, radius); //g.DrawEllipse(Pens.Blue, CenterX - radius, CenterY - radius, 2 * radius, 2 * radius); } } // Draw the shape. private void DrawShape(int Amount3, Graphics g, SolidBrush brush, Pen pen, PointF center, float radius) { float scale = (float)(1.0 / (2.0 * (1 + Math.Cos(Math.PI/180 * Amount2)))); // If we are done recursing, draw the shape. if (Amount3 <= 0) { // Find the shape's corners. PointF[] points = GetShapePoints(center, radius); if(Amount9){g.FillPolygon(brush, points);} if(Amount7 > 0) {g.DrawPolygon(pen, points);} } else { // Find the smaller shape's centers. float d = radius - radius * scale; PointF[] centers = GetShapePoints(center, d); // Recursively draw the smaller shapes. foreach (PointF point in centers) { DrawShape(Amount3 - 1, g, brush, pen, point, radius * scale); } } } // Find the shape's corners. private PointF[] GetShapePoints(PointF center, float radius) { PointF[] points = new PointF[Amount1]; double theta = -Math.PI / 2 * Math.PI / 180 * Amount5 / Math.PI * 2; double dtheta = 2.0 * Math.PI / Amount1; for (int i = 0; i < Amount1; i++) { points[i] = new PointF( center.X + (float)(radius * Math.Cos(theta)), center.Y + (float)(radius * Math.Sin(theta))); theta += dtheta; } return points; }
- 3
-
Okay, I understand that people don't really use the official version (Align Object) because it's in the Object submenu.
So, I changed the name of the .dll- 1
-
@Seerose, to answer you I need more information. Be more specific.
-
That shouldn't happen.
For testing I placed it in the Object submenu.
In my case, the new plugin does not overwrite the existing one.
You probably have a different version of Align Object than the official one. -
This is an experimental plugin.
You need the two OptionBasedLibrary v0.7.9 files.
You can place it where you want by editing the Align+.dlc file.
In order to do that you need to change the extension to .txtOpen it with Notepad and edit the line:
AlignEffectPlugin.SubmenuName=your choise
Save and change the extension to .dlc- 2
- 2
-
-
There are lots of plugins that have not been explored by users.
I have found myself in this situation many times.
And you're right, 'Duotone Ink on Paper' works well without 'Cyanotypes'. -
You can try Kris Vandermotten plugins.
First run Cyanotype and after Duotone Ink on Paper.- 1
-
Ok, I got it. Thank you for the answers.
I really appreciate it your special work for the development of this mini-Visual Studio. -
What a shame. I liked the new features of renaming the AmountX variables.
I wonder if it's possible to do the same thing with the RadioButtonList or DropDownList options so that using 'switch variableX' we can use 'case variableX.name:' instead of 'case 0 :, case 1:' etc. -
CodeLab 4.3 does not retain CheckBox control checked / unchecked status ?
Reverted to v4.2 which works correctly.
-
On the same ideas I tried to make a plugin, but I did not finish it.
There are certain things that go beyond my abilities. If anyone wants to continue completing the plug-in, it's welcome.
-
Effects ► Color ► Unblend plugin crashes PDN if I run it on this image:
https://www.mediafire.com/file/sspp3e96h7g0pbm/H.zip/fileThe plugin can be found here:
https://forums.getpaint.net/topic/32165-unblend/
Exception details:System.InvalidOperationException: A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).
at System.Threading.Tasks.Task.Dispose(Boolean disposing)
at System.Threading.Tasks.Task.Dispose()
at ArgusPDN.Unblend.UnblendEffect.OnDispose(Boolean disposing)
at PaintDotNet.Menus.EffectMenuBase.RunEffectImpl(Type effectType) in D:\src\pdn\src\PaintDotNet\Menus\EffectMenuBase.cs:line 1171
at PaintDotNet.Menus.EffectMenuBase.TryRunEffect(Type effectType) in D:\src\pdn\src\PaintDotNet\Menus\EffectMenuBase.cs:line 773
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
-
This error occurs after I build a CodeLab plugin.
1. Choose the icon you want to appear in your plugin(16x16px).
2. Build the plugin
3. Close CodeLab
4. Open the icon and try to save itThe icon it can only be saved as SaveAs under another name.
Maybe something is broken in my OS?
Anyone else can reproduce this error?Otherwise, everything works correctly.
-
This error sometimes appears in the Show Error List panel.
Errors do not occur all at once but one at a time as I open the .cs files.
I may have some broken registers because I was infected with malware Mail.Ru.Thank you for your patience.
-
Here you can see an example:
-
It seems like I made a big mistake erasing the files in the Temp folder. Now I get other errors:
The file 'C:\Users\username\AppData\Local\Temp\msivfglx.err' already exists.
The file 'C:\Users\username\AppData\Local\Temp\msivfglx.out' already exists.
Could not find file 'C:\Users\username\AppData\Local\Temp\0idvvdim.dll'.Unhandled Exception at line 0:
System.NullReferenceException: Object reference not set to an instance of an object.
at PreviewEffectEffect.PreviewEffectEffectPlugin.OnSetRenderInfo(PropertyBasedEffectConfigToken newToken, RenderArgs dstArgs, RenderArgs srcArgs)
at PaintDotNet.Effects.Effect`1.OnSetRenderInfo(EffectConfigToken parameters, RenderArgs dstArgs, RenderArgs srcArgs) in D:\src\pdn\src\Effects\Effect`1.cs:line 68
at PaintDotNet.Effects.CodeLab.OnSetRenderInfo(EffectConfigToken parameters, RenderArgs dstArgs, RenderArgs srcArgs)
Could not load file or assembly '0 bytes loaded from System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. An attempt was made to load a program with an incorrect format.I ran sfc / scannow and everything seems OK. All other programs run correctly except CodeLab.
-
No, and I checked in the Temp folder, the .dll files are there.
Perhaps the PC needs a restart.
Unfinished plugins
in Plugin Developer's Central
Posted · Edited by xod
Replaced with a new version. Added more options.
This plugin allows you to write text along a curve.
There are only four control points.
The plugin is located in Effects -> Text Formations.
As usual, you need the two OptionBasedLibrary v0.7.9.dlc and OptionBasedLibrary v0.7.9.dll files.
Download