First off, I have working code for opening a cad drawing from an external program. That is perfect.
What I'm at a loss for is how can I force a drawing that is NOT readonly to open as readonly from outside cad. I know it's possible within cad, but that doesn't help me.
Can anyone help me out here?
Solved! Go to Solution.
Solved by norman.yuan. Go to Solution.
How does your external program open a drawing? Without seeing your perfectly working code, I assume it automates AutoCAD via COM API AcadDocuments.Open() method (that is the drawing is still opened in AUTOCAD!)
This method has 2 optional argument to specify if the drawing to be opened as READONLY, and specify a PASSWORD if the drawing is password-protected:
AcadDocuments.Open "C:\....\mydrawing.dwg", True
opens a drawing as read-only.
Norman Yuan
Actually, no. I'm using this to open drawings in cad..
System.Diagnostics.Process.Start(dwgpath)
Sounds like i should be doing the other way.. Is there some place I can get a look at working examples?
I have not tried it , but without rewriting all of your existing code, I believe you could just set the ReadOnly Attribute on the file.
So Toggle the Attribute before opening, and toggle it back after closing. I assumed that went without saying.
I didn't mean my last comment to be condescending, and I agree with Norman, that if you use the built-in COM mechanisms to open a drawing, there is a built-in way to open them read-only, but I just thought I would try to provide an alternative way, that did not require a significant change in your existing code.
I will admit, my suggestion requires that the users of your program have (probably a network based) permission to alter the read/write access to the file in question. At my company, that problem could come into question under certain circumstances, but not usually when dealing with drawings.
It's alright, everyone should let there inner Tony T out a few times. 🙂
I had briefly thought of doing it that way, but wasn't able to find a way of doing it. I've since gone the COM route. Works great (after several google searches and code corrections).
Would be interesting to show a result of your code,
Regards,
Oleg
Not much to it, but here you go. (though for some reason cad crashes if it's used to many times in one session... (5+ i've found))
Used with vanilla 2011
Public Sub Open_DWG ()
Dim ACAD As Object
Dim MyAcadPath As String = "dwgpath"
Dim bReadOnly As Boolean = True
On Error Resume Next
ACAD = GetObject(, "autocad.Application")
If Err.Number <> 0 Then
Err.Clear()
ACAD = CreateObject("autocad.Application")
If Err.Number <> 0 Then
MessageBox.Show("Failed to start", MessageBoxButtons.OK, MessageBoxIcon.Information)
GoTo EndOpen
End If
End If
'ACAD.Visible = True
Err.Clear()
Dim NewFile As Object = ACAD.Documents.Open(MyAcadPath, bReadOnly)
If Err.Number <> 0 Then
MessageBox.Show("Failed to open", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
EndOpen:
ACAD = Nothing
NewFile = Nothing
End Sub
Thanks so much,
Happy computing 🙂
~'J'~