Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. (gile)

    lissage/balayage

    Le volume est: 10268981504.6
  2. (gile)

    Une expérience nouvelle !!!

    Salut, Je trouve ça scandaleux. Pôle Emploi ne se préoccupe que de statistiques et placer des gens en formation fait baisser d'autant le nombre de demandeurs d'emploi, si en plus on peut le faire à moindre coût... Du point de vue du formateur (je l'ai été) je ne pense pas qu'on puisse offrir une prestation de qualité dans ces conditions (sans vouloir minimiser les compétences de Christian) en tout cas pas de la même qualité qu'avec des groupes plus homogènes. En gros, au lieu de faire deux formations on n'en fait qu'une (et n'est payé que pour une) malgré le fait que ça demande globalement plus de travail. Du point de vue des stagiaires, je l'ai été aussi et j'aurais vraiment considéré ça comme du foutage de gueule de n'avoir le formateur qu'à mi-temps et qu'il ne soit pas disponible pour m'aider pendant mes travaux pratiques.
  3. (gile)

    Unités de dessin

    Salut, Seuls AutoCAD Architecture, AutoCAD MEP (et peut-être Civil 3D, mais je ne suis pas certain) permettent de paramétrer des unités de longueurs pour l'espace objet (avec la commande DWGUNITS). AutoCAD classique (Vanilla) et les autres verticaux n'utilisent que des "unités d'insertion" (paramétrables avec les variables systèmes INSUNITS, INSUNITSDEFSOURCE et INSUNITSDEFTARGET) qui servent à mettre automatiquement à l'échelle les blocs insérés. En dehors de ça, il n'y a pas de correspondance entre une unité de dessin en espace objet et les unités métriques (ou impériales) qui soit liée au dessin. Dans ces versions, la commande -DWGUNITS existe aussi mais ne sert qu'à créer un dictionnaire pour stocker ces données dans une optique de compatibilité avec les logiciels AEC mais sans les utiliser. Donc ce que tu dis dépend du type d'AutoCAD que tu utilises et de ce que entend par : "je les ai tous mis en centimètre". Si tu ne précises pas ça, je crains que personne ne puisse te donner une réponse pertinente.
  4. line.TransformBy(ed.CurrentUserCoordinateSystem.Inverse()); devrait fonctionner.
  5. Raté! ;) Comment ? en les ajoutant directement à l'espace courant par programmation ou en utilisant la commande _LINE ? Tu veux transformer les entités Line du SCU vers le SCG ou traduire les coordonnées de points de départ et de fin des lignes due SCU vers le SCG sans modifier les lignes ? Ça serait tellement plus simple si tu postait un extrait significatif de ton code...
  6. (gile)

    AutoCAD 2020 est sorti !

    Par contre, dans le Readme du hotfix, il ne disent pas de "débloquer"* le zip avant d'extraire les DLLs. Pour ma part, je recommanderais de toujours "débloquer" un zip téléchargé depuis internet (a fortiori s'il contient des DLLs). * clic droit > Propriétés > onglet Général > Débloquer
  7. (gile)

    AutoCAD 2020 est sorti !

    Oui! Merci Steven! Ça repose d'entendre de lire autre chose que les sempiternels "râlages" à chaque sortie d'une nouvelle version...
  8. Salut, La commande native APLANIRGEOM gère très bien les solides 3d.
  9. (gile)

    Overrule

    Pour les amateurs, vous pouvez télécharger et installer PolylineOverruleSetup.msi. Le plugin est compatible à partir de AutoCAD 2013. Deux commandes SEGLEN_OVERRULE_ON et SEGLEN_OVERRULE_OFF pour respectivement activer ou désactiver l'overrule sur les polylignes sélectionnées. Les commandes sont accessibles depuis le menu contextuel quand seulement des polylignes sont sélectionnées : Polyligne overrule > Actif > inactif La hauteur de texte et le nombre de décimales affichées sont tirés des valeurs de TEXTSIZE et LUPREC au moment de la création du lancement de SEGLEN_OVERRULE_ON (on peut modifier ces valeurs a posteriori et relancer la commande).
  10. Salut, Comme l'a dit didier, le principal problème vient du type d'entité (Surface). Comme les solides 3d ou les régions, ces objets n'exposent leur géométrie (et encore, uniquement les contours) qu'avec .NET ou ObjectARX. Ce que tu demandes n'est donc pas une petite bricole et demanderait à un développeur .NET ou ObjectARX d'y passer plusieurs heures.
  11. Salut, Pour supprimer les 6 premiers caractères d'une chaine : (substr "\pxqc;4224408001\PChaufferie Urbaine" 6) Pour les formatages de MText, tu as mal cherché, il y a plusieurs routines notamment le puissant StripMtext.
  12. (gile)

    Lisps de gile

    Salut, Si tu parles bien du plugin Increment, il n'y a pas de tolérance dans la comparaison des coordonnées (on compare donc à la 15ème ou 16ème décimale).
  13. (gile)

    Overrule

    Je rappelle juste ce que je répondais à Patrick réponse #5 : les textes ne sont affichés que si l'extension (DLL) est chargée, sinon, la polyligne s'affiche normalement. Donc transmettre un fichier suppose de transmettre aussi l'extension et de l'installer. Il existe de nombreux LISPs qui le font en ajoutant des entités texte (CF SegLen) ce qui simplifie l'échange de fichiers.
  14. (gile)

    Overrule

    Merci. C'était juste un exemple, pas vraiment suffisamment abouti pour être publié.
  15. Salut, La question n'est pas très précise. Tout d'abord, la notion de SCU n'est exploitable que pour le SCU courant ou un un SCU enregistré. Contrairement à un objets 2d comme un arc, un cercle, une polyligne, un texte, etc. une ligne est objet 3d qui n'est donc pas liée à un plan (autrement dit à un SCO). Toutefois, le type Line a une propriété Normal qui semble correspondre (je n(en suis pas sûr) au vector normal du plan du SCU courant lors de la construction de la ligne. On peut donc créer un plan parallèle à celui-ci pour construite une matrice avec Matrix3d.PlaneToWorld. var plane = new Plane(Point3d.Origin, line.Normal); line.TransformBy(Matrix3d.PlaneToWorld(plane)); Ceci dit, s'il s'agit du SCU courant, la matrice de transformation entre le SCU courant et le SCG s'obtient avec la propriété Editor.CurrentCoordinateSystem. Pour un SCU enregistré (UCSTableRecord), on peut reconstituer une matrice depuis ses propriétés.
  16. (gile)

    Overrule

    Non, ça n'est pas persistant, il faut que l'application qui définit l'objet Overrule soit chargée. Et c'est plus proche d'un objet personnalisé (comme on peut en faire avec ObjectARX) que d'un réacteur (ou un gestionnaire d'évènement). Si elle n'est pas chargée, la polyligne est affichée "normalement".
  17. Salut, Juste pour le fun. Les objets overrule permettent "d'outre-passer" l'affichage des entités AutoCAD, on peut, par exemple ajouter du texte à une polyligne* pour afficher dynamiquement les longueurs des segments, et ce, avec un code relativement concis. * les textes font partie intégrante de la polyligne La définition de l'overrule : using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.GraphicsInterface; using AcDb = Autodesk.AutoCAD.DatabaseServices; namespace LabelPolylineOverruleSample { class LabelPolylineOverrule : DrawableOverrule { TextStyle textStyle; public LabelPolylineOverrule() { textStyle = new TextStyle() { FileName = "Arial", TextSize = 2.5 }; } public override bool WorldDraw(Drawable drawable, WorldDraw wd) { var pline = (AcDb.Polyline)drawable; var nbSegments = pline.Closed ? pline.NumberOfVertices : pline.NumberOfVertices - 1; var point = default(Point3d); var direction = default(Vector3d); string text = null; for (int i = 0; i < nbSegments; i++) { if ((int)pline.GetSegmentType(i) < 2) { switch (pline.GetSegmentType(i)) { case AcDb.SegmentType.Line: var line = pline.GetLineSegmentAt(i); point = line.MidPoint; direction = line.Direction; text = line.Length.ToString("0.00"); wd.Geometry.WorldLine(line.StartPoint, line.EndPoint); break; case AcDb.SegmentType.Arc: CircularArc3d arc = pline.GetArcSegmentAt(i); var startParam = arc.GetParameterOf(arc.StartPoint); var endParam = arc.GetParameterOf(arc.EndPoint); point = arc.EvaluatePoint((startParam + endParam) / 2.0); direction = arc.StartPoint.GetVectorTo(arc.EndPoint).GetNormal(); text = arc.GetLength(startParam, endParam, 0.0).ToString("0.00"); wd.Geometry.CircularArc(arc.StartPoint, point, arc.EndPoint, ArcType.ArcSimple); break; default: break; } if (direction.X < 0) direction = direction.Negate(); var extents = textStyle.ExtentsBox(text, false, false, wd); point -= direction * (extents.MaxPoint.X - extents.MinPoint.X) / 2.0; point += direction.GetPerpendicularVector() * 1.25; wd.Geometry.Text(point, pline.Normal, direction, text, false, textStyle); } } return true; } } } Une commande de test : using Autodesk.AutoCAD.ApplicationServices.Core; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; namespace LabelPolylineOverruleSample { public class Commands { static LabelPolylineOverrule overrule; static string regAppName = "LABEL_POLYLINE"; static Commands() { overrule = new LabelPolylineOverrule(); Overrule.AddOverrule(RXObject.GetClass(typeof(Polyline)), overrule, false); overrule.SetXDataFilter(regAppName); Overrule.Overruling = true; } [CommandMethod("TEST")] public static void Test() { var doc = Application.DocumentManager.MdiActiveDocument; var db = doc.Database; var ed = doc.Editor; var options = new PromptEntityOptions("\nSelect polyline: "); options.SetRejectMessage("\nSelected object is not a polyline."); options.AddAllowedClass(typeof(Polyline), true); var result = ed.GetEntity(options); if (result.Status != PromptStatus.OK) return; using (var resBuf = new ResultBuffer(new TypedValue(1001, regAppName), new TypedValue(1000, "Dummy text"))) { AddXdata(result.ObjectId, resBuf, db); } } private static void AddXdata(ObjectId id, ResultBuffer resBuf, Database db) { using (Transaction tr = db.TransactionManager.StartTransaction()) { var regAppTable = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForRead); if (!regAppTable.Has(regAppName)) { var regApp = new RegAppTableRecord() { Name = regAppName }; regAppTable.UpgradeOpen(); regAppTable.Add(regApp); tr.AddNewlyCreatedDBObject(regApp, true); } var pline = (Polyline)tr.GetObject(id, OpenMode.ForWrite); pline.XData = resBuf; tr.Commit(); } } } }
  18. Salut, Le type MText fournit les propriétés ActualWidth et ActualHeight qui correspondent respectivement à la largeur et la hauteur de la boite englobant le texte. En combinant ces valeurs avec le point d'attachement (Location) et la justification (Attachment) on peut reconstituer le rectangle englobant, en intégrant, bien sûr, une éventuelle Rotation. Ci-dessous, une méthode d'extension qui renvoie les points (SCG) des coins de ce rectangle (bas_gauche, bas_droit, haut_droit, haut_gauche). public static Point3d[] GetMtextBoxCorners(this MText mtext) { Vector3d disp = new Vector3d(); double width = mtext.ActualWidth; double height = mtext.ActualHeight; switch (mtext.Attachment) { case AttachmentPoint.BottomRight: disp = new Vector3d(-width, 0.0, 0.0); break; case AttachmentPoint.BottomCenter: disp = new Vector3d(-width / 2.0, 0.0, 0.0); break; case AttachmentPoint.BottomLeft: default: break; case AttachmentPoint.MiddleRight: disp = new Vector3d(-width, -height / 2.0, 0.0); break; case AttachmentPoint.MiddleCenter: disp = new Vector3d(-width / 2.0, -height / 2.0, 0.0); break; case AttachmentPoint.MiddleLeft: disp = new Vector3d(-width / 2.0, 0.0, 0.0); break; case AttachmentPoint.TopRight: disp = new Vector3d(-width, -height, 0.0); break; case AttachmentPoint.TopCenter: disp = new Vector3d(-width / 2.0, -height, 0.0); break; case AttachmentPoint.TopLeft: disp = new Vector3d(0.0, -height, 0.0); break; } var xform = Matrix3d.Displacement(mtext.Location.GetAsVector()) * Matrix3d.Rotation(mtext.Rotation, mtext.Normal, Point3d.Origin) * Matrix3d.PlaneToWorld(new Plane(Point3d.Origin, mtext.Normal)) * Matrix3d.Displacement(disp); return new Point3d[4] { Point3d.Origin.TransformBy(xform), new Point3d(width, 0.0, 0.0).TransformBy(xform), new Point3d(width, height, 0.0).TransformBy(xform), new Point3d(0.0, height, 0.0).TransformBy(xform) }; }
  19. Brillant, comme d'habitude. ;)
  20. (gile)

    Nouveau Site Perso

    Salut, Juste un truc, pour aborder la notion de bulge sans passer par les angles et la trigonométrie (certains sont allergiques), on peut aussi définir le bulge comme le rapport entre la flèche et demi-corde (on peut y percevoir la notion de courbure), reste juste à préciser le sens (horaire ou anti-horaire) par le signe. Une petite remarque : "Si, au lieu du quart de la tangente de l'angle les développeurs avaient choisi la moitié de la tangente, il aurait fallu gérer les angles supérieurs à 180 ° par une valeur de signe alors qu'avec le quart de la tangente..." Il s'agit plutôt de la tangente du quart de l'angle (ou du demi angle).
  21. (gile)

    Macro VBA " métré"

    Salut, As-tu téléchargé et installé le module VBA ?
  22. Il s'agit d'un accent grave (pour les voyelles), il faut taper un un autre caractère (ou espace) pour le voir.
  23. Oups, AltGr+7
  24. Oui, (AltGr+5), ne pas oublier l'astérisque après le U : "`*U*"
×
×
  • 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é