Hi All:
How do you copy elements from one .dgn file to another and keep the elements at the same x, y.
In AutoCad I would copy and paste at 0,0...but can't find the command in Microstation.
Thanks!
If you've ever tried to copy elements from an XREF in AutoCAD, you might think the process in MicroStation is fraught with peril, but MicroStation's Reference Files are far more flexible and friendly than AutoCAD.
The idea of attaching a reference file to copy a few elements from another file seems very foreign to an AutoCAD user, but long before either of these packages supported the Windows Clipboard, that was the only way to do this. In AutoCAD, you would have to WBLOCK out the elements and INSERT and EXPLODE to accomplish the same thing. And that left the DWG sitting somewhere on your drive.
With the MicroStation workflow, the preocess was simple and fast. And everyone used the XY, DX, DL keyins all of the time, so they were like second nature.
Charles (Chuck) Rheault CADD Manager
MDOT State Highway Administration Maryland DOT - State Highway Administration User Communities Page
This works for me...
neilw,
Your'e right. The tentative snap method only works with a reference element. Luckily for me this is often what i need. But how to do it relative to 0,0 without having an element there I don't know.
Hi again neilw,
Not saying it's optimal, but this method might be something to give a chance.
Select element to copy, then run the following macro:
(The VBA-script places a point in 0,0 then makes a tentative snap to it and copies the selection to the clipboard.)
Sub copyatzero()
Dim startPoint As Point3d
Dim point As Point3d, point2 As Point3d
Dim lngTemp As Long
' Start a command
CadInputQueue.SendCommand "PLACE POINT"
' Coordinates are in master units
startPoint.X = 0
startPoint.Y = 0
startPoint.Z = 0#
' Send a data point to the current command
point.X = startPoint.X
point.Y = startPoint.Y
point.Z = startPoint.Z
CadInputQueue.SendDataPoint point, 1
' Send a tentative point
CadInputQueue.SendTentativePoint Point3dFromXYZ(0, 0, 0#), 1
CadInputQueue.SendCommand "MDL KEYIN CLIPBRD CLIPBOARD COPY"
CommandState.StartDefaultCommand
End Sub
Go to the other file and ctrl+v. You have to snap to 0,0 in the other file yourself. (The last step is probably possible to script as well, but I won't do it now.)
Posting the paste script as well. If you assign these two scripts to two corresponding buttons you have a good copy/paste to original coordinates functionality.
Sub Pasteatzero()
CadInputQueue.SendCommand "MDL KEYIN CLIPBRD CLIPBOARD PASTE"
startPoint.X = 0#
startPoint.Y = 0#
' Send a reset to the current command
CadInputQueue.SendReset
have you all watched: NINJA POINT (some more to laugh)
communities.bentley.com/.../paste-elements-at-same-graphical-location.aspx
Regards
Frank
since 1985: GIS, CAD, Engineering (Civil) Senior Consultant : [Autodesk Civil 3D , Esri ArcGIS, VertiGIS: in previous days : Bentley MS V4 - V8i, GeoGraphics, Bentley Map V8i, InRoads, HHK Geograf, IBr DAVID] : Dev: [C, C++, .NET, Java, SQL, FORTRAN, UML][direct quote by: http://en.wikipedia.org/wiki/Helmut_Schmidt]: "Wer Kritik übel nimmt, hat etwas zu verbergen"Wer Grammatik- und/oder Rechtschreibfehler findet, der darf sie behalten :-)
I thought that it should be possible to skip the point placement - who wants to leave an point at 0,0,0 in a file anyway? However, it appears that a tentative snap in space is not the same as a tentative snap on an element.
So it might be possible to place the point, snap to it, copy to clipboard and undo the point placement. Or to place a transient element at 0,0,0 which would simply go away on its own.
And with this code:
If Not ActiveModelReference.AnyElementsSelected Then
ShowError "The macro requires a selection set"
Exit Sub
End If
You can even exit if no selection set is active.
One more thing - on the Pasting End ...
The simple key-in of XY= is sufficient to specify a paste point of 0,0,0
Actually the point is not left in the file after the script has run.
Of course it's possible to develop the script further as you suggest, but I'm no expert at VBA so I leave it to others.
Should we really have to go through all this trouble just to set a base point? Autocad has the feature built in.
Neil Wilson (aka Neilw)
Power Civil v8i 08.11.07.245
AutoCAD Civil 3D 2018
When I tried it, it certainly was left in the first file. However, here is a version that uses a transient element and eliminates the problem. I added the test for a selection set, added code so the last view used by the user is used for the copy. This can be critical if view 1 is rotated from top orientation but the user was working in a different view.
Sub CopyClipboardWithBasePoint()
Dim ele As LineElement
Dim flags As MsdTransientFlags
Dim activeView As View
' Exit the macro if there is no selection set and explain it to the user...
' Get the last view a user interacted with since we want to copy
' the selection set based upon that view.
Set activeView = CommandState.LastView
' Use this pair of flags to make the elements in the container snappable and
' to make them display on top of other elements
flags = msdTransientFlagsOverlay + msdTransientFlagsSnappable
Set ele = CreateLineElement2(Nothing, Point3dFromXYZ(0#, 0#, 0#), Point3dFromXY(0#, 0#))
' Create a new container and put a copy of the element into it. The container holds a copy;
' changes to the original element are not displayed.
'
Set tec1 = CreateTransientElementContainer1(ele, flags, msdViewAll, msdDrawingModeHilite)
CadInputQueue.SendTentativePoint Point3dFromXYZ(0#, 0#, 0#), activeView.Index
' Start the command
CadInputQueue.SendCommand "MDL LOAD CLIPBRD COPY"
Set tec1 = Nothing
Thank's for the improved code.
Hi,
so here's how I do it, just to add another method.
1. select the items to copy
2. active the normal copy command (type 31)
3. move the mouse to the origin (i always have the corner of the title block there so I will see the yellow tentaive accusnap icon appear on the origin)
4. ctrl + c
5. cancel the active copy commmand (I only activated it to get the tentaive accusnap, you can use move or any other command if you want)
6. open the new drawing
7 ctrl + v to paste and click on the origin again.
obviously this won't work if you don't have something at the origin to tentative accusnap to.
shouldn't really be that hard to have copy with base point on the edit menu should it...