当前位置: 首页 > article >正文

插件实现:分别通过winform和WPF界面输入操作CAD——CAD c#二次开发

效果如下图所示:

主程序

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Windows.Forms;// 必须添加对 System.Windows.Forms 的引用namespace IfoxDemo
{public class Commands{[CommandMethod("xx")]public void DrawCircles(){// 获取当前文档和数据库Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;try{// 创建并显示输入圆信息的窗体CircleInputForm form = new CircleInputForm();if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK){// 获取用户在窗体中输入的半径、数量、颜色、随机分布选项、坐标范围double radius = form.Radius;int count = form.Count;bool isColorRandom = form.IsColorRandom;bool isRandom = form.IsRandom;double xMin = form.XMin;double xMax = form.XMax;double yMin = form.YMin;double yMax = form.YMax;// 开始事务using (Transaction tr = db.TransactionManager.StartTransaction()){// 打开块表BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);// 打开模型空间块表记录BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);Random random = new Random();for (int i = 0; i < count; i++){Autodesk.AutoCAD.Geometry.Point3d center;if (isRandom){// 如果选择随机分布,生成随机位置double x = random.NextDouble() * (xMax - xMin) + xMin;double y = random.NextDouble() * (yMax - yMin) + yMin;center = new Autodesk.AutoCAD.Geometry.Point3d(x, y, 0);}else{// 否则,使用原点作为圆心center = Autodesk.AutoCAD.Geometry.Point3d.Origin;}// 创建一个圆对象Circle circle = new Circle(center, Autodesk.AutoCAD.Geometry.Vector3d.ZAxis, radius);if (isColorRandom){// 如果颜色随机,生成随机颜色索引circle.ColorIndex = (short)random.Next(1, 8);}else{// 否则,使用默认颜色索引circle.ColorIndex = form.ColorIndex;}// 将圆添加到模型空间btr.AppendEntity(circle);tr.AddNewlyCreatedDBObject(circle, true);}// 提交事务tr.Commit();}ed.ZoomExtents();}}catch (Exception ex){// 输出异常信息到命令行ed.WriteMessage("\nError: " + ex.Message);}}}}

窗体文件:

using Autodesk.AutoCAD.Windows;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace IfoxDemo
{public partial class CircleInputForm : Form{public double Radius { get; private set; }public int Count { get; private set; }public short ColorIndex { get; private set; }public bool IsRandom { get; private set; }public bool IsColorRandom { get; private set; }public double XMin { get; private set; }public double XMax { get; private set; }public double YMin { get; private set; }public double YMax { get; private set; }private Dictionary<string, short> colorMap = new Dictionary<string, short>{{ "红色", 1 },{ "黄色", 2 },{ "绿色", 3 },{ "青色", 4 },{ "蓝色", 5 },{ "洋红色", 6 },{ "白色", 7 }};public CircleInputForm(){InitializeComponent();// 初始化颜色选择的 ComboBoxforeach (var colorName in colorMap.Keys){cmbColor.Items.Add(colorName);}cmbColor.SelectedIndex = 0; // 默认选择红色// 设置坐标范围的默认值txtXMin.Text = "0";txtXMax.Text = "10000";txtYMin.Text = "0";txtYMax.Text = "10000";chkRandom.Checked = true;chkColorRandom.Checked = true;txtRadius.Text = "100";txtCount.Text = "100";}private void btnOK_Click(object sender, EventArgs e){double radius;int count;try{// 尝试将用户输入的半径和数量转换为相应的数据类型if (!double.TryParse(txtRadius.Text, out radius)){MessageBox.Show("请输入有效的半径!", "输入错误");txtRadius.Focus();return;}if (!int.TryParse(txtCount.Text, out count)){MessageBox.Show("请输入有效的数量!", "输入错误");txtCount.Focus();return;}// 若输入都有效,则继续后续处理Radius = radius;Count = count;// 获取用户选择的颜色索引ColorIndex = colorMap[cmbColor.SelectedItem.ToString()];// 获取是否随机分布的选项IsRandom = chkRandom.Checked;// 获取颜色是否随机的选项IsColorRandom = chkColorRandom.Checked;// 获取坐标范围XMin = double.Parse(txtXMin.Text);XMax = double.Parse(txtXMax.Text);YMin = double.Parse(txtYMin.Text);YMax = double.Parse(txtYMax.Text);// 检查坐标范围的合理性if (XMin > XMax || YMin > YMax){MessageBox.Show("坐标范围设置不合理,请确保最小值小于最大值。");return;}// 关闭窗体并返回 DialogResult.OKDialogResult = DialogResult.OK;Close();}catch (Exception ex){// 若转换失败,显示错误信息MessageBox.Show("输入无效: " + ex.Message);}}private void btnCancel_Click(object sender, EventArgs e){// 关闭窗体并返回 DialogResult.CancelDialogResult = DialogResult.Cancel;Close();}}
}

wpf界面如下:

 

 

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using System;
using System.Collections.Generic;
using System.Windows;namespace IfoxDemo
{public partial class MainWindow : Window{public double Radius { get; private set; }public int Count { get; private set; }public short ColorIndex { get; private set; }public bool IsRandom { get; private set; }public bool IsColorRandom { get; private set; }public double XMin { get; private set; }public double XMax { get; private set; }public double YMin { get; private set; }public double YMax { get; private set; }private Dictionary<string, short> colorMap = new Dictionary<string, short>{{ "红色", 1 },{ "黄色", 2 },{ "绿色", 3 },{ "青色", 4 },{ "蓝色", 5 },{ "洋红色", 6 },{ "白色", 7 }};public MainWindow(){InitializeComponent();// 默认选择第一个颜色cmbColor.SelectedIndex = 0;}private void btnOK_Click(object sender, RoutedEventArgs e){double radius;int count;// 验证半径输入if (!double.TryParse(txtRadius.Text, out radius)){MessageBox.Show("请输入有效的半径!", "输入错误");txtRadius.Focus();return;}// 验证数量输入if (!int.TryParse(txtCount.Text, out count)){MessageBox.Show("请输入有效的数量!", "输入错误");txtCount.Focus();return;}// 若输入都有效,则继续后续处理Radius = radius;Count = count;// 获取用户选择的颜色索引string selectedColor = ((ComboBoxItem)cmbColor.SelectedItem).Content.ToString();ColorIndex = colorMap[selectedColor];// 获取是否随机分布的选项IsRandom = chkRandom.IsChecked.Value;// 获取颜色是否随机的选项IsColorRandom = chkColorRandom.IsChecked.Value;// 定义临时变量用于存储解析结果double tempXMin, tempXMax, tempYMin, tempYMax;// 获取坐标范围if (!double.TryParse(txtXMin.Text, out tempXMin) || !double.TryParse(txtXMax.Text, out tempXMax) ||!double.TryParse(txtYMin.Text, out tempYMin) || !double.TryParse(txtYMax.Text, out tempYMax)){MessageBox.Show("请输入有效的坐标范围!", "输入错误");return;}// 将临时变量的值赋给属性XMin = tempXMin;XMax = tempXMax;YMin = tempYMin;YMax = tempYMax;// 检查坐标范围的合理性if (XMin > XMax || YMin > YMax){MessageBox.Show("坐标范围设置不合理,请确保最小值小于最大值。");return;}// 关闭窗体并返回结果DialogResult = true;Close();}private void btnCancel_Click(object sender, RoutedEventArgs e){// 关闭窗体并返回结果DialogResult = false;Close();}}public class Commands{[CommandMethod("xx")]public void DrawCircles(){// 获取当前文档和数据库Document doc = Application.DocumentManager.MdiActiveDocument;Database db = doc.Database;Editor ed = doc.Editor;try{// 创建并显示输入圆信息的窗体MainWindow form = new MainWindow();if (form.ShowDialog() == true){// 获取用户在窗体中输入的半径、数量、颜色、随机分布选项、坐标范围double radius = form.Radius;int count = form.Count;bool isColorRandom = form.IsColorRandom;bool isRandom = form.IsRandom;double xMin = form.XMin;double xMax = form.XMax;double yMin = form.YMin;double yMax = form.YMax;// 开始事务using (Transaction tr = db.TransactionManager.StartTransaction()){// 打开块表BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);// 打开模型空间块表记录BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);Random random = new Random();for (int i = 0; i < count; i++){Point3d center;if (isRandom){// 如果选择随机分布,生成随机位置double x = random.NextDouble() * (xMax - xMin) + xMin;double y = random.NextDouble() * (yMax - yMin) + yMin;center = new Point3d(x, y, 0);}else{// 否则,使用原点作为圆心center = Point3d.Origin;}// 创建一个圆对象Circle circle = new Circle(center, Vector3d.ZAxis, radius);if (isColorRandom){// 如果颜色随机,生成随机颜色索引circle.ColorIndex = (short)random.Next(1, 8);}else{// 否则,使用默认颜色索引circle.ColorIndex = form.ColorIndex;}// 将圆添加到模型空间btr.AppendEntity(circle);tr.AddNewlyCreatedDBObject(circle, true);}// 提交事务tr.Commit();}ed.ZoomExtents();}}catch (Exception ex){// 输出异常信息到命令行ed.WriteMessage("\nError: " + ex.Message);}}}
}

 

<Window x:Class="IfoxDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="输入圆信息" Height="350" Width="300"><Grid><!-- 半径输入 --><Label Content="半径:" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top"/><TextBox x:Name="txtRadius" HorizontalAlignment="Left" Height="23" Margin="60,10,0,0" TextWrapping="Wrap" Text="100" VerticalAlignment="Top" Width="120"/><!-- 数量输入 --><Label Content="数量:" HorizontalAlignment="Left" Margin="10,40,0,0" VerticalAlignment="Top"/><TextBox x:Name="txtCount" HorizontalAlignment="Left" Height="23" Margin="60,40,0,0" TextWrapping="Wrap" Text="100" VerticalAlignment="Top" Width="120"/><!-- 颜色选择 --><Label Content="颜色:" HorizontalAlignment="Left" Margin="10,70,0,0" VerticalAlignment="Top"/><ComboBox x:Name="cmbColor" HorizontalAlignment="Left" Margin="60,70,0,0" VerticalAlignment="Top" Width="120"><ComboBoxItem Content="红色"/><ComboBoxItem Content="黄色"/><ComboBoxItem Content="绿色"/><ComboBoxItem Content="青色"/><ComboBoxItem Content="蓝色"/><ComboBoxItem Content="洋红色"/><ComboBoxItem Content="白色"/></ComboBox><!-- 随机分布圆位置复选框 --><CheckBox x:Name="chkRandom" Content="随机分布圆位置" HorizontalAlignment="Left" Margin="10,100,0,0" VerticalAlignment="Top" IsChecked="True"/><!-- 颜色随机分布复选框 --><CheckBox x:Name="chkColorRandom" Content="颜色随机分布" HorizontalAlignment="Left" Margin="10,130,0,0" VerticalAlignment="Top" IsChecked="True"/><!-- X 坐标范围 --><Label Content="X 坐标范围:" HorizontalAlignment="Left" Margin="10,160,0,0" VerticalAlignment="Top"/><TextBox x:Name="txtXMin" HorizontalAlignment="Left" Height="23" Margin="100,160,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="50"/><Label Content="-" HorizontalAlignment="Left" Margin="147,158,0,0" VerticalAlignment="Top"/><TextBox x:Name="txtXMax" HorizontalAlignment="Left" Height="23" Margin="160,160,0,0" TextWrapping="Wrap" Text="10000" VerticalAlignment="Top" Width="50"/><!-- Y 坐标范围 --><Label Content="Y 坐标范围:" HorizontalAlignment="Left" Margin="10,190,0,0" VerticalAlignment="Top"/><TextBox x:Name="txtYMin" HorizontalAlignment="Left" Height="23" Margin="100,190,0,0" TextWrapping="Wrap" Text="0" VerticalAlignment="Top" Width="50"/><Label Content="-" HorizontalAlignment="Left" Margin="147,188,0,0" VerticalAlignment="Top"/><TextBox x:Name="txtYMax" HorizontalAlignment="Left" Height="23" Margin="160,190,0,0" TextWrapping="Wrap" Text="10000" VerticalAlignment="Top" Width="50"/><!-- 确定按钮 --><Button Content="确定" HorizontalAlignment="Left" Margin="50,230,0,0" VerticalAlignment="Top" Width="75" Click="btnOK_Click"/><!-- 取消按钮 --><Button Content="取消" HorizontalAlignment="Left" Margin="150,230,0,0" VerticalAlignment="Top" Width="75" Click="btnCancel_Click"/><!-- 版权信息 --><TextBlock Text="版权#山水(qq443440204)" HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="0,0,0,10" Foreground="Red" FontWeight="Bold"/></Grid>
</Window>

 当前结构问题:随着功能的增加,代码可能会变得臃肿,难以管理。
优化建议:可以将相关的功能进行模块化拆分,例如将与圆的绘制逻辑相关的代码提取到一个独立的类中,将与坐标范围处理相关的代码提取到另一个类中。这样可以提高代码的可读性和可维护性。
MVVM 模式的应用
优势:
分离关注点:MVVM 模式将应用程序分为三个主要部分,即模型(Model)、视图(View)和视图模型(ViewModel)。模型负责处理数据和业务逻辑,视图负责展示用户界面,视图模型作为中间桥梁,连接模型和视图,负责处理视图的交互和数据绑定。这样可以使代码的各个部分职责更加明确,便于开发、测试和维护。
提高可测试性:由于视图模型不依赖于具体的视图,因此可以更容易地对其进行单元测试。可以通过模拟视图模型的依赖项来测试其业务逻辑,而无需依赖于 UI 界面。
数据绑定和交互:MVVM 模式利用数据绑定技术,使得视图和视图模型之间的数据交互更加便捷和直观。当视图模型中的数据发生变化时,视图会自动更新;反之,当用户在视图中进行操作时,也会自动更新视图模型中的数据。

 通用功能使用wpf实现:

相关文章:

插件实现:分别通过winform和WPF界面输入操作CAD——CAD c#二次开发

效果如下图所示&#xff1a; 主程序 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; using System; using System.Windows…...

【学Rust写CAD】20 平铺模式结构体(spread.rs)

这个 Spread。rs文件定义了渐变超出定义区域时的扩展方式&#xff0c;通常用于处理渐变在边界之外的行为。 源码 //color/spread.rs #[derive(Debug, Clone, Copy)] pub struct Pad; // 空结构体&#xff0c;表示 Pad 模式#[derive(Debug, Clone, Copy)] pub struct Reflect…...

maya调整全局关节显示大小

请按以下步骤操作&#xff1a; 在 Maya 主菜单栏中&#xff0c;找到 Display (显示) 菜单。 在 Display 菜单下&#xff0c;找到 Animation (动画) 子菜单。 在 Animation 子菜单中&#xff0c;点击 Joint Size... (关节大小...)。 这时会弹出一个小窗口或者直接在界面上出现…...

白酒迈入3.0时代,珍酒李渡如何穿越周期高质增长?

当下&#xff0c;白酒行业仍处深度调整期&#xff0c;过往通过渠道拓展、硬广宣传等推动规模扩张、提升市场份额的模式&#xff0c;愈发难以为继。 行业迫切需要构建高质增长新模式&#xff0c;完成增长动能转换。中国酒业协会理事长宋书玉提出&#xff0c;白酒消费亟需进入品…...

HTTP代理:网页加速的隐形引擎

目录 引言&#xff1a;网页加载速度为何至关重要&#xff1f; 一、HTTP代理的核心加速原理 二、四大加速黑科技详解 三、实战场景性能对比 四、代理加速的隐藏代价 五、未来发展趋势 结语&#xff1a;智能代理的选型指南 引言&#xff1a;网页加载速度为何至关重要&#…...

人工智能-LangGraph+ChatUI+DeepSeek API搭建本地智能助手

人工智能-LangGraphChatUIDeepSeek API搭建本地智能助手 0 环境说明1 LangGraph2 Agent Chat UI 0 环境说明 环境项环境说明操作系统Windows11 专业版硬件信息联想拯救者Y9000PcondaAnancondaPython版本3.12NodeJs18.20.0 # 使用conda创建python环境 conda create -n langgra…...

3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件,无需一个个打开max,材质贴图在

3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件&#xff0c;无需一个个打开max&#xff0c;材质贴图在 3dmax批量转glb/gltf/fbx/osgb/stl/3ds/dae/obj/skp格式导出转换插件&#xff0c;无需一个个打开max&#xff0c;材质贴图在...

虚幻5入门

常用操作 运行时&#xff0c;调试相机&#xff0c;按~键&#xff0c;输入ToggleDebugCamera 。进入自由视角 常用节点 gate节点&#xff1a;用于控制该流程通不通&#xff0c;执不执行。Flip Flop节点&#xff1a;反转执行&#xff0c;一次A&#xff0c;一次B。Set Timer by…...

【解决】Edge浏览器硬件加速问题:无法滚动与卡顿的应对方法

Edge浏览器开启硬件加速后无法滚动屏幕&#xff0c;关闭后虽然可以滚动但出现卡顿&#xff0c;可能是由多种原因导致的。以下是一些可能的解决方法&#xff1a; 1. 检查显卡驱动 更新显卡驱动&#xff1a;确保显卡驱动是最新版本。过时的驱动可能会导致硬件加速功能不稳定。回…...

慧通测控:汽车RGB氛围灯功能测试介绍

在汽车内饰不断进化的当下&#xff0c;汽车 RGB 氛围灯已从曾经的小众配置&#xff0c;逐渐成为众多车主提升驾乘体验的热门选择。它宛如车内的 “魔法精灵”&#xff0c;凭借丰富的功能&#xff0c;为单调的车厢披上一层梦幻而温馨的色彩。今天&#xff0c;让我们深入探究汽车…...

QML Book 学习基础6(定位/布局元素)

目录 定位元素 Column Row Grid Flow 布局元素 1.元素填充它的⽗元素。 2.对齐 定位元素 Column Column &#xff08;列&#xff09;元素将它的⼦对象通过顶部对⻬的列⽅式进⾏排列。 spacing 属性⽤来设置每个元素之间的间隔⼤⼩ Row Row &#xff08;⾏&#xff09;元…...

【SpringCloud】LoadBalance-负载均衡

4. 负载均衡-LoadBalance 4.1 为什么需要负载均衡&#xff1f; 不知道各位心中有没有女神&#xff0c;通常来说一个女神就会有多个舔狗&#xff0c;那这些舔狗呢&#xff0c;就会心甘情愿的帮女神干活&#xff0c;假设女神小美现在有三个舔狗&#xff0c;小美喜欢让这三个舔狗…...

自然语言处理(26:(终章Attention 2.)带Attention的seq2seq的实现)

系列文章目录 终章 1&#xff1a;Attention的结构 终章 2&#xff1a;带Attention的seq2seq的实现 终章 3&#xff1a;Attention的评价 终章 4&#xff1a;关于Attention的其他话题 终章 5&#xff1a;Attention的应用 目录 系列文章目录 前言 一、编码器的实现 二、解…...

Sentinel实战(二)、流控规则之流控阈值类型、流控模式

spring cloud Alibaba-sentinel-流控 流控规则前置环境一、基于阈值类型(QPS/线程数)维度,设置流控规则demo1、流控规则:设置QPS流控规则设置含义测试,观察流控规则设定后的效果demo2、流控规则-设置线程数流控规则设置含义测试,观察流控规则设定后的效果二、基于流控模…...

AI与.NET技术实操系列(四):使用 Semantic Kernel 和 DeepSeek 构建AI应用

1. 引言 在人工智能技术飞速发展的今天&#xff0c;大型语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为智能应用开发的核心驱动力。从智能客服到自动化内容生成&#xff0c;LLMs的应用正在深刻改变我们的工作和生活方式。 对于.NET开发者而言&#xff0c;…...

go 使用os复制文件

在 Go 语言中&#xff0c;你可以使用 os 包中的 Open、Create、Copy 函数来复制文件。以下是一个简单的示例&#xff1a; package mainimport ("fmt""io""os" )func copyFile(src, dst string) error {// 打开源文件srcFile, err : os.Open(src…...

嵌入式软件安全设计指南(V2.0)

嵌入式软件安全设计指南&#xff08;V2.0&#xff09; 一、安全设计基础原则 1.1 最小特权原则 /* FreeRTOS任务权限控制示例 */ void vTaskSafe(void *pvParameters) {// 限制IO访问权限vTaskRestrictPermissions(portPRIVILEGED_BIT);// 仅允许访问指定内存区域vTaskSetMP…...

HarmonyOS:ComposeTitleBar 组件自学指南

在日常的鸿蒙应用开发工作中&#xff0c;我们常常会面临构建美观且功能实用的用户界面的挑战。而标题栏作为应用界面的重要组成部分&#xff0c;它不仅承载着展示页面关键信息的重任&#xff0c;还能为用户提供便捷的操作入口。最近在参与的一个项目里&#xff0c;我就深深体会…...

25-智慧旅游系统(协同算法)三端

介绍 技术&#xff1a; 基于 B/S 架构 SpringBootMySQLLayuivue 环境&#xff1a; Idea mysql maven jdk1.8 node 管理端功能 首页展示图表&#xff1a;以数据可视化方式展示关键业务数据。 用户管理&#xff1a;管理系统用户&#xff0c;包括查看、编辑等操作。 供应商管…...

数据结构实验1.2: 顺序表的基本运算

文章目录 一&#xff0c;问题描述二&#xff0c;基本要求三&#xff0c;算法分析&#xff08;1&#xff09;插入算法&#xff08;2&#xff09;删除算法 四&#xff0c;参考程序五&#xff0c;运行效果 一&#xff0c;问题描述 创建一个顺序表&#xff0c;编程实现顺序表的下列…...

Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析

Swoole 的 Hyperf 框架和 Go 的 Gin 框架虽然都支持高并发&#xff0c;但它们的实现原理、底层机制和适用场景有显著差异。以下从 高并发原理、技术实现区别、优缺点 三个方面详细分析&#xff1a; 一、高并发实现原理 1. Hyperf (PHP Swoole) Hyperf 的高并发能力基于 Swoo…...

【QT】QT中的信号与槽

QT中的信号与槽 一、信号与槽函数的作用二、如何关联信号与槽函数1、借助集成开发环境&#xff0c;右键转到槽函数示例代码&#xff1a; 2、调用connect函数手动关联信号与槽函数 三、扩展四、总结信号与槽的特点1、一个类如果要使用信号以及槽函数&#xff0c;那么该类的定义中…...

使用Python爬虫获取1688商品(按图搜索)接口

一、引言 随着电商行业的不断发展&#xff0c;消费者对商品搜索的效率和准确性要求越来越高。1688作为国内领先的B2B电商平台&#xff0c;提供了丰富的商品搜索功能&#xff0c;其中按图搜索功能&#xff08;类似于淘宝的拍立淘&#xff09;极大地提升了用户的购物体验。本文将…...

C/C++ JSON 库综合对比及应用案例(六)

第六部分&#xff1a;C/C JSON 库综合对比及应用案例 &#x1f4e2; 快速掌握 JSON&#xff01;文章 视频双管齐下 &#x1f680; 如果你觉得阅读文章太慢&#xff0c;或者更喜欢 边看边学 的方式&#xff0c;不妨直接观看我录制的 JSON 课程视频&#xff01;&#x1f3ac; …...

AI Agent拐点已至,2B+2C星辰大海——行业深度报告

大家好&#xff0c;我是吾鳴。 今天吾鳴要给大家分享一份由开源证券出品的关于AI Agent的报告&#xff0c;报告从AI Agent商业化应用、C端B端应用与布局&#xff0c;投资建议等方向介绍2025AI Agent新元年。报告一共28页PDF&#xff0c;文末有完整版下载地址。 内容摘要 2025年…...

【CSS】- 表单控件的 placeholder 如何控制换行显示?

表单控件的 placeholder 如何换行展示&#xff1f; HTML 中&#xff0c;<textarea> 元素的 placeholder 属性默认情况下不支持换行。不过&#xff0c;可以通过以下几种方法来实现换行效果&#xff1a; 模版字符串 模板字符串可以轻松地创建多行字符串&#xff0c;而不…...

Mac 终端命令大全

—目录操作— ꔷ mkdir 创建一个目录 mkdir dirname ꔷ rmdir 删除一个目录 rmdir dirname ꔷ mvdir 移动或重命名一个目录 mvdir dir1 dir2 ꔷ cd 改变当前目录 cd dirname ꔷ pwd 显示当前目录的路径名 pwd ꔷ ls 显示当前目录的内容 ls -la ꔷ dircmp 比较两个目录的内容 d…...

常用天然地震链接

一些常用的天然地震链接汇总&#xff1a; 天然地震数据 - IRIS Wilber 3 DATA: NSF SAGE: Wilber 3: Select Event地震学入门知识 - 地震“学”网站&#xff1a;地震“学”地震数据处理Matlab code - github &#xff1a;The GISMO Toolbox - seismic data analysis in MATLAB…...

node.js、npm相关知识

Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的开源、跨平台的 JavaScript 运行时环境&#xff0c;主要用于服务器端编程。它允许开发者使用 JavaScript 编写高性能的后端服务&#xff0c;突破了 JavaScript 仅在浏览器中运行的限制。 npm&#xff08;Node Package Man…...

基于HTML5和CSS3实现3D旋转相册效果

基于HTML5和CSS3实现3D旋转相册效果 这里写目录标题 基于HTML5和CSS3实现3D旋转相册效果项目介绍技术栈核心功能实现原理1. HTML结构2. CSS样式设计2.1 基础样式设置2.2 容器样式2.3 图片样式 3. JavaScript实现4. 交互功能实现4.1 触摸和鼠标拖拽4.2 播放控制 项目亮点技术难点…...