unos traba segundos rato queda que porque por pegado momentos laptop congela cada c# .net insert thumbnails autocad

c# - traba - Bloque de inserción de CAD con miniatura debajo del mouse



porque mi mouse se traba a cada rato (2)

Necesito insertar un DWG externo en un dibujo de AutoCAD a través del complemento C #. Necesito "preguntar" al usuario el punto de inserción y la rotación del bloque insertado. Hasta ahora siempre he usado una función de lisp que llama al comando "._- insert" que da una miniatura del bloque debajo del mouse, permite al usuario hacer clic en el dibujo para establecer el punto de inserción y desde ese punto permite usuario para hacer clic una vez más para establecer la rotación. Ahora quiero evitar el uso de Lisp o el uso de API de bajo nivel de AutoCAD porque necesito una solución que se ejecute en varios entornos de CAD. Lo que encontré es algo como esto:

public static void InsertDwg(string dwgName) { CADAPI.ApplicationServices.Document doc = CADAPI.ApplicationServices.Application.DocumentManager.MdiActiveDocument; CADDB.Database db = doc.Database; CADAPI.EditorInput.Editor ed = doc.Editor; CADDB.ObjectId ObjId; using (CADDB.Transaction trx = db.TransactionManager.StartTransaction()) { CADDB.BlockTable bt = db.BlockTableId.GetObject(CADDB.OpenMode.ForRead) as CADDB.BlockTable; CADDB.BlockTableRecord btrMs = bt[CADDB.BlockTableRecord.ModelSpace].GetObject(CADDB.OpenMode.ForWrite) as CADDB.BlockTableRecord; using (CADDB.Database dbInsert = new CADDB.Database(false, true)) { dbInsert.ReadDwgFile(dwgName, CADDB.FileOpenMode.OpenForReadAndAllShare, true, string.Empty); ObjId = db.Insert(Path.GetFileNameWithoutExtension(dwgName), dbInsert, true); } CADAPI.EditorInput.PromptPointOptions ppo = new CADAPI.EditorInput.PromptPointOptions("/nInsertion Point"); CADAPI.EditorInput.PromptAngleOptions ppa = new CADAPI.EditorInput.PromptAngleOptions("/nInsert Rotation"); CADAPI.EditorInput.PromptPointResult ppr; ppr = ed.GetPoint(ppo); CADAPI.EditorInput.PromptDoubleResult ppd = ed.GetAngle(ppa); if (ppr.Status == CADAPI.EditorInput.PromptStatus.OK) { CADGEOM.Point3d insertPt = ppr.Value; CADDB.BlockReference bref = new CADDB.BlockReference(insertPt, ObjId); btrMs.AppendEntity(bref); trx.AddNewlyCreatedDBObject(bref, true); trx.Commit(); } } }

Pero aquí tengo dos problemas: el principal es que no hay vista previa debajo del mouse. El segundo es que el usuario debe hacer clic 3 veces en lugar de 2 para establecer tanto el punto de inserción como la rotación.

¿Hay alguna forma de que no use algún tipo de SendCommand y haga todo esto? TIA


Parece que Jigging es el camino a seguir para permitir la vista previa. Tengo tres enlaces para ti.

El primero es un ejemplo de creación de una plantilla simple con polilíneas; podría extender esto a un bloque.

El segundo enlace es similar pero aplica rotación a la mezcla. Esto se aplica a un rectángulo, pero de nuevo podría modificarse para acomodar un bloque.

El tercer enlace describe un método diferente: la interfaz de gráficos transitorios de AutoCAD. Debe usar AutoCAD 2009 o posterior para usar este método.

Los dos últimos enlaces provienen del blog A través de la interfaz , donde puede encontrar más ejemplos y es un muy buen punto de partida si tiene problemas, especialmente para codificar C #.


Querrá utilizar la clase AcEdJig. Proporciona la vista previa. Tendrá que escribir el código para recoger el punto de inserción y la rotación, y para transformar el bloque en consecuencia.

Aquí está el primer enlace de mi búsqueda de Google, por ejemplo, código de uso.