AutoCAD .NET :: Erase Hatch Using Polyline ObjectID
Aug 18, 2012
I have a drawing with a Polyline filled with Hatch. Also I have that Polyline ObjectId. So using this ployline ObjectId I want to erase the Hatch inside polyline. How I can erase the Hatch.
I create a polyline ,and then add it's objectId to a ObjectIdCollection defined by me.After the polyline is created,I would like to obtain it's second and sixth vertexes via this polyline's objectId.
I've been looking for a lisp program. I've tried to mix-and-match code to come up with a working lisp but nothing is working. I am using a polyline rectangle to start with, offsetting it out 0.75 outward, and triming everything outside of the offset and erasing the offset.
I am trying to find a command that will hatch the inner edge of a complex closed poly line, rather than hatch the entire area inside the poly line.
When I have simple shapes such as a rectangle I create a smaller rectangle inside the first that is 1' (or whatever I want my hatched area to be) smaller on all sides than the first rectangle. I hatch by selecting the two rectangles; I change the "Associative" hatch property to "No" and then delete the inner rectangle.
My problem now is that I have a complex closed poly line that I would like to hatch the inner perimeter with a set thickness, say 1 foot. Is there an easy way to hatch a inner boundary of a closed poly line or to recreate a scaled down copy of the poly line that is a set distance smaller all around. I hope I have conveyed the question clearly enough.
My Computer just recently jusst got switched to a new server...
Somethings are just acting weird now, like my hatching...
All my old hatches that were associative are acting like one seltions like if i hatch a polyline now when i go to select that hatch it now selects the polyline as well.
This never happened before abd the only way to edit it now is to either make it in the properties not associative then i lose my boundary or just to explode it then i a ihave an exploded hatch...before i made it assoc. and i could just edit or select the hatch only i think its an option setting...
I need to add a hatch fill polyline area but leave the text island out. What I did is put put Polyline ID and Text island ID into an ObjectIDCollection. The code doesn't throw any error but I can't see the hatch.
Public Function AutoCADAddHatch(ByRef newAddedHatch As Hatch, ByRef HatchElementIDs As ObjectIdCollection, ByVal HatchColour As Autodesk.AutoCAD.Colors.Color, _ ByVal HatchLayerName As String, Optional ByVal PatternName As String = "SOLID", Optional ByRef strError As String = "") As Boolean Dim db As Database = acApp.DocumentManager.MdiActiveDocument.Database
I have a bolt program that draws the thickness of a bolts in elevation as a polyline with a global width, what i need is a lisp to then change this lwpolyline to a hatch, ie if global width is 20 and the polyline is 30 long i need to change this to a 20x30 solid hatch, is it possible to get the the global width and length and convert this to a boundary hatch? I need the same thing done for bolts in plan too as the circle is a lwpolyline also.
Wblock when run from the command line used to erase the entities selected, now it seems it does not, but the dialog box shows an option to keep or erase the selected entities.
Any variable name that controls this functionality?
I am having trouble getting the erase tool to erase part of an elipse shape in Corel Draw. I select the erase tool and click and drag across the part of an elipse that I want to get rid of (so far so good), then I release the mouse and an outline of the nib tool is left behind.
I can store some ObjectId from my drawing to text file. After that how we can get back ObjectId from string read from that text file. Or have a diferrent way to store the ObjectID.
I have a list of blocks in a datagrid. When i double click a certain record it gets the objectid or handle.
Now i know how too highlight the object. But i don't want to highlight the entity but select it so i can change it's property's in the property pallet.
In the first screen shot you see the code i have. wicht highligts the record but the propperty pallet display no object selected.
But i want it to work like the next picture.
So the question is. When i know an entity's objectid or handle how do i select that entity programticly.
I need to use the Handle of the cloned object during a DeepClone override but AutoCAD shuts down when I try to use it.
This is the best I can think of but it still boots me out when I try.
Public Overrides Function DeepClone(ByVal dbObject As DBObject, ByVal ownerObject As DBObject, ByVal idMap As IdMapping, ByVal isPrimary As Boolean) As DBObject Try Return MyBase.DeepClone(dbObject, ownerObject, idMap, isPrimary) Catch Finally CompileCloneObjects(dbObject.Handle.ToString, MyBase.DeepClone(dbObject, ownerObject, idMap, isPrimary).Handle.ToString) End Try End Function
I have stored within an external database a handle of an entity within a drawing. If I have that drawing open and I retrieve that handle and then get the ObjectID from that Handle how do I convert that to a BlockReference so that I can then get position and attrribute values. I can get the position and attributes if I can just get the blockreference from the Object ID.
I am using the following code to get the ObjectID from the Handle:
Public Function ObjectIdFromHandle(db As Database, strHandle As String) As ObjectId Dim nHandle As Int32 = Int32.Parse(strHandle, Globalization.NumberStyles.AllowHexSpecifier) Dim handle As New Handle(nHandle) Dim ids(0) As ObjectId Try ids(0) = db.GetObjectId(False, handle, 0) Catch ex As Exception MsgBox(ex.Message.ToString, MsgBoxStyle.Exclamation, "Error in ObjectIDfromHandle") End Try Return ids(0) 'Return db.GetObjectId(False, handle, 0) End Function
I then want to use this ObjectID to get the BlockReference.
I need to make my application compatible with 2008 and have one error saying that ObjectClass is not a member of SubEntId (As ObjectID) in my InsertBlock routine.
Public Sub InsertBlock(ByVal blockname As String, ByVal trans As Transaction) Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database ' Test if block exists in the block table Dim bt As BlockTable =
If I have a list of handles for Autocad Entities, how would I go about selecting these entities on screen so that the user could add to this selection or remove objects from the selection? I could go with object ids as well if needed.
I have been searching and searching and coming up empty handed or at least coming up with information that doesn't seem to do what I want.
I wrote code for an application that stores links to lines and blocks in dictionaries using handles. The routines work well and I can manipulate the data marvelously, but if one of the lines or blocks get erased the whole danged opera falls apart. I knew this when I wrote the routines and have always been careful about using the ERASE command, as a matter of fact, I considered disabling it.
I am trying to make the package more robust. I have been experimenting with attaching a reactor (:vlr-erased) to the objects which fires when the object is erased. Unfortunately it fires before I can retrieve the handle of the object so that I can remove the references from the dictionaries. The only thing that I can retrieve once ERASE fires is the ObjectID. I can't seem to find a Visual Lisp routine to convert this value to a handle, does one exist? Is there an ObjectID collection that has any references in it?
Is there a way, when you are drawing a polyline, to have the tooltip box show the cumulative length of the polyline, rather than the length of the current segment being drawn?
Due to modeling purposes, I need to convert a 3D polyline to a spline. What I have been doing is:
- change polyline fit/smooth to cubic from properties - convert polyline to spline by typing spline -> object - method -> fit from properties
You can see the original 3D polyline (green) and the resulting spline (magenta) in the attached drawing.When I zoom in and measure the distance between the two entities at different points along them, at some points the perpendicular distance exceeds 5 millimeters, and I want to ensure the deviation remains under 1 millimeter or even less.
I know I can change the knot parameterization of the spline, and this does work at some locations, but the difference increases at others.Why is there a 5.6 mm difference between the spline fit point and 3D polyline vertex, as measure in the attached drawing?
Now, I can go and manually stretch the fit point to coincide with the vertex. Also, I can add fit points between existing ones to drag the spline closer to the original 3D poly.
However, some of my polys are really long, and it is very time-consuming to do this manually while measuring points along the entities to make sure the distance stays small enough.
how to automate this process? For example a lisp that would maybe take the original vertex points, add say maybe 3 (not too many) new ones between them, and then generate a spline while making sure the deviation is less than the set value of 1mm? I am using AutoCAD 2013.
I've been working on a custom polyline object, and I've got it functioning!!Having said that, I plan to run its creation around picking a point for bounary selection.
(Other than trying to step through every vertecies) is there a technique I can thow the polyline data from a traceboundary result into my custom object? I've been trying to add the polyline from traceboundary to my object BEFORE it's added to the transaction by the way...I assume that's right, since I want to put it's data in my custom object then add my custom object to the transaction instead.
Is there any way at all to draw a new polyline - from the endpoint of another polyline, and have it automatically join as one polyline from the existing section??
I know this can be done via PEDIT, but its so laborious and soo many clicks, and I have alot of segmented Polylines that I need to consolidate when I draft.
I have a hatch (ANSI31) enclosed by a closed polyline. Whenever I change the hatch from ANSI31 to GRAVEL some of the hatch shows up outside the boundary. The Polyline consists of both arcs and line segments, and the hatching errors are occurring within the radius of the arc segments. Changing it from Associative to Non Associative makes no change.
I am in need of a lisp routine which will automatically pick up all hatch and solid hatch patterns within a drawing and change the colour to colour 254.