Selecionar e mover um bloco?
Olá!
Galera, estou iniciando meus estudos no ObjectARX .net, gostaria de uma ajuda, um exemplo, uma dica, pode ser em c# ou vb, preciso selecionar um bloco de forma automática, o seja sem clicar sobre o bloco e mover ele para uma nova posição.
Valeu galera, qualquer ajuda é bem vinda!
Re: Selecionar e mover um bloco?
Eugenio,
Se vc quer selecionar um bloco sem clicar no bloco, é necessário ter algum critério de seleção. Por exemplo: vc quer mover todos os blocos? somente as referencias de bloco de um determinado bloco? etc.
Após selecionado e aberto, a referencia pode ser movida através da propriedade que define a posição.
Boa sorte,
Re: Selecionar e mover um bloco?
Olá Augusto!
Na verdade possuo um desenho de um braço mecânico, este braço é formado por blocos, quero dar movimeto a este braço mecânico, vou mover cada bloco por vez, por este motivo preciso selecionar o bloco sem clicar sobre ele para seleciona-lo e logo em seguida mover sua posição. Tenho todas as informações deste bloco, nome, posição inicial... qualquer dica é muito bem vinda!!!
Re: Selecionar e mover um bloco?
Eugenio,
Entendi....acredito que vc pode selecionar os blocos pelo nome a partir da BlockTable. Então mudar a propriedade Position.
Acredito que vc me enviou um email algum tempo atrás (06/05/09). Esta mensagem chegou corretamente?
Re: Selecionar e mover um bloco?
[CommandMethod("mover")]
public void mover()
{
Database acadDB = HostApplicationServices.WorkingDatabase;
Autodesk.AutoCAD.DatabaseServices.TransactionManager
acadTransmgr = acadDB.TransactionManager;
Transaction acadTrans = acadTransmgr.StartTransaction();
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
try
{
PromptSelectionOptions selOpts = new PromptSelectionOptions();
PromptSelectionResult res = ed.SelectAll(new SelectionFilter
(new TypedValue[] { new TypedValue(0, "INSERT"),
new TypedValue(2, "A$C36615BC7")})); //Nome do bloco
Autodesk.AutoCAD.EditorInput.SelectionSet SS = res.Value;
Point3d fromPt;
Point3d toPt;
fromPt = new Point3d(0, 0, 0);
//ptTo = ed.GetPoint("Pick a to point");
toPt = new Point3d(1, 0, 0);
//toPt = ptTo.Value;
Vector3d moveVec = new Vector3d(toPt.X - fromPt.X, toPt.Y - fromPt.Y, toPt.Z - fromPt.Z);
ObjectId[] idarray = SS.GetObjectIds();
foreach (ObjectId id in idarray)
{
Entity ent = (Entity)acadTrans.GetObject(id, OpenMode.ForWrite, true);
Matrix3d moveMat = Matrix3d.Displacement(moveVec);
ent.TransformBy(ent.Ecs.PostMultiplyBy(moveMat));
}
acadTrans.Commit();
}
catch (System.Exception ex)
{
ed.WriteMessage(ex.ToString());
acadTrans.Abort();
}
finally
{
acadTrans.Dispose();
}
}
Bom galera, eu fiz desta forma, não sei se está correto mais deu certor!