Vectorisation et Visualisation dans les Dessins

  1. FAQ
  2. »
  3. Vectorisation et gestion des polices
  4. »
  5. Vectorisation et Visualisation dans les Dessins

Comment puis-je obtenir des données de modèle à partir de paperspace?

Vous pouvez utiliser l’OdDbPointRef::mswcsToPswcs(PvP) - DbDimAssoc.h Il renvoie la matrice de transformation entre l'Espace Modèle et l'Espace Papier. Mais la fenêtre d'affichage coupe le contenu de l'espace modèle. Et certaines entités résidant dans l'espace modèle sont visibles dans une seule fenêtre d'affichage (cela n'est pas lié à l'écrêtage).

Vous pouvez utiliser l’OdDbViewport::explodeGeometry() qui résout ces problèmes.

Comment puis-je désactiver l'anticrénelage du k2DOptimized/2dWireframe dans GLES2?

L’anticrénelage des lignes 2d est contrôlé par la variable système LINESMOOTHING. Code:

database()->appServices()->setLINESMOOTHING(0);

Dans ODAMfcApp, il est désactivé par défaut. La variable système LINESMOOTHING active/désactive l'anticrénelage de la géométrie linéaire pour toutes les vues de dessin 2d.

Existe-t-il une limite supérieure au nombre d'entités ou de points pouvant être exportés vers un modèle .dgn?

Les éléments multivertex dgn ont une limite de sommet: la documentation indique que la limite est 5000, mais la limite réelle est 5456.

Vous pouvez diviser des chaînes de lignes trop longues sur votre code d'importation dgn. Et je vous recommande d'utiliser limit == 5000.

Comment puis-je obtenir une entité de vue ou de la base de données par un clic de souris?

ODAMfcApp utilise la méthode l’OdDbSelectionSet::select pour la sélection. Vous pouvez utiliser le mode de sélection kPoint pour sélectionner une seule entité par clic ou kCrossing pour la sélection de plusieurs entités.

Comment puis-je obtenir la géométrie de la fenêtre d'affichage globale?

La fenêtre d'affichage globale est un cas particulier. Il n'a pas de géométrie. Il spécifie les paramètres de la vue de mise en page (centre de vue, niveau de zoom, etc.) pour les entités d'espace Papier/Paper Space. Contrairement à d'autres fenêtres, il n'affiche pas les entités de l'espace Modèle/Model Space.

Puis-je créer et utiliser de plusieurs OdGsView dans l'objet OdGsDevice?

L’OdDbGsManager::setupActiveLayoutViews() peut entrer en conflit avec des vues déjà ajoutées dans le périphérique. Vous pouvez ajouter plus de vues dès que vous appelez l’OdDbGsManager::setupActiveLayoutViews().

Comment déterminer l'ordre de dessin à l'aide de l'OdVectorizer? Lorsque Dumper dans le vectorizer imprime les données, comment savons-nous lesquels doivent être dessinés en bas et lesquels en haut?

L'ordre de dessin n’est utilisé qu’en .dwg pour le style visuel 2dWireframe. La table tri/SortEnts est utilisée pendant le dessin de bloc et l'utilisateur obtient la géométrie dans OdVectorizeEx dans cet ordre.

Tous les autres modes (styles) sont considérés comme 3D, donc la géométrie sera vectorisée dans l'ordre dans lequel elle se trouve dans le bloc, les trieurs/SortEnts ne sont pas appliqués. En 3D, l'ordre de dessin n'est pas important, car le tampon de profondeur est utilisé, la géométrie est dessinée dans l'espace 3D.

Quelle est la différence en vue entre l’OdDbBlockTableRecord::getGeomExtents() et le zoomExtents()?

L’OdDbBlockTableRecord::getGeomExtents() ne prend pas en compte la visibilité des couches. Les calques peuvent être figés dans les fenêtres et les étendues peuvent être différentes dans différentes fenêtres.

Regardez l’AbstractViewPE.h

Cette extension de protocole peut être appliquée à l’OdDbViewport, l’OdDbViewportTableRecord et l’OdDbViewTableRecord.

Regardez code exemple dans Kernel/Examples/Exports/RasterExport

Comment puis-je implémenter une orbite autour d'un point personnalisé? L'intersection du rayon de visualisation déterminé par l'emplacement du clic de souris et la surface de l'objet est le point central de mon choix.

Vous pouvez implémenter l'intersection d'entités à l'aide d'une méthode générique - via la vectorisation d'entités et l'intersection de triangles accumulés. Recherchez le projet ExEntityIntersection - il s'agit du module d'intersection d'entités pour la base de données .dwg. Comme il s'agit d'un exemple, il n'implémente qu'une partie des fonctionnalités pour des entités simples. Mais en fait, les intersections peuvent être résolues pour tout type de graphique avec la vectorisation - cette solution a été utilisée dans le projet ExDgnElementIntersect pour la base de données .dgn. Vous pouvez simplement adopter la solution actuelle pour la base de données .dgn dans ExEntityIntersection pour la base de données .dwg. Vous pouvez également appeler le vectorizer de votre côté et traiter l'intersection des entités sans utiliser les méthodes de l’OdDbEntity::inersectWith().

Comment puis-je extraire une spline dans un fichier .dwg et la dessiner avec des lignes? Existe-t-il un moyen de le faire autrement que de vectoriser?

Vérifiez la commande virtuelle l’OdResult OdDbCurve::getOdGeCurve ( OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol )const; utilisez pGeCurve->getSamplePoints(...) et supprimez l’OdDbCurve;.

Existe-t-il un moyen de rendre un objet personnalisé?

Une entité personnalisée peut être rendue si vous implémentez sa méthode worldDraw() (et viewportDraw() éventuellement).

Comment puis-je comprendre l'ordre des entités de rendu (en modes de rendu filaire 2D et 3D)?

Il fonctionne différemment dans les modes de rendu filaire 2D et 3D.

Dans les modes 3D, l'ordre de rendu dépend de la position des deux entités (laquelle est la plus proche de la caméra). Si les entités sont dans le même plan, le résultat est imprévisible. Dans le wireframe 2D, le mode de rendu dépend de l'ordre de dessin. Par défaut, l'entité qui apparaît en premier dans le fichier est rendue en premier.

Mais cet ordre peut être modifié à l'aide des méthodes OdDbSortentsTable.

La table de tri est renvoyée par la méthode OdDbBlockTableRecord::getSortentsTable() (cela est important pour les blocs de mise en page).

Comment puis-je utiliser les ODAs SDK pour le rendu de dessins sur une page Web?

Par exemple, regardez Online File Converter de ODA, c’est une application Oracle® Java® qui convertit un fichier .dwg en fichier .pdf et affiche un aperçu sur une page Web. Les fichiers sources du convertisseur peuvent être téléchargés au même endroit.

Existe-t-il un moyen de rendre dynamiquement les objets créés sur la vue actuelle en utilisant un mode de rendu différent?

Il n'y a pas de moyen direct de rendre des entités dans une seule vue en utilisant différents modes de rendu. Pour émuler ce comportement, vous pouvez créer des vues supplémentaires qui se chevauchent avec un mode de rendu différent et dessiner dynamiquement des objets créés à l'aide de celui-ci:

  1. Créez la vue intermédiaire (pView->device()->createView).
  2. Ajoutez la vue dans le périphérique en haut de toutes les autres vues (device()->addView (pNewView)).
  3. Copiez tous les paramètres de vue dans la nouvelle vue (pNewView->viewParameters (pView)).
  4. Ajoutez vos dessinables dans la nouvelle vue (pNewView->ajouter (pSelectionRectDrawable)).
  5. Vous pouvez maintenant modifier les paramètres d'affichage (tels que pView->setMode(OdGsView::k2dOptimized)).
  6. device()->mettre à jour()//dessiner.
  7. Vous pouvez maintenant supprimer la nouvelle vue de l'appareil jusqu'à la prochaine mise à jour (device()->eraseView(pNewView)).

Après avoir chargé un fichier palette .png de 1 bit dans un objet l’OdGiRasterImage et en essayant de le rendre à l'aide de rasterImageDc(), la sortie rendue n'affiche pas l'image.

ODA SDK lit et vectorise des images monochromes (.bmp, .tiff, .png) sans utiliser les couleurs de la palette stockées dans l'image. Une couleur foncée à l'intérieur de la palette est remplacée par une couleur de dessin d'arrière-plan (ou par une couleur secondaire définie dans OdGiSubEntityTraits, ou est transparente si la transparence de l'image est activée). Une couleur claire à l'intérieur de la palette est remplacée par la couleur spécifiée dans OdGiSubEntityTraits lors de la vectorisation. Ainsi, vous ne voyez pas votre image car elle est complètement remplie de la couleur d'arrière-plan, mais vous pouvez voir qu'elle est rendue si l'image chevauche une autre géométrie.

Ce comportement est le même que dans l’AutoCAD® d’Autodesk® pour les images monochromes .bmp et .tiff, mais les images .png sont traitées comme des rasters non monochromes.

Comment puis-je annuler la vectorisation?

L’OdGiContext et son héritier l’OdGiBaseVectorizer ont la fonction regenAbort(). Il peut être remplacé pour retourner true et arrêter la vectorisation.

Existe-t-il un ordre fixe de vectorisation d'entité dans un dessin? Est-il modifiable?

L'ordre de vectorisation peut être défini par une table de tri/SortEnts (un objet DbSortentsTable) attachée au BlockTableRecord. S'il n'y a pas de table de tri, les entités viennent généralement dans l'ordre de leur création. Les résultats peuvent être différents pour différents moteurs de rendu. Par exemple, en mode 3D (l'appareil prend en charge le tampon Z), une entité plus proche de vous se trouve au-dessus des autres entités.

Pourquoi chaque objet vectorisé devient-il filaire?

Vos dessins avec des maillages polyface sont probablement stockés en mode de rendu filaire ou 2dWireframe. Les primitives Shell sont remplies par défaut uniquement pour les modes de rendu HiddenLine ou Shaded.