AutoCAD .NET :: Filter Out Frozen Entities From A Selection?
Sep 28, 2011
I'm using a typed value list to create a selection filter to use with Editor.SelectAll(filter) method. The selection returns both frozen & un-frozen entities. Is there a way to filter out frozen objects using the filter?
There are blocks in the drawing, each containing several nested entities. Need a command which would find all the nested entities which got into the selection area provided by user (not necessary to select entities, just get the ids). GetNestedEntity() does what I need but for a single entity only.
Selection of 'Trim' command does exactly what I need. How could I achieve the same behaviour?
the problem is I don't know how to contrust a selectionset with all entites in the drawing selected. I've spent the major part of the day searchin here and in the API reference. But nothing.. how to create such a selection set. I'm using the COM API in C#.net
I have redined AutoCAD's copy command alias to C, but to also do other things, like set a few important variables in the background. One of the lisps I've incororated are making new viewports, that also create layers that are visibly specific to the viewport being created.
We were tasked a while ago to do an easy job of copying entities (dimensions, text and what not) in a layout. The problem is, users are copying the viewports too, which is bit more ineffificent than using the create viewport command I developed.
Is there a way to see if a selection set includes (0 . "VIEWPORT") entities? If the check returns nil, well then all is good. If the check returns "true", then I can prompt the user that a "VIEWPORT" entity is selected. I can then exit the command, or ask the user if they are sure they want to copy the "VIEWPORT" entity.
The following code filter all lines which are in the layer "0" and line weight is 0.35. But it does not. my selection set is empty.
Dim typVal(2) As TypedValue typVal(0) = New TypedValue(DxfCode.Start, "LINE") typVal(1) = New TypedValue(DxfCode.LayerName, layName) typVal(2) = New TypedValue(DxfCode.LineWeight, Convert.ToInt16(0.35)) ---------------------------------------------------------------------------------------------------------- Dim sf As SelectionFilter = New SelectionFilter(typVal) Dim ss As SelectionSet = ed.SelectAll(sf).Value
I'm trying to select two specific types of blocks from a drawing so that I can create layouts for each one of the pairs of blocks in my drawing. Basically, one block is the outline of the piece of the drawing and the second contains information about the drawing. I would like to select all of the outline blocks and then create a selection to get the second block which is inside the bounds of the first block.
I'm not sure how to create a set of typed values to do this. Here is my code so far which sets up a filter to get the first block and then for each of the blocks that it finds, it would select the block with all of the information which is where I am having problems. I don't know how to create a filter based upon location of the block.
using (Transaction tr = acCurDb.TransactionManager.StartTransaction()) { filList = new TypedValue[] { new TypedValue((int)DxfCode.Operator,"<and"), new TypedValue((int)DxfCode.Start,"INSERT"), new TypedValue((int)DxfCode.BlockName,"D-1*"), new TypedValue((int)DxfCode.Operator,"and>")}; // Build a filter list so that only block references are selected filter = new SelectionFilter(filList); //Select all res = [code]........
I'm trying to use a Selection Filter on Block Reference XData value. But I get no hits, it works fine with Lines and Polylines that has the same kind of XData.
Is it a bug or do I have to define my Selection Filter differently when working with Block Reference?
Here is a part of the code :
TypedValue[] flt = new TypedValue[] { new TypedValue(-4, " new TypedValue(-4, " new TypedValue(8, "POLYLINE_LAYER"), new TypedValue(1001, "Object_Id"), new TypedValue(1000, "166448"), new TypedValue(-4, "AND>"), [code].......
I'm putting together some quick function that I can send 2 arguments and get from it the total area of a given hatch on the given layer. I think everything is in order but I'm having trouble with the selection set filter:
(DEFUN GET-HATCH-AREA (HATCH LAYR / area sset) (COND((AND(ssget "X" '((0 . "HATCH") (2 . HATCH) (8 . LAYR))) (SETQ area 0) (VLAX-FOR H (SETQ sset (VLA-GET-ACTIVESELECTIONSET (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT)))) (SETQ area (+ (VLA-GET-AREA h) area))) (ALERT(STRCAT "Total area = " (IF (OR (= (GETVAR "lunits") 3) (= (GETVAR "lunits") 4) ) (STRCAT (RTOS area 2) " sq. in. (" (RTOS (/ area 144) 2) " sq. ft.)") (RTOS area) ) ) ) (VLA-DELETE sset) ) ) ))
I converted a drawing in pdf format into dxf. I'm using Autocad 2012 to edit the file. The dxf conversion is good, but of course there is no difference between the diffent kind of lines.
I would like to select all lines which have an orientation of 30° with the horizontal and put them into a new layer. Is there a way to do that ? I though about using a filter.
Then I will edit the properties oh those lines (color, thickness, type....).
Any settings where you can switch on/off the selection filter popup? Mine is just gone. Under application options I don't see anything to do with switching it off.
I have a problem with selecting all references to a specific dynamic block. When I use the filter below only block “D2” is selected, which is not a dynamic block, Block "Bulb120227” which is a dyn block is not
Dim values() As TypedValue = { _ New TypedValue(0, "INSERT"), _ New TypedValue(-4, "<OR"), _ New TypedValue(2, "D2"), _ New TypedValue(2, "Bulb120227"), _ New TypedValue(-4, "OR>") _ }
How should the filter be done to filter out the dyn block that I want several block should be filtered out in one selection.If it is possible to achieve with just a filter at all?
I have determine that my AutoCad 2009 will allow me to drag/drop layers to an existing Group Layer Filter, but it will not allow me to right click on the Group Filter>Select Layers>Add. Once I go to the model space an select layers then "enter" no layers are added to the Filter Group and it gives me an error message that says "unable to modify layers while another command is active".
I was wondering how to develop a Selection Set Filter that will select only Cogo Points? I know I need to use Dxf.Start as the code, but then what's the string associated with Cogo Points? Can't find any documentation on this or any Civil 3D-unique entities...I know Line is just "Line" and "Arc" is just arc...but Polyline is the unintuitive "LWPolyline" and "Cogo Point" isn't working.
I have some strings like the ones below. They are always in the same format. The first line is Cold Water, the second is Hot Water and the third is Hot Water Return.
I want to build a selection set based on whether it is CW, HWS or HWR. Right now I have a routine to retrieve the string by using ENTSEL. In other words if I want to use the line of text for Cold Water I have to select it.
I'd like to be able to window them all and filter the SS for only the string containing CW and conversly HWS and HWR. SSGET function filter.
I use a lot of Group Layer Filters so I can turn things on/off quickly. My problem is I have been creating my Layer Filter Group by right clicking on the Layer Group Filter>going to Selection>then click Add> then go back to my drawing or Layout tab and select all of the layers I need then click enter. One day my AutoCad would not let me do that anymore, and even after I click on enter it gives me an error message saying the command is still active. Now from my Layer Properties Manager I can select any layer and drag/drop it into any filter and it works, but I really need to be able to select things within the model space or paper of each layout tabs.
When working with an xref background, we are experiencing really bad lag, and delays when working with objects that are drawn on top of an xref. I have restarted the affected computers, restarted the server that all files are housed on, upgraded the network switch...with no results. Tasks that should take fractions of a second, are sometimes lagging anywhere from 3-15 seconds depending on what layers of the xref are un-frozen and visible.
I have a sub that gets a page number and a collection of layer ID's to freeze. The sub will freeze the selected layers in all of the viewports except for the new one.
After running the program, the layers in the specific viewport are still visible, but when you go into Model mode in the viewport and check the layer status, it shows the selected layers are set to Freeze in the viewport.
If I save the drawing, exit,and re-open it, the layers are now not visible. I believe I have the "Regen" in the correct spot.
The code is attached.
' Freezes the selected layers in all other existing viewport layouts Public Sub freezeOtherLayouts(ByVal pageNumber As Integer, ByVal layersToFreezeLayerIds As ObjectIdCollection) Dim doc As Document =
When hovering over this button in the layer manager the following is displayed.
"Creates a new layer and freezes it in all existing layout viewports. This button is accessible from the model tab or layout tabs".
Key words here being EXISTING and LAYOUT viewports. So I've got an existing xref attached to an existing layout and per the displayed tip this means, to me, any new layer created within the xref that has this option enabled will be frozen in all existing layouts.
Since a layout is a viewport, I assume this means the layout itself, not a viewport object used for viewing modelspace content from a layout.
Even if this means a viewport object used for viewing modelspace content, that doesn't work either, so what exactly is the point of this feature?
One of the computers that have AutoCad installed will not load all the way. It will start to show the welcome screen and the it will freeze. Looking on the internet that you go into task manager and kill the process called WSCommCntr, but it is not appearing in the task manager.
Originally the pc was on XP SP2 and with .Net 3.5. I updated both to the latest version. I have reinstalled AutoCad and I am still getting the issue. All hardware checks passed.
Also the issue sounds just like the one here URL.... , but I uninstalled the .Net Framework and reinstalled version 3.5 SP1. That did not work so I uninstalled that and put on 3.5. This still is not working.
I have an assembly file I am trying to put together with parts I downloaded from grab cad. I believe the parts were originally modelled in solidworks. I tried scaling some of the parts to be more my size and was directed to inventor fusion where I was able to scale the parts but now the assembly is acting strangely. As soon as a part gets one constraint applied to it n the assembley the part wont move like it is grounded but its not. When I click degrees of freedom it says the part has some. Why the assembly is acting like this? The file is attached.
Lately, whenever Civil 3D crashes, my menus and ribbons would freeze, but my command line still works. It's like the entire user interface locks up. I'm able to workaround the problem by rebooting the computer and then recovering any drawings I had open at the time of the crash.
-Civil 3D 2013 sp2 -Windows 7 64-bit -Intel i7 Dual Core with 2.40 GHz -8 GB of RAM -AMD Radeon HD 6770M -Civil 3D user since 2007
Dim editor As Editor = Application.DocumentManager.MdiActiveDocument.Editor Dim db As Database = HostApplicationServices.WorkingDatabase Dim tr As Transaction = db.TransactionManager.StartTransaction()
[Code].....
the only prob is : I want selec all block but not the block on layer frozen, off or not visible...
I can check all layer stat on each block.. (i do that already for check each block (name) but i want a solution more easy.)