Trucs et astuces appris au cours Chanfrein Fillet pour le développement Revit PIOTM - AEC Devblog
Trucs et astuces appris au cours Chanfrein Fillet pour le développement Revit PIOTM
Voici une collection de leçons apprises au cours de ce développement de plug-in. Vous pouvez voir tout cela en action avec le code source disponible à Autodesk Labs.
Les points d'intersection entre les murs
Les deux chanfreins et Fillet utilise une méthode clé pour ce plug-in: Curve.Intersect. Fondamentalement, pour une paroi donnée, la commande doit accéder à sa géométrie sous-jacente, une courbe (par exemple la ligne), et par la méthode Intersection trouver le point d'intersection avec une autre courbe. Il est très important de noter que les objets LineSegment (à savoir les lignes finies) ne sont généralement coupent pas, il est donc nécessaire d'utiliser la méthode Curve.MakeUnbound pour créer un objet de ligne (à savoir la ligne infinie). Notez que ce plug-in a été conçu pour fonctionner sur les murs linéaires avec un point d'intersection entre eux.
Organiser la géométrie sous-jacente à créer, si nécessaire la troisième paroi avec l'orientation correcte
Après accès aux courbes des deux parois (par exemple LineSegments), la commande stockent des vecteurs directionnels XYZ pour les deux parois. Tous les calculs sont effectués avec des vecteurs, ce qui est plus cohérente. Notez que les parois sont créés suivant cette orientation, ce qui affecte les côtés internes / externes, ce qui affecte finalement les éléments hébergés (par exemple des portes, fenêtres).
Comme une intersection chanfreinée de parois se composent de redimensionnement de deux parois à partir de son (projetée) point d'intersection, ce PIOTM créé des vecteurs XYZ du point d'intersection le plus proche point de la paroi, qui est utilisé pour trouver le prochain point d'extrémité des parois. Une fois redimensionné, le nouveau mur est créé qui les relie.
Ce fut l'un changeling. Pour créer un congé d'un rayon défini précédemment, la commande doit calculer l'angle de déviation formé entre les parois. Cet angle de braquage est importante, car on utilise pour obtenir la distance de la tangente T dans l'image ci-dessous. Cette longueur de la tangente extérieure représente la distance nécessaire entre le point d'intersection et le point d'extrémité des parois sélectionnées, utilisées pour créer une courbe avec le rayon désiré.
Pour trouver l'angle de braquage, la commande crée deux vecteurs XYZ simultanés, du point des murs plus loin au point d'intersection, puis la méthode Vector.AngleTo obtient l'angle de déviation. Le truc important: la méthode angleTo considère l'orientation du vecteur et, à l'intérieur API Revit, est toujours dans le sens antihoraire, c'est pourquoi ce plug-in reconstitue les vecteurs simultanés, qui obéit à l'image ci-dessus.
Redimensionnement Connects / joint murs
Revit n'accepte pas les changements sur les courbes des murs lorsque l'extrémité de paroi est relié à un autre mur, le truc était d'appeler ici WallUtils.IsWallJoinAllowedAtEnd pour vérifier si cette fin était connecté, puis, le cas échéant, déconnecter avec un appel à WallUtils.DisallowWallJoinAtEnd. suivi d'un appel pour les relier en arrière avec WallUtils.AllowWallJoinAtEnd.
Trucs et astuces appris au cours Chanfrein Fillet pour le développement Revit PIOTM
Voici une collection de leçons apprises au cours de ce développement de plug-in. Vous pouvez voir tout cela en action avec le code source disponible à Autodesk Labs.
Les points d'intersection entre les murs
Les deux chanfreins et Fillet utilise une méthode clé pour ce plug-in: Curve.Intersect. Fondamentalement, pour une paroi donnée, la commande doit accéder à sa géométrie sous-jacente, une courbe (par exemple la ligne), et par la méthode Intersection trouver le point d'intersection avec une autre courbe. Il est très important de noter que les objets LineSegment (à savoir les lignes finies) ne sont généralement coupent pas, il est donc nécessaire d'utiliser la méthode Curve.MakeUnbound pour créer un objet de ligne (à savoir la ligne infinie). Notez que ce plug-in a été conçu pour fonctionner sur les murs linéaires avec un point d'intersection entre eux.
Organiser la géométrie sous-jacente à créer, si nécessaire la troisième paroi avec l'orientation correcte
Après accès aux courbes des deux parois (par exemple LineSegments), la commande stockent des vecteurs directionnels XYZ pour les deux parois. Tous les calculs sont effectués avec des vecteurs, ce qui est plus cohérente. Notez que les parois sont créés suivant cette orientation, ce qui affecte les côtés internes / externes, ce qui affecte finalement les éléments hébergés (par exemple des portes, fenêtres).
Comme une intersection chanfreinée de parois se composent de redimensionnement de deux parois à partir de son (projetée) point d'intersection, ce PIOTM créé des vecteurs XYZ du point d'intersection le plus proche point de la paroi, qui est utilisé pour trouver le prochain point d'extrémité des parois. Une fois redimensionné, le nouveau mur est créé qui les relie.
Ce fut l'un changeling. Pour créer un congé d'un rayon défini précédemment, la commande doit calculer l'angle de déviation formé entre les parois. Cet angle de braquage est importante, car on utilise pour obtenir la distance de la tangente T dans l'image ci-dessous. Cette longueur de la tangente extérieure représente la distance nécessaire entre le point d'intersection et le point d'extrémité des parois sélectionnées, utilisées pour créer une courbe avec le rayon désiré.
Pour trouver l'angle de braquage, la commande crée deux vecteurs XYZ simultanés, du point des murs plus loin au point d'intersection, puis la méthode Vector.AngleTo obtient l'angle de déviation. Le truc important: la méthode angleTo considère l'orientation du vecteur et, à l'intérieur API Revit, est toujours dans le sens antihoraire, c'est pourquoi ce plug-in reconstitue les vecteurs simultanés, qui obéit à l'image ci-dessus.
Redimensionnement Connects / joint murs
Revit n'accepte pas les changements sur les courbes des murs lorsque l'extrémité de paroi est relié à un autre mur, le truc était d'appeler ici WallUtils.IsWallJoinAllowedAtEnd pour vérifier si cette fin était connecté, puis, le cas échéant, déconnecter avec un appel à WallUtils.DisallowWallJoinAtEnd. suivi d'un appel pour les relier en arrière avec WallUtils.AllowWallJoinAtEnd.