eric45 Posté(e) le 10 mai 2011 Posté(e) le 10 mai 2011 Bonjour, Je voudrais placer des cellules en 2 points: le 1er serait l'origine de la cellule, et le 2ème son orientation mais à distance variable. J'ai bien essayé avec l'option "interactif", mais le 2ème point est en "diagonale" et de plus attend une orientation pour le 3 pt. Est-ce prévu dans Microstation (V8) ? Ou existe t-il une commande ? Merci d'avance Eric
LrDb Posté(e) le 10 mai 2011 Posté(e) le 10 mai 2011 bonjour,Perso j'utilise sur V8 le mdl suivanthttp://communities.bentley.com/other/old_site_image_galleries/member_folders/m/phil_chouinard_bentleys_files/179.aspxcdltLrDb Write a book about what ??
eric45 Posté(e) le 10 mai 2011 Auteur Posté(e) le 10 mai 2011 Bonjour, Merci pour le lien, mais il me demande un login. Je rentre le mien qui fonctionne sur bentley.fr, mais je ne suis pas reconnu... Y a t-il un autre moyen ou site pour télécharger cette application? Merci Eric
LrDb Posté(e) le 10 mai 2011 Posté(e) le 10 mai 2011 J'ai eu le même Pb,j'ai du me faire une autre adresse pour m'inscrire.c'est vraiment select microstation.... voir trop select surtout pour ceux qui ne pipent pas un mot in english...Je pense qu'ils estiment qu'il faut bac+12 pour s'en servir. A bientot, je t'envoie un mail en mp.LrDb Write a book about what ??
eric45 Posté(e) le 10 mai 2011 Auteur Posté(e) le 10 mai 2011 Re,C'est vrai qu'en anglais, c'est pas évident! Et mon niveau scolaire était "moyen" on va dire...Je t'ai répondu au mp, merci encore pour ton aide,@ +Eric
YannPro81 Posté(e) le 10 mai 2011 Posté(e) le 10 mai 2011 De ce que je connais de MicroStation il y a la commande placement de cellule interactive ...1er point : origine de la celluleentrée au clavier : 1 (échelle X)entrée au clavier : 1 (échelle Y)2ième point : orientation la commande c'est : place cell interactive absolute (ou relative) une petite macro peut t'éviter de saisir les échelles ...Faut voir ce que tu veux exactement ...
LrDb Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Bonjour Eric,c'est fait.tu peux charger le mdl à l'ouverture de microstation pour l'avoir "sous la main":Espace de travail>configurationpuis dans catégorie choisi: appl de dessin puis ajoutes celltool.ma. pour compléter YannPro81,on peut aussi se faire un raccourci clavier avec comme commande:(en ayant au préalable choisit sa cellule active "ac=macellule" )"place cell interractive;%d;1;1"le %d permet d'attendre un datapoint1 echelle en X1 echelle en YsltsLrDb Write a book about what ??
eric45 Posté(e) le 11 mai 2011 Auteur Posté(e) le 11 mai 2011 Re, C'est bon, j'ai copié les fichiers au bon endroit, et en effet ca marche! Le seul truc c'est que la cellule n'a pas sa taille variable, le 2ème point sert juste pour son orientation. Idem pour la commande "place cell interactive;%d;1;1", mais pourrait-on mettre autre chose que "1" pour les échelles, qui donnerait une taille variable? En tout cas, merci encore pour toute l'aide @ +Eric
LrDb Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Si tu veux que ton echelle et ton orientation soient en même temps définie par 2 points,je ne pense pas, à ma conaissance, que celà soit possible sur V8.peut être sur V8i? XM?.si un autre utilisateur se manifeste ?sinon tu es obligé de faire une echelle par 3 points proportionnelle.mais tu dois dessiner des cellules de forme rectangulaire, j'imagine ?est ce que ton Echelle est à chaque fois différente d'un élément à l'autre Write a book about what ??
YannPro81 Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Merci à LrDbpour la commande :place cell interactive;%d;1;1j'avais tenté : place cell interactive;1;1;%d ...et ça ne marchait pas !!!pourquoi faut-il inversé alors ???Cela me semble possible de définir l'échelle par le deuxième point ...Suffit de faire une petite macro ...et c'est la distance entre le point 1 et le le point 2 qui définit l’échelle ....Non ?pour répondre à eric45 lorsqu'on met 1 c'est l'échelle donc si tu mets 2 tu auras une cellule 2 fois plus grande ...Ce qui m'embête le plus c'est de devoir définir échelle en X puis échelle en Y !!!pff ! peuvent pas faire plus simple ...Dis moi ce dont tu as besoin ... [Edité le 11/5/2011 par YannPro81]
LrDb Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 à poser dans un module: Sub Placecell0() CommandState.StartPrimitive New p_cell_anG_Sca End Sub à poser dans un module de class appelé "p_cell_anG_Sca" Implements IPrimitiveCommandEvents Private m_atPoints(0 To 1) As Point3d Private m_nPoints As Integer Dim Lg1 As Double Dim Lg2 As Double Private Sub IPrimitiveCommandEvents_Cleanup() End Sub Private Sub IPrimitiveCommandEvents_DataPoint(Point As Point3d, ByVal View As View) If m_nPoints = 0 Then CommandState.StartDynamics m_atPoints(0) = Point m_nPoints = 1 ShowPrompt "Place end point" Dim cel1 As CellElement Set cel1 = CreateCellElement2(ActiveSettings.CellName, m_atPoints(0), Point3dFromXY(1, 1), True, Matrix3dIdentity) Lg1 = cel1.Range.High.X - m_atPoints(0).X ElseIf m_nPoints = 1 Then m_atPoints(1) = Point Dim oCel As CellElement Set oCel = CreateCellElement2(ActiveSettings.CellName, m_atPoints(0), Point3dFromXY(Lg2 / Lg1, Lg2 / Lg1), True, Matrix3dFromAxisAndRotationAngle(2, Atn2(m_atPoints(1).Y - m_atPoints(0).Y, m_atPoints(1).X - m_atPoints(0).X))) ActiveModelReference.AddElement oCel oCel.Redraw m_atPoints(0) = m_atPoints(1) End If End Sub Private Sub IPrimitiveCommandEvents_Dynamics(Point As Point3d, ByVal View As View, ByVal DrawMode As MsdDrawingMode) If m_nPoints = 1 Then m_atPoints(1) = Point Dim oCel As CellElement Lg2 = Abs(Point3dDistance(m_atPoints(0), Point)) Set oCel = CreateCellElement2(ActiveSettings.CellName, m_atPoints(0), Point3dFromXY(Lg2 / Lg1, Lg2 / Lg1), True, Matrix3dFromAxisAndRotationAngle(2, Atn2(Point.Y - m_atPoints(0).Y, Point.X - m_atPoints(0).X))) oCel.Redraw DrawMode Dim oEl As LineElement Set oEl = CreateLineElement1(Nothing, m_atPoints) oEl.Redraw DrawMode End If End Sub Private Sub IPrimitiveCommandEvents_Keyin(ByVal Keyin As String) End Sub Private Sub IPrimitiveCommandEvents_Reset() CommandState.StartPrimitive Me m_nPoints = 0 End Sub Private Sub IPrimitiveCommandEvents_Start() ShowCommand "FROM VBA PlaceLine Example" ShowPrompt "Point d'insertion de la cellule" End Sub me suis inspiré du placement d'une ligne donné en exemple a bientôtLrDb Write a book about what ??
YannPro81 Posté(e) le 11 mai 2011 Posté(e) le 11 mai 2011 Je la teste ce soir ...c'est du VBA ou une macro Basic MicroStation ?je suis resté au Basic MicroStation qui a toujours répondu à mes besoins ....ça se ressemble ...
lrdb@home Posté(e) le 15 mai 2011 Posté(e) le 15 mai 2011 Amélioration quelquesoit le point d'insertion:Module principal Sub Placecell0() If ActiveSettings.CellName = "" Then MsgBox "no active cell" Exit Sub End If Dim oCel As CellElement Set oCel = CreateCellElement2(ActiveSettings.CellName, Point3dZero, Point3dFromXY(1, 1), True, Matrix3dIdentity) If oCel.Range.Low.X - oCel.Range.High.X = 0 Then MsgBox "invalide cell" Exit Sub End If CommandState.StartPrimitive New p_cell_anG_Sca End Sub module de class: Implements IPrimitiveCommandEvents Private m_atPoints(0 To 1) As Point3d Private m_nPoints As Integer Dim Lg2 As Double Dim LgPt As Double Dim Algpt As Double Dim Propp As Double Private Sub IPrimitiveCommandEvents_Cleanup() End Sub Private Sub IPrimitiveCommandEvents_DataPoint(Point As Point3d, ByVal View As View) If m_nPoints = 0 Then CommandState.StartDynamics m_atPoints(0) = Point m_nPoints = 1 ShowPrompt "Place end point" CadInputQueue.SendKeyin "set prompt entrez AX=" Dim cel1 As CellElement Set cel1 = CreateCellElement2(ActiveSettings.CellName, m_atPoints(0), Point3dFromXY(1, 1), True, Matrix3dIdentity) LgPt = Abs(Point3dDistance(cel1.Range.Low, cel1.Origin)) Algpt = Atn2(cel1.Origin.Y - cel1.Range.Low.Y, cel1.Origin.X - cel1.Range.Low.X) Propp = Abs(cel1.Range.Low.X - cel1.Range.High.X) ElseIf m_nPoints = 1 Then m_atPoints(1) = Point Dim oCel As CellElement Set oCel = CreateCellElement2(ActiveSettings.CellName, Point3dAddAngleDistance(m_atPoints(0), Algpt + Atn2(m_atPoints(1).Y - m_atPoints(0).Y, m_atPoints(1).X - m_atPoints(0).X), LgPt * Lg2 / Propp, 1), Point3dFromXY(Lg2 / Propp, Lg2 / Propp), True, Matrix3dFromAxisAndRotationAngle(2, Atn2(m_atPoints(1).Y - m_atPoints(0).Y, m_atPoints(1).X - m_atPoints(0).X))) ActiveModelReference.AddElement oCel oCel.Redraw m_atPoints(0) = m_atPoints(1) End If End Sub Private Sub IPrimitiveCommandEvents_Dynamics(Point As Point3d, ByVal View As View, ByVal DrawMode As MsdDrawingMode) CommandState.ParseAll = False If m_nPoints = 1 Then m_atPoints(1) = Point Dim oCel As CellElement Lg2 = Abs(Point3dDistance(m_atPoints(0), Point)) Set oCel = CreateCellElement2(ActiveSettings.CellName, Point3dAddAngleDistance(m_atPoints(0), Algpt + Atn2(m_atPoints(1).Y - m_atPoints(0).Y, m_atPoints(1).X - m_atPoints(0).X), LgPt * Lg2 / Propp, 1), Point3dFromXY(Lg2 / Propp, Lg2 / Propp), True, Matrix3dFromAxisAndRotationAngle(2, Atn2(m_atPoints(1).Y - m_atPoints(0).Y, m_atPoints(1).X - m_atPoints(0).X))) oCel.Redraw DrawMode Dim oEl As LineElement Set oEl = CreateLineElement1(Nothing, m_atPoints) oEl.Redraw DrawMode End If End Sub Private Sub IPrimitiveCommandEvents_Keyin(ByVal Keyin As String) MsgBox Keyin End Sub Private Sub IPrimitiveCommandEvents_Reset() CommandState.StartPrimitive Me m_nPoints = 0 End Sub Private Sub IPrimitiveCommandEvents_Start() ShowCommand "FROM VBA PlaceLine Example" ShowPrompt "Point d'insertion de la cellule" End Sub write a book about what ??
GEGEMATIC Posté(e) le 23 mai 2011 Posté(e) le 23 mai 2011 Salut,Assez rigolo qu'un aussi bon logiciel comme Microstation, traine toujours les même petits défauts qui lui on couté si cher !Pour le côté vintage, cette routine date de 1998 (Microstation SE)Cette histoire de rotation des blocs nous avais beaucoup emmerdé à l'époque ... En tout cas, tous les bureau d'étude de plus de 10 personne, travailiant sous Autocad, dervrait avoir une licence Ustation : Seul Ustation est capable de réparer les erreurs générées par autocad sur ses propres fichiers ... ' Insere la cellule en mode relatif "cellname" à l'échelle "xscel" et "yscale" ' et à l'angle de rotation "aro" Sub main Dim startPoint As MbePoint Dim point As MbePoint, point2 As MbePoint Dim status% Dim view% Dim numArgs As Integer Dim cellname As String Dim xscale As String Dim yscale As String Dim aro As String ' save the command line arguments to a local variable cmd$ = Command$ ' save the number of arguments in a local variable numArgs = WordCount(cmd$) ' parse the command line arguments and output each individual argument in turn cellname = Word$ (cmd$, 1) xscale = Word$ (cmd$, 2) yscale = Word$ (cmd$, 3) aro = Word$ (cmd$, 4) 'début de la boucle Do 'lance la commande MbeSendKeyin "place cell interactive relative" 'envoi le nom de la cellule MbeSetAppVariable "", "tcb->activecell", cellname ' Wait for a data point or a reset MbeGetInput MBE_DataPointInput, MBE_ResetInput ' if a reset was entered, exit the loop if MbeState.inputType = MBE_ResetInput then Exit Do ' Extract the data point coordinates and view status = MbeState.getInputDataPoint (startPoint,view) ' Send a data point to the current command MbeSendDataPoint startPoint, view 'envoi l'echelle x MbeSendKeyin xscale 'pareil pour y MbeSendKeyin yscale 'et l'angle de rotation MbeSendKeyin aro MbeSendReset Loop End Sub ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant