Solid LinePattern

Solid LinePattern

Anonymous
Not applicable
4,242 Views
13 Replies
Message 1 of 14

Solid LinePattern

Anonymous
Not applicable

Just wanting to confirm the ElementId of the "Solid" LinePattern. When I retrieve the list of LinePatternElements using a FilteredElementCollector it retrieves all of the line patterns except the built in "Solid" line pattern. Using the RevitLookUp addin I was able to determine the ElementId of the solid linePattern is -3000010 but I just wanted to confirm that this doesn't change between flavours and versions of Revit, and also ask if there is another way to retrieve the ElementId of the "solid" linePattern?

0 Likes
Accepted solutions (2)
4,243 Views
13 Replies
Replies (13)
Message 2 of 14

Joe.Ye
Alumni
Alumni

Hi krispy,

I cannot see the LinePattern with the name of Solid. Do you mean the fill pattern? There is a fill pattern named Solid. However its id is 3. Thanks for your clarification.


Joe Ye
Contractor
Developer Technical Services
Autodesk Developer Network
0 Likes
Message 3 of 14

Anonymous
Not applicable
Hi Joe, thanks for replying. Yes I really mean the line pattern, it is the default pattern that doesn't have any dashes just a single continuous line.
0 Likes
Message 4 of 14

Anonymous
Not applicable

It does not show up in the list when you select "Line Patterns" from the "Manage" ribbon tab, but will show up when you are assigning object styles or overriding graphics.

0 Likes
Message 5 of 14

Joe.Ye
Alumni
Alumni
Thanks Krispy for the update.

yes, I see the solid line pattern now. And I can get its Id from an line pattern overrided element

However, using this ElementId (which value is -3000010.
And we can construct an ElementId with the value of -3000010. And then assign this ElementId to line pattern Id of the OverrideGraphicSettings object to change an element's line pattern.

With regard to the Id unique issue, as far as I know the negative value in Revit is stable. I am double checking with the team if this is the case.


Joe Ye
Contractor
Developer Technical Services
Autodesk Developer Network
0 Likes
Message 6 of 14

Ning_Zhou
Advocate
Advocate

hi krispy / joe,

seems i've trouble to get that solid linePattern -3000010 either using lookup or coding, any chance to give a hint? thanks.

0 Likes
Message 7 of 14

Anonymous
Not applicable

I used the "ProjectionLinePatternId" of the "OverrideGraphicSettings" of a category that I manually overrode the line pattern to be solid in Visibility/Graphics. This told me the ElementId of the "Solid" line pattern... I have been able to use this value in my app to apply the solid line pattern as an override programatcially but have had to hard code the ElementId value in... just wanted to confirm that the Id is stable, or if there is another way to retrieve a reference to the solid line pattern.

 

uidoc.ActiveView.GetCategoryOverrides(categoryId).ProjectionLinePatternId;

0 Likes
Message 8 of 14

Ning_Zhou
Advocate
Advocate
thanks krispy, it works, but how can i get it from lookup?
0 Likes
Message 9 of 14

Joe.Ye
Alumni
Alumni
Accepted solution

Hi Krispy,

Our engineering team confirmed the negative Id value meaning as follow.

"egative element id values in Revit are generally specially designated ids that are known internally to the system. Because they are an internal representation, the Revit team reserves the right to change them when needed, but in all probability they won’t be changed. The number definitely won’t change between flavors of Revit (e.g. Architecture, LT) on the same version."

 

 

Our mentioned to get the solid line pattern element. I tested and it shows that we cannot  filter out the solid line pattern using FilteredElementCollector.   However I don't think it is a problem.

When we want to assign the solid line pattern to a override, we can just create a ElementId object and set its IntegerValue to -3000010. And then assign this ElementId object to the override. This can successfully change the target element's or category's line pattern to solid line pattern.

 

Here is the ShartDevelop code I used.

 

public void ReadElementOverwriteLinePattern()
        {
                Document doc = this.ActiveUIDocument.Document;
            Selection sel = this.ActiveUIDocument.Selection;

            
            ElementId id = new ElementId(-3000010);
            Reference ref2 = sel.PickObject(ObjectType.Element,"Please pick another element");            
            Element elem2 = doc.GetElement(ref2);            
            
            Transaction trans = new Transaction(doc);
            trans.Start("change cut line pattern");
            OverrideGraphicSettings override2 = doc.ActiveView.GetElementOverrides(elem2.Id);
            override2.SetCutLinePatternId(id);
            doc.ActiveView.SetElementOverrides(elem2.Id,override2);
            trans.Commit();
        }



Joe Ye
Contractor
Developer Technical Services
Autodesk Developer Network
0 Likes
Message 10 of 14

Anonymous
Not applicable

Thanks Joe, yes I was already doing that to assign the solid pattern. Thanks for the confirmation that there is no other way to get the solid line pattern programatically. I will continue to use the negative ElementId value until it breaks 😉

0 Likes
Message 11 of 14

Joe.Ye
Alumni
Alumni
Accepted solution



We cannot use the Revit lookup to see the solid line pattern. it is special element in revit.

I just found that Revit does provide an API to return the solid line pattern.

LinePatternElement.GetSolidPatternId() static method to return the solid line pattern Id.

The RevitAPI.chm documents says: Note that Solid is special. It isn't a line pattern at all -- it is a special code that tells drawing and export code to use solid lines rather than patterned lines. Solid is visible to the user when selecting line patterns.

So we don't need to worry about the changes of the id integer value. Just call the static method to get the ElementId.



Joe Ye
Contractor
Developer Technical Services
Autodesk Developer Network
Message 12 of 14

Anonymous
Not applicable

Good news. I have updated my code and it works well. Thanks Joe.

0 Likes
Message 13 of 14

ahmed.errazak
Enthusiast
Enthusiast

For to change color with SETELEMENTOVERRIDES is so simply !
è doc.ActiveView.SetElementOverrides(ElementID,color )


But for to read of get color from (ElementID of Object) I not find
Have someone an direction to search?

0 Likes
Message 14 of 14

71nizar71
Community Visitor
Community Visitor

Thanks all for the helpful information, 

I was wondering if it's not only 'Solid' pattern is built-in (or has a negative ElementId), although I already checked other patterns like: 'Overhead' ... etc. they do have a positive ElementId

 

0 Likes