Aller au contenu

Utilisation de linq pour filtrer des entitées


coyotte

Messages recommandés

Salut,

 

En programmation je sais pas mais sinon tu peux :

 

Sélectionner l'ensemble de tes polylignes (2D et 3D)

Clic droit

Propriétés

sélection rapide (carré vert petite fléche et éclair)

ensuite tu sélectionne type d'objet (ex: polylignes 2D)

Dans opérateur (menu déroulant en bas) "Tout sélectionner"

et pis t'a toutes tes polylignes 2D

 

Pareil que ce sois blocs ou autres cela fonctionne.

"98% des soucis informatiques sont assis entre la chaise et le bureau !"

 

"C'est parce que la vitesse de la lumière est supérieure à celle du son que tant de gens paraissent brillants avant d'avoir l'air con."
Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un exemple pour récupérer les polylignes 2d et 3d dans tous les espaces.

 

private static IEnumerable<ObjectId> GetPolylines2d3dIds(Database db)
{
   var pline2dClass = RXClass.GetClass(typeof(Polyline2d));
   var pline3dClass = RXClass.GetClass(typeof(Polyline3d));
   using(Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
   {
       var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
       return bt
           .Cast<ObjectId>()
           .Select(id => (BlockTableRecord)tr.GetObject(id, OpenMode.ForRead))
           .Where(btr => btr.IsLayout)
           .SelectMany(btr => btr.Cast<ObjectId>())
           .Where (id => id.ObjectClass == pline2dClass || id.ObjectClass == pline3dClass);
   }
}

 

L'équivalent en F# montre bien comment Linq s'est inspiré de F# pour introduire la programmation fonctionnelle en C# (et VB).

 

let getPolylines2d3dIds (db : Database) =
   let pline2dClass = RXClass.GetClass(typeof<Polyline2d>)
   let pline3dClass = RXClass.GetClass(typeof<Polyline3d>)
   use tr = db.TransactionManager.StartOpenCloseTransaction()
   tr.GetObject(db.BlockTableId, OpenMode.ForRead) :?> BlockTable
   |> Seq.cast<ObjectId>
   |> Seq.map (fun id -> tr.GetObject(id, OpenMode.ForRead) :?> BlockTableRecord)
   |> Seq.collect(fun btr -> Seq.cast<ObjectId> btr)
   |> Seq.filter(fun id -> id.ObjectClass = pline2dClass || id.ObjectClass = pline3dClass)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité