lisp+c#混合编程之--动态复制(动态旋转、镜像、缩放、改基点、对齐)
本帖最后由 print1985 于 2022-5-17 10:20 编辑对不起各位,因最近发现本人发的个别插件、源码被人挂网上贩卖,虽然没啥技术含量,但是也是花了时间做的。为了不被后面的二手贩子继续利用,忍心下架所有成品插件,敬请理解,确实需要本插件的朋友可以给我留言。
请版主把本帖改为普通帖子,对不起了
功能见动图
复制的同时可动态旋转、镜像、缩放、改基点、对齐;支持正交、极轴、捕捉。
可轻量级代替cad原版命令,选择内容太多(默认1000个,可修改)自动切换为原版命令。
lisp+c#混合编程,c#解决动态显示,lisp解决选择集复制、移动等(纯c#克隆的对象存在很多问题,放弃了,还是用cad自带的命令好)lisp为源码,也可自行修改实现其它功能。
使用方法:
修改lisp内DLL文件路径,加载lisp即可(修改路径之后lisp启动会自动加载dll)
快捷键默认为c和m,可修改
本人lisp、c#都是入门级,小程序没有过多的功能(实在写不出来),只为方便使用而已。
有什么问题欢迎反馈,PS:测试前请做好图纸备份,以免致命错误。
问个问题:怎么发不需要D豆下载的附件
谢谢分享!这个功能满强大的…
试试看在繁体的CAD软件能否正常使用 using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.GraphicsInterface;
namespace UseDrawJig
{
class MirrorJig : DrawJig
{
private Point3d m_MirrorPt1, m_MirrorPt2;
private Entity[] m_EntArr, m_EntCopyArr;
private Matrix3d m_InverseMt = Matrix3d.Identity;
// 初始化MirrorJig派生类
public MirrorJig(Point3d mirrorPt1, Entity[] entArr, Entity[] entCopyArr)
{
m_MirrorPt2 = m_MirrorPt1 = mirrorPt1;
m_EntArr = entArr;
m_EntCopyArr = entCopyArr;
}
protected override bool WorldDraw(WorldDraw draw)
{
for (int i = 0; i < m_EntCopyArr.Length; i++)
{
draw.Geometry.Draw(m_EntCopyArr);
}
return true;
}
protected override SamplerStatus Sampler(JigPrompts prompts)
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Matrix3d mt = ed.CurrentUserCoordinateSystem;
JigPromptPointOptions optJig = new JigPromptPointOptions("\n请指定镜像线第二点:");
optJig.Cursor = CursorType.RubberBand;
// 基点必须是WCS点.
Point3d wcsMirrorPt1 = m_MirrorPt1.TransformBy(mt);
optJig.BasePoint = wcsMirrorPt1;
optJig.UseBasePoint = true;
PromptPointResult resJig = prompts.AcquirePoint(optJig);
Point3d curPt = resJig.Value;
if (m_MirrorPt2 != curPt)
{
m_MirrorPt2 = curPt;
Matrix3d mirrorMt = Matrix3d.Mirroring(new Line3d(m_MirrorPt2, wcsMirrorPt1));
for (int i = 0; i < m_EntCopyArr.Length; i++)
{
m_EntCopyArr.TransformBy(m_InverseMt);
m_EntCopyArr.TransformBy(mirrorMt);
}
m_InverseMt = mirrorMt.Inverse();
return SamplerStatus.OK;
}
else
{
return SamplerStatus.NoChange;
}
}
public void Unhighlight()
{
// 取消源对象的高亮状态.
for (int i = 0; i < m_EntArr.Length; i++)
{
m_EntArr.Unhighlight();
}
}
}
}
书中的核心代码,动态部分,论坛还有更多的代码,大家共同学习
谢谢楼主,C#小白一个,请教下楼主
C# 分 2007/2008,2009/2012,2013/2021 是因为什么
谢谢 Lisphk 发表于 2021-1-22 20:46
谢谢楼主,C#小白一个,请教下楼主
C# 分 2007/2008,2009/2012,2013/2021 是因为什么
谢谢
CAD用的.NET版本在不停的升级,CAD提供给C#调用的几个DLL也在跟着升级,所以分了那么多版本,很烦,还是lisp好,小程序lisp够了,不够的再混个c#辅助{:1_12:}。 就是那个多功能复制移动V3.0吧? 这个不用Interop.IWshRuntimeLibrary.dll了,不错
很给力的小程序,如果只用lisp就更完美了。 做个对论坛有益的人。 {:1_6:}{:1_14:} 能不能把源码放出来,大家学习学习,共同进步{:1_12:}{:1_12:}{:1_12:} 明经论坛也发一下吧 dnbcgrass 发表于 2021-1-25 08:43
能不能把源码放出来,大家学习学习,共同进步
lisp是源码,c#的源码是才鸟书中的DrawJig部分代码( AutoCAD VBA & VB.NET开发基础与实例教程(第2版)(C#版) ),我只是修改了局部,加了和lisp之间的互相调用
如果要学习c#,建议买才鸟的书来学习(虽然出了很多年了,依然没过时),有问题大家共同探讨
感谢才鸟曾洪飞等作者的贡献 依然小小鸟 发表于 2021-1-26 09:00
明经论坛也发一下吧
明经现在发不了附件、图片等,只有等老大好久有时间和精力了可能才能恢复,做网站也不容易,倒贴钱 这个功能强大。。。。谢谢 期待能有源码大家一起学习
页:
[1]
2