') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); GitHub - lavantgarde/AutoCADCodePack: AutoCAD Code Pack: A powerful library that helps you to develop AutoCAD plugins using the AutoCAD .NET API · GitHub
Skip to content

Latest commit

History

74 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutoCAD Code Pack

Previously hosted on CodePlex.

AutoCAD Code Pack is a powerful library that helps you to develop AutoCAD plugins using the AutoCAD .NET API. It re-encapsulates the over-designed and old-fashioned classes and methods into easy-to-use static modules and functions. It also brings modern C# syntax like LINQ and lambdas (functional programming) to AutoCAD development. With all the features it provides, you can save over half the lines of your code.

The library was originally developed for AutoCAD R18 (2010, 2011, 2012) and .NET 3.5. We recently updated it to target AutoCAD R23 (2019) and .NET 4.7.1, thanks to the contribution from @lavantgarde. You can target other versions with the source files and build yourself.

View Test.cs for API usage examples.

Modules

The library consists of the following modules:

  • Draw to directly draw entities (with AutoCAD-command-like functions)
  • NoDraw to create in-memory entities
  • Modify to edit entities (with AutoCAD-command-like functions)
  • Annotation to draw annotations
  • DbHelper to manipulate the DWG database
  • QuickSelection to simplify entity manipulation with LINQ style coding experience (like jQuery, if you know some Web)
  • Interaction to handle user interactions
  • Algorithms to offer some mathematical helpers
  • MultiDoc to process cross-document scenarios
  • CustomDictionary to help you attach data to entities
  • SymbolPack to help you draw symbols like arrows, etc.
  • IronPython to allow you use IronPython in AutoCAD

A Quick Look

You may write this elegant code with the code pack:

/// <summary>/// Eliminate zero-length polylines/// </summary>[CommandMethod("PolyClean0",CommandFlags.UsePickSet)]publicstaticvoidPolyClean0(){varids=Interaction.GetSelection("\nSelect polyline","LWPOLYLINE");intn=0;ids.QForEach<Polyline>(poly =>{if(poly.Length==0){poly.Erase();n++;}});Interaction.WriteLine("{0} eliminated.",n);}

instead of the verbose version using original API:

[CommandMethod("PolyClean0_Old",CommandFlags.UsePickSet)]publicstaticvoidPolyClean0_Old(){stringmessage="\nSelect polyline";stringallowedType="LWPOLYLINE";Editored=Application.DocumentManager.MdiActiveDocument.Editor;PromptSelectionOptionsopt=newPromptSelectionOptions{MessageForAdding=message};ed.WriteMessage(message);SelectionFilterfilter=newSelectionFilter(newTypedValue[]{newTypedValue(0,allowedType)});PromptSelectionResultres=ed.GetSelection(opt,filter);if(res.Status!=PromptStatus.OK){return;}ObjectId[]ids=res.Value.GetObjectIds();intn=0;Databasedb=HostApplicationServices.WorkingDatabase;using(Transactiontrans=db.TransactionManager.StartTransaction()){foreach(ObjectIdidinids){Polylinepoly=trans.GetObject(id,OpenMode.ForWrite)asPolyline;if(poly.Length==0){poly.Erase();n++;}}trans.Commit();}ed.WriteMessage("{0} eliminated.",n);}

Examples

View Test.cs for detailed API usage examples.

About

AutoCAD Code Pack: A powerful library that helps you to develop AutoCAD plugins using the AutoCAD .NET API

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages