Generate Thumbnail

Circles & lines in SkiaSharp

Setting Up SkiaSharp 1 #r "nuget:SkiaSharp" Importing namespace to use Skia library 1 using SkiaSharp; Points On circle This function will calculate points on circle and return as list of Points I Depends on number of points we wants to find out on circle Radius of Circle r Center of circle where is it located (x, y) 1 2 3 4 5 6 7 8 9 SKPoint[] CirclePoints(int n,float radius=3,float x=0, float y=0 ) { float degree = (float)(2*Math.PI/n); return Enumerable .Range(1,n) .Select(i=>degree*i) .Select(i=>(new SKPoint(x+ radius *(float)Math.Cos(i), y+ radius *(float)Math.Sin(i)))) .ToArray(); } Line points This Function will first Get all points on circle Then pair the all point with each other as Line Segment Require two Cordinate points one starting point and other end 1 2 3 4 5 6 7 8 9 10 11 12 13 14 List<(SKPoint,SKPoint)> GetAllLinePoints(int n,int radius=3,float x=0, float y=0 ) { var arr =CirclePoints(n:n,x:x,y:y, radius:radius); var ls = new List<(SKPoint, SKPoint)>(); for(var i =0; i<arr.Length; i++) { for(var j=i+1; j<arr.Length;j++) { ls.Add((arr[i],arr[j])); } } return ls; } All Circle This Function will give us all circular points 1 2 3 4 5 6 7 8 9 10 11 12 13 14 List<(float X,float Y)> GetCenter(int m, int n,int radius=60) { var ls =new List<(float X,float Y)>(); int X = radius*3; int Y = radius*3; for(var i=1; i<m;i++) { for(var j=1; j<n;j++) { ls.Add((Y*i,X*j)); } } return ls; } List of random Precalculated hex value 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 var listOfColor = new List<SKColor> { SKColor.Parse("#EEF5FF"), SKColor.Parse("#B4D4FF"), SKColor.Parse("#86B6F6"), SKColor.Parse("#176B87"), SKColor.Parse("#00A9FF"), SKColor.Parse("#89CFF3"), SKColor.Parse("#A0E9FF"), SKColor.Parse("#CDF5FD"), SKColor.Parse("#FF90BC"), SKColor.Parse("#FFC0D9"), SKColor.Parse("#F9F9E0"), SKColor.Parse("#8ACDD7"), SKColor.Parse("#F2AFEF"), SKColor.Parse("#C499F3"), SKColor.Parse("#33186B"), }; Final Code to ustiliase all above function 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 // Image size (pixels) int WIDTH = 1920; int radius =60; Random random = new Random(); SKBitmap bmp = new(1280, WIDTH); SKCanvas canvas = new(bmp); canvas.Clear(SKColor.Parse("#fff")); SKPaint paint = new() { Color = SKColors.White.WithAlpha(100), IsAntialias = true , StrokeWidth = 1, ColorF = SKColor.Parse("#000000"), Style = SKPaintStyle.Stroke }; var ls = GetCenter(10,7,radius); for(var n=3;n<=26;n++) { float X = ls[n-3].Y; float Y = ls[n-3].X; paint.ColorF =listOfColor[random.Next(0,listOfColor.Count)]; foreach(var i in GetAllLinePoints(n:n,x:X,y:Y, radius:radius)) { canvas.DrawLine(i.Item1,i.Item2,paint); canvas.DrawText($"{n} Points",X-20,Y+80,paint); } canvas.DrawCircle(X,Y,60,paint); } bmp.Display() Image Generated using above Code

August 3, 2024 · 2 min · 403 words · PrashantUnity
Download Logo

Math in C# (Ch. 4)

C# Basic Operations and Type Conversions Basic Operations In C#, you can perform various arithmetic operations using standard operators. Here are some examples: 1 2 3 4 5 6 int additionResult = 10 + 5; // result will be 15 int subtractionResult = 20 - 8; // result will be 12 int multiplicationResult = 7 * 4; // result will be 28 int divisionResult = 15 / 3; // result will be 5 int remainder = 17 % 5; // remainder will be 2 float floatDivisionResult = 15f / 4f; // result will be 3.75 Understanding Assignment in Programming In general mathematics, equality signifies that the expression on the left side of the = is equivalent to the expression on the right side: ...

June 18, 2024 · 2 min · 417 words · PrashantUnity
Download Logo

CFD loading SVG

Loading Animation 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg width="300" height="300" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"> <text x="1" y="29" font-size="7" fill="white" font-family="Ubuntu">CFD AI</text> <style> .spinner { animation: move 2.4s linear infinite; } .delay1 { animation-delay: -2.4s; fill: #9BFAFF; } .delay2 { animation-delay: -1.6s; fill: #FFBD4D; } .delay3 { animation-delay: -0.8s; fill: #FFF8B3; } @keyframes move { 0%, 8.33% { x: 2px; y: 2px; } 25% { x: 13px; y: 2px; } 33.3%, 50% { x: 13px; y: 13px; } 58.33%, 75% { x: 2px; y: 13px; } 83.33%, 100% { x: 2px; y: 2px; } } </style> <rect class="spinner delay1" x="2" y="2" rx="2" width="10" height="10"/> <rect class="spinner delay2" x="2" y="2" rx="2" width="10" height="10"/> <rect class="spinner delay3" x="2" y="2" rx="2" width="10" height="10"/> </svg>

July 24, 2024 · 1 min · 171 words · PrashantUnity
Download Logo

Strings (Ch. 5)

C# String & string Manipulation String Basics In C#, a string is a sequence of characters stored as a single data type. Strings are immutable, meaning any operation that appears to modify a string actually creates a new string. string and String both can be used to represent string bath are same string preffered. String Concatenation Concatenation is the process of combining two or more strings into one. You can use the + operator to concatenate strings. ...

June 19, 2024 · 3 min · 633 words · PrashantUnity
Download Logo

YouTube API updates

YouTube Data API Sample in .NET Interactive Notebooks This sample demonstrates how to use the YouTube Data API to update video metadata (title, description, tags, etc.) in bulk using .NET Interactive Notebooks. It covers OAuth2 authentication, fetching uploaded videos, generating new metadata using an AI model, and updating the videos via the API. Get Gemini API Key Google Cloud Console for creating secret credentials 1 2 #r "nuget: Google.Apis.YouTube.v3" #r "nuget: Google.Apis.Auth" This cell loads the NuGet package references required to use the YouTube Data API and Google authentication in a polyglot/.NET Interactive notebook. ...

December 23, 2025 · 5 min · 978 words · PrashantUnity
Download Logo

QR codes in .NET

Generate QR Code in .NET Applications This comprehensive guide demonstrates how to create beautiful, customizable QR codes in .NET applications. We’ll build a QR code generator with advanced features including: Gradient coloring - Apply color gradients to QR code modules Rounded dots - Replace standard squares with rounded circles for a modern look Center logo - Embed logos with automatic sizing and contrast enhancement Footer text - Add descriptive text below the QR code UPI payment integration - Generate UPI URIs for Indian payment systems High error correction - Ensure QR codes remain scannable even with partial obstruction Base64 encoding - Easy embedding in web applications and documents Prerequisites You’ll need: ...

November 16, 2025 · 11 min · 2319 words · PrashantUnity
Download Logo

Auto carousel in MAUI

## 1. Create the Reusable Component Files 🧱 First, add a new item to your project. Choose the .NET MAUI ContentView (XAML) template. Name it something descriptive, like FeaturedCarouselView.xaml. ## 2. UI code sample of the ContentView FeaturedCarouselView.xaml: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 <?xml version="1.0" encoding="utf-8" ?> <ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:YourMauiProjectName" x:Class="YourMauiProjectName.FeaturedCarouselView"> <ContentView.Resources> <ResourceDictionary> <Color x:Key="CardBackgroundColor">#F9FAFB</Color> <Color x:Key="ForegroundColor">#111827</Color> <Color x:Key="MutedForegroundColor">#6B7280</Color> <Color x:Key="BorderColor">#E5E7EB</Color> <Color x:Key="PrimaryColor">#4A90E2</Color> <Style x:Key="CardBorderStyle" TargetType="Border"> <Setter Property="Stroke" Value="{StaticResource BorderColor}" /> <Setter Property="StrokeThickness" Value="1" /> <Setter Property="BackgroundColor" Value="{StaticResource PageBackgroundColor}" /> <Setter Property="StrokeShape" Value="RoundRectangle 8" /> <Setter Property="Padding" Value="0" /> <Setter Property="Shadow"> <Shadow Brush="Black" Offset="2,2" Radius="5" Opacity="0.1" /> </Setter> </Style> <Style x:Key="PrimaryButtonStyle" TargetType="Button"> <Setter Property="BackgroundColor" Value="{StaticResource PrimaryColor}" /> <Setter Property="TextColor" Value="{StaticResource PrimaryTextColor}" /> <Setter Property="FontAttributes" Value="Bold" /> <Setter Property="HeightRequest" Value="48" /> <Setter Property="CornerRadius" Value="8" /> <Setter Property="Padding" Value="24,0" /> </Style> </ResourceDictionary> </ContentView.Resources> <VerticalStackLayout Spacing="16" BackgroundColor="{StaticResource CardBackgroundColor}"> <CarouselView x:Name="FeaturedCarousel" IndicatorView="FeaturedIndicator" HeightRequest="500"> <CarouselView.ItemTemplate> <DataTemplate x:DataType="local:CarouselItem"> <VerticalStackLayout Padding="16,0" Spacing="24"> <Border Style="{StaticResource CardBorderStyle}" StrokeShape="RoundRectangle 12" HeightRequest="300"> <Image Source="{Binding ImageUrl}" Aspect="AspectFill" /> </Border> <VerticalStackLayout Spacing="16" HorizontalOptions="Center" Padding="16,0"> <Label Text="{Binding Title}" TextColor="{StaticResource ForegroundColor}" FontSize="24" FontAttributes="Bold" HorizontalTextAlignment="Center" /> <Label Text="{Binding Description}" TextColor="{StaticResource MutedForegroundColor}" FontSize="16" HorizontalTextAlignment="Center" /> <Button Text="Discover More →" Style="{StaticResource PrimaryButtonStyle}" HorizontalOptions="Center" /> </VerticalStackLayout> </VerticalStackLayout> </DataTemplate> </CarouselView.ItemTemplate> </CarouselView> <IndicatorView x:Name="FeaturedIndicator" IndicatorColor="{StaticResource BorderColor}" SelectedIndicatorColor="{StaticResource PrimaryColor}" HorizontalOptions="Center" Margin="0,0,0,16"/> </VerticalStackLayout> </ContentView> ## 3. Logic to the Component’s Code-Behind Important: We use the Loaded and Unloaded events to start and stop the timer. ...

June 23, 2025 · 3 min · 523 words · PrashantUnity
Download Logo

Entry without underline

Create Custom Entry Control 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 namespace WaterReminder.CFDControl; public class CfdEntry :Entry { protected override void OnHandlerChanged() { base.OnHandlerChanged(); SetBorderlessBackground(); } protected override void OnPropertyChanged([CallerMemberName] string propertyName = null) { base.OnPropertyChanged(propertyName); if (propertyName == nameof(BackgroundColor)) { SetBorderlessBackground(); } } private void SetBorderlessBackground() { #if ANDROID if (Handler is IEntryHandler entryHandler) { if (BackgroundColor == null) { entryHandler.PlatformView.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(Colors.Transparent.ToPlatform()); } else { entryHandler.PlatformView.BackgroundTintList = Android.Content.Res.ColorStateList.ValueOf(BackgroundColor.ToPlatform()); } } #endif } } Step uses Import Name Spaces. in Xaml and so on … ...

June 19, 2025 · 2 min · 253 words · PrashantUnity
Download Logo

Floating action button

Code Snippet 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <AbsoluteLayout> <Grid AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" > <Grid> <Border StrokeShape="RoundRectangle 30" HeightRequest="60" WidthRequest="60" BackgroundColor="Black" AbsoluteLayout.LayoutBounds="1, 1, AutoSize, AutoSize" AbsoluteLayout.LayoutFlags="PositionProportional" TranslationX="-30" TranslationY="-30" > <Border.GestureRecognizers> <TapGestureRecognizer Tapped="AddButton_Clicked" /> </Border.GestureRecognizers> <Label Text="➕" TextColor="White" VerticalOptions="Center" HorizontalOptions="Center" FontSize="25"/> </Border> </AbsoluteLayout>

June 19, 2025 · 1 min · 60 words · PrashantUnity
Download Logo

SQLite in MAUI

Implementation Steps Install/ Add Microsoft.EntityFrameworkCore.Sqlite to Project 1 <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="9.0.7" /> Register App db Context before var app = builder.Build(); in MauiProgram.cs 1 2 3 var dbPath = Path.Combine(FileSystem.AppDataDirectory, "waterreminder.db3"); builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlite($"Filename={dbPath}")); Just Before app run add this Command 1 2 3 4 5 6 7 8 // Initialize the database using (var scope = app.Services.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService<AppDbContext>(); dbContext.Database.EnsureCreated(); } return app; Create Add Db Context 1 2 3 4 5 6 namespace WaterReminder.Data; public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(options) { public DbSet<Reminder> Reminders { get; set; } } Below is service or uses 1 2 3 4 5 6 7 8 9 10 11 public class ReminderService : IReminderService { private readonly AppDbContext _context; public ReminderService(AppDbContext context) { _context = context; } public Task<List<Reminder>> GetRemindersAsync() => _context.Reminders.ToListAsync(); }

June 19, 2025 · 1 min · 134 words · PrashantUnity