pedroantonio 发表于 2011-6-19 06:20:00

画一个临时的红圈(在重生时被移除)

我需要帮助绘制临时红色圆圈(就像在未找到有效边界时填充命令中的圆圈一样)。
这甚至可以从.net实现吗?
我知道Editor.DrawVector,但那只是为了绘制直线和另一个问题,它在缩放
时被删除 从图案填充中进行功能描述:错误被标记为红色圆圈,即使在放大/缩小后也会保留在屏幕上,它会自动缩放,但在Regen/Redraw时会被删除...
提前感谢任何指示
**** Hidden Message *****

gile 发表于 2011-6-19 07:07:16

嗨,
也许实现一个继承抽象Autodesk.AutoCAD.GraphicsInterface.Glyph类的类。

pedroantonio 发表于 2011-6-19 10:04:28

我想知道的是我能不能接触到?当autocad试图标记错误时执行的net命令/包装程序(如在未连接边界的剖面线实体之后)

Jeff_M 发表于 2011-6-19 13:19:41

对这里有一个简单的例子。要根据屏幕大小自动缩放圆,还需要做更多的工作,但这应该可以让您开始了。
using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Geometry;
using aGi = Autodesk.AutoCAD.GraphicsInterface;
namespace MyTest
{
    public class testing
    {
      private DBObjectCollection m_mrkers = new DBObjectCollection();
      private IntegerCollection intColl = new IntegerCollection();
      
      public void tempcirc()
      {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            doc.CommandWillStart += new CommandEventHandler(doc_CommandWillStart);
            Point3d ctrPt = new Point3d(100,100,0);
            Circle circ = new Circle(ctrPt, Vector3d.ZAxis, 5);
            circ.ColorIndex = 1;
            aGi.TransientManager.CurrentTransientManager.AddTransient(circ, aGi.TransientDrawingMode.DirectTopmost, 128, intColl);
            m_mrkers.Add(circ);
      }
      void doc_CommandWillStart(object sender, CommandEventArgs e)
      {
            if (e.GlobalCommandName.Contains("REGEN"))
            {
                ClearMarkers();
                Document doc = Application.DocumentManager.MdiActiveDocument;
                doc.CommandWillStart -= new CommandEventHandler(doc_CommandWillStart);
            }
      }
      private void ClearMarkers()
      {
                aGi.TransientManager.CurrentTransientManager.EraseTransient(m_mrkers, intColl);
                m_mrkers.Dispose();
                m_mrkers.Clear();
            }
      }
    }

gablackburn 发表于 2011-10-25 16:27:23

我试图用线而不是圆来做类似的事情,但我使用的是VB.NET。我已经用C#to VB转换器转换了Jeff_M的代码,但他的两行代码有问题
…转换为VB代码
文档。CommandWillStart+=新的CommandEventHandler(doc_CommandWillStart的地址)
doc。CommandWillStart-=新的CommandEventHandler(doc_CommandWillStart的地址)
它不理解doc。CommandWillStart并给我一条消息,“公共事件CommandWillStart(…)是一个事件,不能直接调用。当我将鼠标悬停在其蓝色波浪形下划线上时,使用'RaiseEvent'语句引发事件”。intellisense给我的最接近的选项是doc.CommandInProgress。我不明白“举办活动”是什么意思
我是VB.NET和AutoCAD API的新手,因此我提前为自己的密集性道歉。
乔治

fixo 发表于 2011-10-25 17:19:02

而不是这一行(转换后)
doc.CommandWillStart += New CommandEventHandler(AddressOf doc_CommandWillStart)
使用这个
AddHandler doc.CommandWillStart, New CommandEventHandler(AddressOf doc_CommandWillStart)
而不是这一行
'doc.CommandWillStart -= New CommandEventHandler(AddressOf doc_CommandWillStart)
使用下一个:
RemoveHandler doc.CommandWillStart, AddressOf doc_CommandWillStart
此外,如果要绘制多个圆,请尝试以下操作:
      Private Sub ClearMarkers()
            If (m_mrkers.Count) > 0 Then
                For i As Integer = 0 To m_mrkers.Count - 1
                  aGi.TransientManager.CurrentTransientManager.EraseTransient(m_mrkers(i), intColl)
                  m_mrkers(i).Dispose()
                Next
            End If
      End Sub
杰夫抢先一步

gablackburn 发表于 2011-10-26 12:50:44

哇,谢谢fixo,这很快,它像一个魅力。 我不认为我能在很长一段时间内偶然发现这一点。

Kace 发表于 2013-11-1 03:34:04

我遇到了类似的问题,如上所述。
我正在绘制瞬态图形以指示设计中的问题。
当我缩放圆圈时保持原位,但当我重新缩放时,我的圆圈会移动。
我找不到在重新缩放后触发更新图形的事件。有这样的事件吗?
或者与瞬态管理器有关吗?
或者在重新缩放瞬态图形时会发生什么?

guohq 发表于 2016-3-22 06:40:59


如何使用aGi。autocad 2008中的transient manager . currenttransientmanager . add transient?
页: [1]
查看完整版本: 画一个临时的红圈(在重生时被移除)