It is a good question and it has come up before in the forum. I found that if you use the rule wizard you can start to define a rule based on a selection of a named polygon. However, if you try that the rule ends up showing as 'all'. If you export the rule and look at the text in a text editor you will see the text SCOPE1EXPRESSION=(InNamedPolygon('MyNamedPolygon') but it does not appear to be recognized in CircuitStudio.
I have worked around this by placing 3D bodies where I want height restrictions. You can define simple 3D bodies and place them as free models.
Expanded rule capabilities are something CS badly needs to be a professional tool.
Perhaps someone else has a solution?
[I think in AD this is done by defining rules based on rooms that you place]
I tested this a bit more and found that the component clearance rule works sort of. You can set one criteria to be a component class (for example top side components) and then the second criteria could be all. Then any 3D body you bring within the horizontal or vertical clearance zone would cause a violation. What this lacks is ability to define a zone to apply the rule.
You can, perhaps, make that zone by making a section of the pillar as a mechanical component with a 3D body that you place on the PCB at the location you want to keep things out of. Then the normal component clearance rule should work.
If you need to, you might add a new component class that contains the mechanical component and then you could base a rule off that component class. Then you could have special clearance rules that differ from the normal clearance cases.
If you put the mechanical part on the PCB but not on the schematic, when you update the PCB it will likely want to remove the part on the PCB. You can put a corresponding part on the schematic. Its schematic symbol might just be a text box or something simple and the schematic part would call out a PCB footprint. That footprint would have the 3D body (or enough of it to act as the keep out zone).
This is then just like putting any other part on your board that you can route under.
Wow, thank you Thomas. I appreciate you spending the time, I'll experiment along the same lines.
But what a faff for something that must be a fairly common requirement. Pity Altium aren't listening...
An alternative approach, which I've used to good effect, is to create a step file representing the pillars and use it to create a component that can then be placed on the PCB. I don't know whether that will do exactly what you want, but it will give a design rule error if any components collide with the pillars. This has the potential advantage that it works in 3D rather than assuming that obstacles are projections of 2D shapes.
Yes, that is what I was trying to say but perhaps unclearly. What I was suggesting further is that the pillar component could be put into a newly added component class and then a separate clearance rule can be based on the pillar's component class. This would allow some expanded clearance to account for mechanical alignments. Another way would be to make the shape of the step model slightly larger than the actual pillar diameter so as to account for the extra space that might be needed when fitting the PCB to the pillars. The amount of extra room needed might perhaps depend on whether there is fastening screw, expansion/contraction, mechanical tolerance on the parts, etc.
Or perhaps entirely clearly - it was late last night and I may not have given your response the attentiveness that it deserves :-)
I'm using CS 1.5.2.
I'm designing a PCB for a housing that has support pillars placed all over the PCB and need to be sure I don't place components in these areas. Tracks are OK.
If I put the contact areas onto the keep-out layer I can't put tracks there, which is not what I want.
I've tried putting a Fill onto Mechanical 15 layer (Courtyard Top), which is OK for eyeballing but I don't get a clearance violation in DRC.
I've added the following Clearance rule but it didn't help:
SCOPE1EXPRESSION=(OnLayer('Mechanical 15') OR OnLayer('Courtyard Top'))|
(all one line in the .RUL file)
What am I doing wrong please?