2016-03-15 3 views
0

Dans ModelSpace, j'ai une zone limitée par certaines courbes (jointes pour avoir AcDbRegion).Comment puis-je vérifier si la ligne ou le point est à l'intérieur ou à l'extérieur de la zone

J'ai également dessiné AcDbLine.

Ce dont j'ai besoin est de diviser la ligne pour obtenir des lignes uniquement dans la zone.

Je sais comment obtenir des points d'intersection, mais comment puis-je trouver si la ligne qui relie deux points d'intersection est à l'intérieur? ou à l'extérieur?

Répondre

2

Si vous voulez le faire manuellement (avec un algorithme qui fonctionne avec toutes les API), je vous suggère d'utiliser le « numéro d'enroulement algorithme » dans le but de Point Dans le calcul Polygon. Il ne prend pas en compte les renflements dans le polygone, mais il est très rapide est mis en œuvre correctement, ce qui me permet de battre l'API d'AutoCAD par un pli de 2x.

Une autre possibilité consiste à dessiner une ligne temporaire à partir du point que vous testez jusqu'à l'infini et à tester le nombre d'intersections avec votre polyligne. Si le nombre d'intersections est impair, alors vous êtes à l'intérieur de la polyligne; si c'est pair, alors vous êtes en dehors de la polyligne. Si le test d'intersection est fait avec l'API de l'application, il faut prendre en compte les bluges dans les sommets de la polyligne.

+0

Mais finalement, la réponse d'Augusto Goncalves est la bonne pour l'API d'AutoCAD ..... – JFTxJ

+0

Bonne idée. Pour sûr, je dois considérer les segments renflés. J'ai la région et la ligne. Ils se croisent en permet de dire 4 points. Je dois donc vérifier quels couples de points sont à l'intérieur ou à l'extérieur de la zone (région). La ligne entre deux points intersecte toujours la région dans les deux extrémités. Mais je peux utiliser StartPoint et prendre la direction de EndPoint, avec une grande distance. si une telle ligne intersecte la région même à plusieurs reprises, la ligne est à l'intérieur. et c'est ce dont j'ai besoin. MERCI –

4

Avez-vous essayé l'API BREP? Essayez ligne quelque chose ceci:

Autodesk.AutoCAD.BoundaryRepresentation.Brep brepEnt = new Brep(myRegion); 
PointContainment pointCont; 
brepEnt.GetPointContainment(thePoint, out pointCont); 
if (pointCont == PointContainment.Inside) 
{ 

} 
+0

Cela semble intéressant, mais il y a un autre problème. Mes applications fonctionnent sur ZWCAD. Comme je sais (peut-être que je me trompe), ZRX ne contient pas de BREP. –

+0

Désolé, je ne parle pas de leur API ... –

0
  1. Obtenez le polyligne qui définit l'extérieur de votre région.

  2. Sélectionnez par polygone en utilisant les sommets de polyligne de la région. Ou sélectionnez en croisant le polygone en utilisant les sommets de la polyligne si vous voulez tout à l'intérieur ou traverser la région.

+0

OK J'ai des lignes et des points d'intersection, donc je peux diviser la ligne en plusieurs courbes, puis je peux sélectionner par sommets, mais: 1. acedSSGet ne fonctionne que sur la zone visible. mais je ne suis pas sûr de dessiner par ARX dans une zone visible, je peux zoomer, mais cela rend l'application "clignotante" et l'utilisateur ne l'aimera pas je suppose 2. Je peux choisir par sommets, mais qu'en est-il des bombements? traversant par polygone laissez-moi sélectionner avec des segments d'arc? –