找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4138|回复: 25

[每日一码] lisp+c#混合编程之--动态复制(动态旋转、镜像、缩放、改基点、对齐)

[复制链接]

已领礼包: 28个

财富等级: 恭喜发财

发表于 2021-1-22 18:36:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 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豆下载的附件
动态复制.gif

修改路径

修改路径

评分

参与人数 2D豆 +10 贡献 +1 收起 理由
newer + 5 + 1 技术引导讨论和指点奖!
Lisphk + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2021-1-27 23:48:29 | 显示全部楼层
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.GraphicsInterface;

  6. namespace UseDrawJig
  7. {
  8.     class MirrorJig : DrawJig
  9.     {
  10.         private Point3d m_MirrorPt1, m_MirrorPt2;
  11.         private Entity[] m_EntArr, m_EntCopyArr;
  12.         private Matrix3d m_InverseMt = Matrix3d.Identity;

  13.         // 初始化MirrorJig派生类
  14.         public MirrorJig(Point3d mirrorPt1, Entity[] entArr, Entity[] entCopyArr)
  15.         {
  16.             m_MirrorPt2 = m_MirrorPt1 = mirrorPt1;
  17.             m_EntArr = entArr;
  18.             m_EntCopyArr = entCopyArr;
  19.         }

  20.         protected override bool WorldDraw(WorldDraw draw)
  21.         {
  22.             for (int i = 0; i < m_EntCopyArr.Length; i++)
  23.             {
  24.                 draw.Geometry.Draw(m_EntCopyArr[i]);
  25.             }
  26.             return true;
  27.         }

  28.         protected override SamplerStatus Sampler(JigPrompts prompts)
  29.         {
  30.             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  31.             Matrix3d mt = ed.CurrentUserCoordinateSystem;

  32.             JigPromptPointOptions optJig = new JigPromptPointOptions("\n请指定镜像线第二点:");
  33.             optJig.Cursor = CursorType.RubberBand;
  34.             // 基点必须是WCS点.
  35.             Point3d wcsMirrorPt1 = m_MirrorPt1.TransformBy(mt);
  36.             optJig.BasePoint = wcsMirrorPt1;
  37.             optJig.UseBasePoint = true;

  38.             PromptPointResult resJig = prompts.AcquirePoint(optJig);
  39.             Point3d curPt = resJig.Value;

  40.             if (m_MirrorPt2 != curPt)
  41.             {
  42.                 m_MirrorPt2 = curPt;

  43.                 Matrix3d mirrorMt = Matrix3d.Mirroring(new Line3d(m_MirrorPt2, wcsMirrorPt1));
  44.                 for (int i = 0; i < m_EntCopyArr.Length; i++)
  45.                 {
  46.                     m_EntCopyArr[i].TransformBy(m_InverseMt);
  47.                     m_EntCopyArr[i].TransformBy(mirrorMt);
  48.                 }

  49.                 m_InverseMt = mirrorMt.Inverse();
  50.                 return SamplerStatus.OK;
  51.             }
  52.             else
  53.             {
  54.                 return SamplerStatus.NoChange;
  55.             }
  56.         }

  57.         public void Unhighlight()
  58.         {
  59.             // 取消源对象的高亮状态.
  60.             for (int i = 0; i < m_EntArr.Length; i++)
  61.             {
  62.                 m_EntArr[i].Unhighlight();
  63.             }
  64.         }
  65.     }
  66. }
书中的核心代码,动态部分,论坛还有更多的代码,大家共同学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2021-1-22 20:46:52 | 显示全部楼层
谢谢楼主,C#小白一个,请教下楼主
C# 分 2007/2008,  2009/2012  ,2013/2021 是因为什么
谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 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#辅助
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2021-1-22 23:51:06 | 显示全部楼层
就是那个多功能复制移动V3.0吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8611个

财富等级: 富甲天下

发表于 2021-1-22 23:56:54 | 显示全部楼层
这个不用Interop.IWshRuntimeLibrary.dll了,不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 64个

财富等级: 招财进宝

发表于 2021-1-23 08:23:57 | 显示全部楼层
很给力的小程序,如果只用lisp就更完美了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2230个

财富等级: 金玉满堂

发表于 2021-1-23 09:33:28 | 显示全部楼层
做个对论坛有益的人。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4365个

财富等级: 富可敌国

发表于 2021-1-25 08:01:05 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3730个

财富等级: 富可敌国

发表于 2021-1-25 08:43:37 | 显示全部楼层
能不能把源码放出来,大家学习学习,共同进步
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2021-1-26 09:00:38 | 显示全部楼层
明经论坛也发一下吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2021-1-26 12:06:39 | 显示全部楼层
dnbcgrass 发表于 2021-1-25 08:43
能不能把源码放出来,大家学习学习,共同进步

lisp是源码,c#的源码是才鸟书中的DrawJig部分代码( AutoCAD VBA & VB.NET开发基础与实例教程(第2版)(C#版) ),我只是修改了局部,加了和lisp之间的互相调用
如果要学习c#,建议买才鸟的书来学习(虽然出了很多年了,依然没过时),有问题大家共同探讨
感谢才鸟曾洪飞等作者的贡献
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

 楼主| 发表于 2021-1-26 12:10:12 | 显示全部楼层
依然小小鸟 发表于 2021-1-26 09:00
明经论坛也发一下吧

明经现在发不了附件、图片等,只有等老大好久有时间和精力了可能才能恢复,做网站也不容易,倒贴钱
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2131个

财富等级: 金玉满堂

发表于 2021-1-26 23:54:15 | 显示全部楼层
这个功能强大。。。。谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8个

财富等级: 恭喜发财

发表于 2021-1-27 13:06:18 | 显示全部楼层
期待能有源码大家一起学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-25 18:53 , Processed in 0.209859 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表