print1985 发表于 2021-1-22 18:36:43

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豆下载的附件

60ck 发表于 2022-5-13 09:50:15

谢谢分享!这个功能满强大的…
试试看在繁体的CAD软件能否正常使用

print1985 发表于 2021-1-27 23:48:29

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();
            }
      }
    }
}
书中的核心代码,动态部分,论坛还有更多的代码,大家共同学习

Lisphk 发表于 2021-1-22 20:46:52

谢谢楼主,C#小白一个,请教下楼主
C# 分 2007/2008,2009/2012,2013/2021 是因为什么
谢谢

print1985 发表于 2021-1-22 21:38:07

Lisphk 发表于 2021-1-22 20:46
谢谢楼主,C#小白一个,请教下楼主
C# 分 2007/2008,2009/2012,2013/2021 是因为什么
谢谢

CAD用的.NET版本在不停的升级,CAD提供给C#调用的几个DLL也在跟着升级,所以分了那么多版本,很烦,还是lisp好,小程序lisp够了,不够的再混个c#辅助{:1_12:}。

liuyj 发表于 2021-1-22 23:51:06

就是那个多功能复制移动V3.0吧?

liuyj 发表于 2021-1-22 23:56:54

这个不用Interop.IWshRuntimeLibrary.dll了,不错

chaozi5756 发表于 2021-1-23 08:23:57

很给力的小程序,如果只用lisp就更完美了。

yuren008 发表于 2021-1-23 09:33:28

做个对论坛有益的人。

aisong220 发表于 2021-1-25 08:01:05

{:1_6:}{:1_14:}

dnbcgrass 发表于 2021-1-25 08:43:37

能不能把源码放出来,大家学习学习,共同进步{:1_12:}{:1_12:}{:1_12:}

依然小小鸟 发表于 2021-1-26 09:00:38

明经论坛也发一下吧

print1985 发表于 2021-1-26 12:06:39

dnbcgrass 发表于 2021-1-25 08:43
能不能把源码放出来,大家学习学习,共同进步

lisp是源码,c#的源码是才鸟书中的DrawJig部分代码( AutoCAD VBA & VB.NET开发基础与实例教程(第2版)(C#版) ),我只是修改了局部,加了和lisp之间的互相调用
如果要学习c#,建议买才鸟的书来学习(虽然出了很多年了,依然没过时),有问题大家共同探讨
感谢才鸟曾洪飞等作者的贡献

print1985 发表于 2021-1-26 12:10:12

依然小小鸟 发表于 2021-1-26 09:00
明经论坛也发一下吧

明经现在发不了附件、图片等,只有等老大好久有时间和精力了可能才能恢复,做网站也不容易,倒贴钱

evayleung 发表于 2021-1-26 23:54:15

这个功能强大。。。。谢谢

lxw0320 发表于 2021-1-27 13:06:18

期待能有源码大家一起学习
页: [1] 2
查看完整版本: lisp+c#混合编程之--动态复制(动态旋转、镜像、缩放、改基点、对齐)