ThinkGeo.com    |     Documentation    |     Premium Support

CadFeatureLayer

Hi,


some questions to CadFeatureLayer:


1. How to retrieve the CAD-Attributes like Level/Layer, Style-Information etc.?


2. Using reprojected CadFeatureLayer is not "snap" and "select" able? It seems to me that the reprojection with .FeatureSource.Projection = BaseProjection wil transform the data to the correct location but if selecting/querying the layer the features will not be found. All items are held in internal coordinates? The same issue for GetBoundingBox, function returns not the reprojected BoundingBox.


3. Text items will be rendered as Polygons? So the display is very poor. Have a look at my screen shot.


With these issues the use of CadFeatureLayer is not more than RasterLayer.


Are there any better ways to get more control to CadFaetureLayer?


Regards


Hardy




Hi Hardy,



Thanks for your focus on CadFeatureLayer.

For the #1 question, I have to say we didn’t implement these functions and we just provide a few Api to display the Cad file.

#2, would you let us know which version you are referring? As I know we have supported the projection on this layer since 8.0.

#3, yes, the labels are drawn as polygons and we can image this would bring a performance or bad user experience issue 



Currently, since the CadFeatureLayer is a new feature since map suite 8.0, We can image a lot of functions are missing or needs to enhance. So, next , we will pay more attentions and resources on it to make it better. Now, I have summarized your requirements and submit them to our issue system so that our product managers will evaluate it and develop it once we have enough resources.



Hope it helps and once any news, I will update here.

Thanks,

Troy

Hi Troy,


I'm using version desktop 8.0.0.35.


If labels are drawn as polygons it would be a good idea to set a font for rendering or to place a point/line geometry with rotation for text label.


So labels will be transformed to a line string geometry and the text is displayed using correct font/style parameters.


Today for me it's important to have vectors from the CadFeatureLayer which I can snap to. So my #2 has a priority for me.


Hope you can do something in that area.


Regards


Hardy



Hi Hardy,



Your guess is correct that the CAD labels are drawn as polygons in CADFeatureLayer. We are using Microsoft media library to get the label shape, some codes like the below:


            FormattedText formattedText = new FormattedText(textString, CultureInfo.GetCultureInfo(“en-us”), FlowDirection.LeftToRight, new Typeface(fontStyle.TypeFace), fontSize, System.Windows.Media.Brushes.Black);

            Geometry geometry = formattedText.BuildGeometry(position);
            pathGeometry = geometry.GetOutlinedPathGeometry();

Basically, we can treat the label as a vector shape which means the shape should be not distortion. You can see our wiki sample on CAD, their labels are clear as well. But from your screenshot, we have no idea why the labels are indistinct. So, would you mind to send us your .dwg file so that we can see what’s the exact reason?



Also, you suggest to give a way to set a font or rotate the text label. Based on our current structure, like the above codes show, we have converted the labels to polygon with the specified font size or rotation, both font size and rotation are calculated based on the .dwg file. So, it is almost impossible to provide any APIs to change that, I think this should be one of the part of the CAD file. Another reason is the CadFeatureLayer will get all the features, which also includes the labels polygons feature, so, it is also hard to split the labels features from the mixed features.



As for the question: How to retrieve the CAD-Attributes? Please forgive my poor understanding on CAD but I am a bit confusion on what’s the purpose with them? Do you want to use them to render the layer or others? as I know, we are using their attributions as styles to render all the shapes. That’s why we can give a value “EmbeddedStyling” for  the StylingType property of the layer.



 For your projection issue, as I know this layer supports the projection. I try to add the projection for the layer and get its boundingbox, then I can get a projected boundingbox rather than the original one. But you mentioned you have the issue on doing the “snap” and “select”, so I am guessing what my test is not the same like yours. So, would you mind to give us more details on your scenarios or any codes so that we can see the differences?



Btw, in case you are doing the snap and then save it back to cad file, currently, our CADFeatureLayer don’t support the “write” feature but only read it out on the map.



Hope it helps and let me know if you have any questions.

Thanks,

Troy 

Hi Hardy,



The following is my answers for your questions, please have a look:



        
  1. Just wondering why do you want to get the CAD-Attributes, do you want to use them in some 3rd party assemblies or just dump it out to have a look? Map Suite loads these attributes and use them rendering the features if the CadFeatureLayer.StylingType is set to EmbeddedStyling, so in most cases we don’t need to retrieve those attributes.

  2.     
  3. I couldn’t recreate your issue, I tried getting bounding box from a projected layer and the result was correct. Would you mind to give us your sample code so we can have a further look?

  4.     
  5. You are correct that the CAD labels are drawn as polygons in CADFeatureLayer. Behind the scenes. we are using Microsoft media library to get the shape from the label, as following:



     FormattedText formattedText = new FormattedText(textString, CultureInfo.GetCultureInfo(“en-us”), FlowDirection.LeftToRight, new Typeface(fontStyle.TypeFace), fontSize, System.Windows.Media.Brushes.Black);

            Geometry geometry = formattedText.BuildGeometry(position);
            pathGeometry = geometry.GetOutlinedPathGeometry();



        We treat the labels as vector shapes which, as you can see in our CAD sample, are pretty clear. We have no idea why the labels are indistinct in your screenshot where the labels look like images instead of vectors.  Would you mind sending us your .dwg file so we can have a close look?
        Thanks for sharing the ideas of setting the font and generating the shapes accordingly, I would add it to our list to have a further investigation. 



Thanks and if any questions, don’t hesitate to let us know.

Troy




Hi 
 Hartwig appears to have similar queries/requirements to myself… 
 My application requires the use of DWG files as a source, however these drawings include info/layers that I need to be able to hide.   I’m using the 8.0.0.35 release of WpfDesktop, and have loaded the files using the CadFeatureLayer, however the features that it exposes do not contain any form of column information which I could use to analyse the drawing.  The example code doesn’t access the features, but simply creates a bitmap.  This image contains colour info that would be defined within a layer.  Is there any way that I can, or will be able to, access this info? 
  
 Cheers 
  
 Greg

Hi Troy,


to retrieve the CAD-Attributes will help to analyze the data. For example: there is a drawing with some layers. One layer is called "utilities". You can find several LineStrings on that layer. The blue ones are water pipes, the red electricity, green's are gas ...


If I could get the CAD-Attributes I would be able to scan the geometries and to select them in different ways or hide them, move them to a different layer in my map and so on.


I think that's the same Chris/Greg are looking for.


Ok, attached the DXF.


Regards


Hardy



kataster.zip (156 KB)

Hi Hardy&Greg,



1. For the CAD-Attributes info,

I think it makes sense to sort the features out and that should be a common requirement. I will take the new feature into our TODO list and currently, the first sight from my mind is we might add some columns info into those features or add some APIs if necessary. Before implementing it, we’ll highly appreciated if your guys have any good ideas and share with us.



2. The text label indistinct issue.

 Thanks for your data, It proves a bug and we are working on it now, but it looks like it is hard to fix in a short time. If any progresses, I will update here.



Thanks,

Troy




Hi Guys,


I have done some tests with GDAL and the DXF driver. Opening DXF file you'll get some attributes like layer, linestyle and general styling information. These are handling also labels as a point and serving information about font, size, rotation and the raw text.


With this information it seems to be very easy to read the DXF elements to a FeatureLayer and to handle the attributes as columns.


But I will wait for the MapSuite API/Solution. It's better to have a well formed API.


Regards


Hardy




Hi Hardy, 



Thanks for your investigation and we will take it into considerations. One thing is we are using Teigha library instead of GDAL to access CAD files, but no matter which, the requirements are the same. We will work on it once our resource is enough. 



Hope we’ll have a good solution for that. 

Thanks, 

Troy

Hi Troy & Hardy 
  
 Extracting the attributes into columns on the features would be extremely useful.  We have used a 3rd party tool to convert dwg files into shp files.  The feature objects generated were populated with columns for such things as ID, LAYER, RGB (0,1,2) , NAME, ROTATION and SCALE.  The most useful of these being the RGB and LAYER values. 
  
 I’m not a CAD user so am not totally aware of the attributes that can be defined for the features but I imagine that these are probably the standard. 
  
 From the bitmap generated in the demo example, it looks like you are able to extract the colours. 
  
 Hope this helps for briefing your developers. 
  
 Regards 
  
 Greg 
  


Thanks Chris, 
  
 Your information is very useful for us. I have marked this thread so that we can refer to this during implementing this feature. More attached information please feel free to let us know. 
  
 Thanks, 
 Troy