2016-06-09 2 views
1

J'ai du mal à calculer une ligne parallèle à la ligne existante sur une certaine distance.Calcul de la courbe de décalage avec Teigha 4.1.1

J'ai essayé:
OdGeLine2d::getTrimmedOffset()
OdGeLineSeg2d::getTrimmedOffset()
OdGeLine3d::getTrimmedOffset()
OdGeLineSeg3d::getTrimmedOffset()

mais tous Trow un "Non implémenté" exception. Puis j'ai essayé d'utiliser une classe OdGeOffsetCurve2d

La construction de cette classe ne lance pas d'exception, mais n'importe quelle tentative pour obtenir un point de cette courbe le fait. Même exception: "Non implémenté".

Alors, comment obtenir un point qui se trouve sur leOdGeOffsetCurve2d? Ou existe-t-il un autre moyen de calculer une courbe de décalage?

Et à quoi servent toutes ces méthodes getTrimmedOffset()? Juste pour jeter des exceptions?


PS: Je n'ai pas assez réputation pour créer une nouvelle Teigha tag. S'il vous plaît, faites-le et éditez ma question. Teigha est une bibliothèque de base pour développer des applications CAO https://www.opendesign.com/.

Répondre

1

Si je comprends bien, vous essayez de créer une ligne parallèle à une ligne déjà existante.

Si vous ne cherchez pas spécifiquement OdGeLine2d, j'ai une solution pour un problème similaire avec OdDbLine. Comme vous le savez déjà, pour construire une nouvelle ligne si nous avons ses points d'extrémité reste est de jouer.
Je vais donc vous aider à trouver des points de fin de ligne parallèle avec OdDbLine Class. Vous pouvez essayer d'en dériver. Mon code est le code de version .Net et non le code C++.

Si vous avez et objet de OdDbLine classe permet de dire OdDbLine line

  • a) Obtenez son extrémité Points

    OdGePoint3d startPoint = new OdGePoint3d(); line.getStartPoint(startPoint);
    OdGePoint3d endPoint = new OdGePoint3d(); line.getEndPoint(endPoint);

  • Obtenez la direction de la ligne, l'utiliser pour calculer perpendiculaire direction
    OdGeVector3d lineVector = GetLineVector(line); OdGeVector3d perpendicularVec = lineVector.perpVector(); perpendicularVec.normalize(); perpendicularVec = perpendicularVec.Mul(-1);

  • OFFSET la fin de ligne Points à des points d'extrémité de décalage calculé
    valeur de décalage est la distance numérique de votre ligne actuelle perpendicularVec.setToProduct(perpendicularVec, offSetValue);

  • nouveaux points finaux calcule Point à décalage Emplacement
    OdGePoint3d newOffsetStartPt = startPoint.Add(perpendicularVec); OdGePoint3d newOffsetEndPt = endPoint.Add(perpendicularVec);

    Vous pouvez utiliser les nouveaux points de terminaison pour construire une nouvelle ligne.
  • Hope it helps !!

    +0

    Merci! C'est super de voir un expert de Teigha ici. – Tomas

    0

    Il existe un moyen plus court de créer une courbe de décalage pour une entité linéaire. Vous pouvez faire une copie de votre ligne et la déplacer (la transformer) à une distance nessaire. Comme ceci:

    OdGeLine2d ln(OdGePoint2d::kOrigin, OdGeVector2d::kXAxis); 
    const double dOffsetDistance = 100.0; 
    
    OdGeVector2d vOffset = ln.direction().perpVector(); //ccw rotation 
    vOffset.normalize(); 
    vOffset *= dOffsetDistance; 
    
    ln.transformBy(OdGeMatrix2d::translation(vOffset));